/************************************************************************/ /* mlkesl@stthomas.edu =====> Ascii Automapper utility */ /* Let me know if you use this. Give a newbie some _credit_, */ /* at least I'm not asking how to add classes... */ /* Also, if you fix something could ya send me mail about, thanks */ /* PLEASE mail me if you use this or like it, that way I will keep it up*/ /************************************************************************/ /* MapArea -> when given a room, ch, x, and y,... */ /* this function will fill in values of map as it should */ /* ShowMap -> will simply spit out the contents of map array */ /* Would look much nicer if you built your own areas */ /* without all of the overlapping stock Rom has */ /* do_map -> core function, takes map size as argument */ /************************************************************************/ /* To install:: */ /* remove all occurances of "u1." (unless your exits are unioned) */ /* add do_map prototypes to interp.c and merc.h (or interp.h) */ /* customize the first switch with your own sectors (add road :) */ /* remove the color codes or change to suit your own color coding */ /* Other stuff:: */ /* make a skill, call from do_move (only if ch is not in city etc) */ /* allow players to actually make ITEM_MAP objects */ /* change your areas to make them more suited to map code! :) */ /* I WILL be making MANY enhancements as they come but a lot of */ /* people want the code, and want it now :p */ /* Kermit's page also has this snippet, mail me for any q's though */ /************************************************************************/ /* mlk update: map is now a 2 dimensional array of integers */ /* uses SECT_MAX for null */ /* uses SECT_MAX+1 for mazes or one ways to SECT_ENTER */ /* use the SECTOR numbers to represent sector types :) */ /************************************************************************/ #include /* for isalpha */ #include #include #include #include #include "merc.h" #include "olc.h" #define MAX_MAP 160 #define MAX_MAP_DIR 4 int map[MAX_MAP][MAX_MAP]; int offsets[4][2] ={ {-1, 0},{ 0, 1},{ 1, 0},{ 0,-1} }; void MapArea (ROOM_INDEX_DATA *room, CHAR_DATA *ch, int x, int y, int min, int max) { ROOM_INDEX_DATA *prospect_room; EXIT_DATA *pexit; int door; /* marks the room as visited */ map[x][y]=room->sector_type; for ( door = 0; door < MAX_MAP_DIR; door++ ) { /* cycles through for each exit */ if ( (pexit = room->exit[door]) != NULL && pexit->u1.to_room != NULL && can_see_room(ch,pexit->u1.to_room) /* optional */ && !IS_SET(pexit->exit_info, EX_CLOSED) ) { /* if exit there */ if ((xmax)||(y>max)) return; prospect_room = pexit->u1.to_room; if ( prospect_room->exit[rev_dir[door]] && prospect_room->exit[rev_dir[door]]->u1.to_room!=room) { /* if not two way */ map[x][y]=SECT_MAX+1; /* one way into area OR maze */ return; } /* end two way */ /* if ( IS_NPC(ch) ||(!IS_SET(ch->act,PLR_HOLYLIGHT)) ||(!IS_IMMORTAL(ch)) ) */ if( (prospect_room->sector_type==SECT_ROCK_MOUNTAIN) ||(prospect_room->sector_type==SECT_SNOW_MOUNTAIN) ||(prospect_room->sector_type==SECT_HILLS) ||(prospect_room->sector_type==SECT_CITY) ||(prospect_room->sector_type==SECT_INSIDE) ||(prospect_room->sector_type==SECT_ENTER) ) { /* players cant see past these */ map[x+offsets[door][0]][y+offsets[door][1]]=prospect_room->sector_type; /* ^--two way into area */ /*if (door!=0) return;*//*not needed for my mud becuz of euclid world map*/ /* ^--takes care of stopping when north is one of sectors you cant see past */ } if (map[x+offsets[door][0]][y+offsets[door][1]]==SECT_MAX) { MapArea (pexit->u1.to_room,ch, x+offsets[door][0], y+offsets[door][1],min,max); } } /* end if exit there */ } return; } /* mlk :: shows a map, specified by size */ void ShowMap( CHAR_DATA *ch, int min, int max) { int x,y; for (x = min; x < max; ++x) { /* every row */ for (y = min; y < max; ++y) { /* every column */ if ( (y==min) || (map[x][y-1]!=map[x][y]) ) switch(map[x][y]) { case SECT_MAX: send_to_char(" ",ch); break; case SECT_FOREST: send_to_char("{g@",ch); break; case SECT_FIELD: send_to_char("{G\"",ch); break; case SECT_HILLS: send_to_char("{G^",ch); break; case SECT_ROAD: send_to_char("{m+",ch); break; case SECT_MOUNTAIN: send_to_char("{y^",ch); break; case SECT_WATER_SWIM: send_to_char("{B:",ch); break; case SECT_WATER_NOSWIM: send_to_char("{b:",ch); break; case SECT_UNUSED: send_to_char("{DX",ch); break; case SECT_AIR: send_to_char("{C%",ch); break; case SECT_DESERT: send_to_char("{Y=",ch); break; case SECT_ENTER: send_to_char("{W@",ch); break; case SECT_INSIDE: send_to_char("{W%",ch); break; case SECT_CITY: send_to_char("{W#",ch); break; case SECT_ROCK_MOUNTAIN:send_to_char("{D^",ch); break; case SECT_SNOW_MOUNTAIN:send_to_char("{W^",ch); break; case SECT_SWAMP: send_to_char("{D&",ch); break; case SECT_JUNGLE: send_to_char("{g&",ch); break; case SECT_RUINS: send_to_char("{D#",ch); break; case (SECT_MAX+1): send_to_char("{D?",ch); break; default: send_to_char("{R*",ch); } /* end switch1 */ else switch(map[x][y]) { case SECT_MAX: send_to_char(" ",ch); break; case SECT_FOREST: send_to_char("@",ch); break; case SECT_FIELD: send_to_char("\"",ch); break; case SECT_HILLS: send_to_char("^",ch); break; case SECT_ROAD: send_to_char("+",ch); break; case SECT_MOUNTAIN: send_to_char("^",ch); break; case SECT_WATER_SWIM: send_to_char(":",ch); break; case SECT_WATER_NOSWIM: send_to_char(":",ch); break; case SECT_UNUSED: send_to_char("X",ch); break; case SECT_AIR: send_to_char("%",ch); break; case SECT_DESERT: send_to_char("=",ch); break; case SECT_ENTER: send_to_char("@",ch); break; case SECT_INSIDE: send_to_char("%",ch); break; case SECT_CITY: send_to_char("#",ch); break; case SECT_ROCK_MOUNTAIN:send_to_char("^",ch); break; case SECT_SNOW_MOUNTAIN:send_to_char("^",ch); break; case SECT_SWAMP: send_to_char("&",ch); break; case SECT_JUNGLE: send_to_char("&",ch); break; case SECT_RUINS: send_to_char("#",ch); break; case (SECT_MAX+1): send_to_char("?",ch); break; default: send_to_char("*",ch); } /* end switch2 */ } /* every column */ send_to_char("\n\r",ch); } /*every row*/ return; } /* mlk :: shows map compacted, specified by size */ void ShowHalfMap( CHAR_DATA *ch, int min, int max) { int x,y; for (x = min; x < max; x+=2) { /* every row */ for (y = min; y < max; y+=2) { /* every column */ /* mlk prioritizes*/ if (map[x][y-1]==SECT_ROAD) map[x][y]=SECT_ROAD; if (map[x][y-1]==SECT_ENTER) map[x][y]=SECT_ENTER; if ( (y==min) || (map[x][y-2]!=map[x][y]) ) switch(map[x][y]) { case SECT_MAX: send_to_char(" ",ch); break; case SECT_FOREST: send_to_char("{g@",ch); break; case SECT_FIELD: send_to_char("{G\"",ch); break; case SECT_HILLS: send_to_char("{G^",ch); break; case SECT_ROAD: send_to_char("{m+",ch); break; case SECT_MOUNTAIN: send_to_char("{y^",ch); break; case SECT_WATER_SWIM: send_to_char("{B:",ch); break; case SECT_WATER_NOSWIM: send_to_char("{b:",ch); break; case SECT_UNUSED: send_to_char("{DX",ch); break; case SECT_AIR: send_to_char("{C%",ch); break; case SECT_DESERT: send_to_char("{Y=",ch); break; case SECT_ENTER: send_to_char("{W@",ch); break; case SECT_INSIDE: send_to_char("{W%",ch); break; case SECT_CITY: send_to_char("{W#",ch); break; case SECT_ROCK_MOUNTAIN:send_to_char("{D^",ch); break; case SECT_SNOW_MOUNTAIN:send_to_char("{W^",ch); break; case SECT_SWAMP: send_to_char("{D&",ch); break; case SECT_JUNGLE: send_to_char("{g&",ch); break; case SECT_RUINS: send_to_char("{D#",ch); break; case (SECT_MAX+1): send_to_char("{D?",ch); break; default: send_to_char("{R*",ch); } /* end switch1 */ else switch(map[x][y]) { case SECT_MAX: send_to_char(" ",ch); break; case SECT_FOREST: send_to_char("@",ch); break; case SECT_FIELD: send_to_char("\"",ch); break; case SECT_HILLS: send_to_char("^",ch); break; case SECT_ROAD: send_to_char("+",ch); break; case SECT_MOUNTAIN: send_to_char("^",ch); break; case SECT_WATER_SWIM: send_to_char(":",ch); break; case SECT_WATER_NOSWIM: send_to_char(":",ch); break; case SECT_UNUSED: send_to_char("X",ch); break; case SECT_AIR: send_to_char("%",ch); break; case SECT_DESERT: send_to_char("=",ch); break; case SECT_ENTER: send_to_char("@",ch); break; case SECT_INSIDE: send_to_char("%",ch); break; case SECT_CITY: send_to_char("#",ch); break; case SECT_ROCK_MOUNTAIN:send_to_char("^",ch); break; case SECT_SNOW_MOUNTAIN:send_to_char("^",ch); break; case SECT_SWAMP: send_to_char("&",ch); break; case SECT_JUNGLE: send_to_char("&",ch); break; case SECT_RUINS: send_to_char("#",ch); break; case (SECT_MAX+1): send_to_char("?",ch); break; default: send_to_char("*",ch); } /* end switch2 */ } /* every column */ send_to_char("\n\r",ch); } /*every row*/ return; } /*printing function*/ void do_printmap(CHAR_DATA *ch, char *argument) { int x,y,min=-1,max=MAX_MAP-1; FILE *fp; if (strcmp(ch->name,"Kroudar")) { send_to_char("Curiousity is a disease...",ch); return; } for (x = 0; x < MAX_MAP; ++x) for (y = 0; y < MAX_MAP; ++y) map[x][y]=SECT_MAX; MapArea(ch->in_room, ch, 80, 80, min, max); fclose (fpReserve); fp = fopen("WILDERNESS_MAP","w"); for (x = min; x < max; ++x) { /* every row */ for (y = min; y < max; ++y) { /* every column */ switch(map[x][y]) { case SECT_MAX: fprintf(fp," "); break; case SECT_FOREST: fprintf(fp,"@"); break; case SECT_FIELD: fprintf(fp,"\""); break; case SECT_HILLS: fprintf(fp,"^"); break; case SECT_ROAD: fprintf(fp,"+"); break; case SECT_MOUNTAIN: fprintf(fp,"^"); break; case SECT_WATER_SWIM: fprintf(fp,":"); break; case SECT_WATER_NOSWIM: fprintf(fp,":"); break; case SECT_UNUSED: fprintf(fp,"X"); break; case SECT_AIR: fprintf(fp,"~"); break; case SECT_DESERT: fprintf(fp,"="); break; case SECT_ENTER: fprintf(fp,"$"); break; case SECT_INSIDE: fprintf(fp,"I"); break; case SECT_CITY: fprintf(fp,"#"); break; case SECT_ROCK_MOUNTAIN:fprintf(fp,"^"); break; case SECT_SNOW_MOUNTAIN:fprintf(fp,"^"); break; case SECT_SWAMP: fprintf(fp,"&"); break; case SECT_JUNGLE: fprintf(fp,"&"); break; case SECT_RUINS: fprintf(fp,"#"); break; case (SECT_MAX+1): fprintf(fp,"?"); break; default: fprintf(fp,"*"); } /* end switch2 */ } /* every column */ fprintf(fp,"\n"); } /*every row*/ fclose(fp); fpReserve = fopen( NULL_FILE, "r" ); return; } /* will put a small map with current room desc and title */ void ShowRoom( CHAR_DATA *ch, int min, int max) { int x,y,str_pos=0,desc_pos=0,start; char buf[500]; char desc[500]; char line[100]; strcpy(desc,ch->in_room->description); map[min][min]=SECT_MAX;map[max-1][max-1]=SECT_MAX; /* mlk :: rounds edges */ map[min][max-1]=SECT_MAX;map[max-1][min]=SECT_MAX; for (x = min; x < max; ++x) { /* every row */ for (y = min; y < max; ++y) { /* every column */ if ( (y==min) || (map[x][y-1]!=map[x][y]) ) switch(map[x][y]) { case SECT_MAX: send_to_char(" ",ch); break; case SECT_FOREST: send_to_char("{g@",ch); break; case SECT_FIELD: send_to_char("{G\"",ch); break; case SECT_HILLS: send_to_char("{G^",ch); break; case SECT_ROAD: send_to_char("{m+",ch); break; case SECT_MOUNTAIN: send_to_char("{y^",ch); break; case SECT_WATER_SWIM: send_to_char("{B:",ch); break; case SECT_WATER_NOSWIM: send_to_char("{b:",ch); break; case SECT_UNUSED: send_to_char("{DX",ch); break; case SECT_AIR: send_to_char("{C%",ch); break; case SECT_DESERT: send_to_char("{Y=",ch); break; case SECT_ENTER: send_to_char("{W@",ch); break; case SECT_INSIDE: send_to_char("{W%",ch); break; case SECT_CITY: send_to_char("{W#",ch); break; case SECT_ROCK_MOUNTAIN:send_to_char("{D^",ch); break; case SECT_SNOW_MOUNTAIN:send_to_char("{W^",ch); break; case SECT_SWAMP: send_to_char("{D&",ch); break; case SECT_JUNGLE: send_to_char("{g&",ch); break; case SECT_RUINS: send_to_char("{D#",ch); break; case (SECT_MAX+1): send_to_char("{D?",ch); break; default: send_to_char("{R*",ch); } /* end switch1 */ else switch(map[x][y]) { case SECT_MAX: send_to_char(" ",ch); break; case SECT_FOREST: send_to_char("@",ch); break; case SECT_FIELD: send_to_char("\"",ch); break; case SECT_HILLS: send_to_char("^",ch); break; case SECT_ROAD: send_to_char("+",ch); break; case SECT_MOUNTAIN: send_to_char("^",ch); break; case SECT_WATER_SWIM: send_to_char(":",ch); break; case SECT_WATER_NOSWIM: send_to_char(":",ch); break; case SECT_UNUSED: send_to_char("X",ch); break; case SECT_AIR: send_to_char("%",ch); break; case SECT_DESERT: send_to_char("=",ch); break; case SECT_ENTER: send_to_char("@",ch); break; case SECT_INSIDE: send_to_char("%",ch); break; case SECT_CITY: send_to_char("#",ch); break; case SECT_ROCK_MOUNTAIN:send_to_char("^",ch); break; case SECT_SNOW_MOUNTAIN:send_to_char("^",ch); break; case SECT_SWAMP: send_to_char("&",ch); break; case SECT_JUNGLE: send_to_char("&",ch); break; case SECT_RUINS: send_to_char("#",ch); break; case (SECT_MAX+1): send_to_char("?",ch); break; default: send_to_char("*",ch); } /* end switch2 */ } /* every column */ if (x==min) { sprintf(buf,"{x {C%s{x",ch->in_room->name); send_to_char(buf,ch); /* mlk :: no brief in wilderness, ascii map is automatic, autoexits off too if ( !IS_NPC(ch) && IS_SET(ch->act, PLR_AUTOEXIT) ) { send_to_char( " {b",ch);do_exits( ch, "auto" );send_to_char( "{x",ch); } */ if (IS_IMMORTAL(ch) && (IS_NPC(ch) || IS_SET(ch->act,PLR_HOLYLIGHT))) { /* for showing certain people room vnum */ sprintf(buf," {c[Room %d]{x",ch->in_room->vnum); send_to_char(buf,ch); } } else { start=str_pos; for (desc_pos = desc_pos ; desc[desc_pos]!='\0' ; desc_pos++) { if (desc[desc_pos]=='\n') { line[str_pos-start]='\0';str_pos+=3; desc_pos += 2; break; } else if (desc[desc_pos]=='\r') { line[str_pos-start]='\0';str_pos+=2; break; } else { line[str_pos-start]=desc[desc_pos]; str_pos+=1; } } /* set the final character to \0 for descs that are longer than 5 lines? */ line[str_pos-start]='\0'; /* best way to clear string? */ /* maybe do strcpy(line," "); instead? */ /* not needed here because the for loops stop at \0 ?? */ if (x==min+1) send_to_char(" ",ch); send_to_char(" {c",ch); send_to_char(line,ch); send_to_char("{x",ch); } /*else*/ send_to_char("\n\r",ch); } /*every row*/ send_to_char("\n\r",ch); /* puts a line between contents/people */ return; } void do_map( CHAR_DATA *ch, char *argument ) { int size,center,x,y,min,max; char arg1[10]; one_argument( argument, arg1 ); size = atoi (arg1); size=URANGE(6,size,MAX_MAP); center=MAX_MAP/2; min = MAX_MAP/2-size/2; max = MAX_MAP/2+size/2; for (x = 0; x < MAX_MAP; ++x) for (y = 0; y < MAX_MAP; ++y) map[x][y]=SECT_MAX; /* starts the mapping with the center room */ MapArea(ch->in_room, ch, center, center, min-1, max-1); /* marks the center, where ch is */ map[center][center]=SECT_MAX+2; /* can be any number above SECT_MAX+1 */ /* switch default will print out the * */ if ( (!IS_IMMORTAL(ch))||(IS_NPC(ch)) ) { if ( !IS_SET(ch->in_room->room_flags, ROOM_WILDERNESS) ) {send_to_char("{CYou can not do that here{x.\n\r",ch);return;} if ( room_is_dark( ch->in_room ,ch) ) {send_to_char( "{bThe wilderness is pitch black at night... {x\n\r", ch );return;} else {ShowRoom(ch,MAX_MAP/2-3,MAX_MAP/2+3);return;} } /* mortals not in city, enter or inside will always get a ShowRoom */ if (IS_IMMORTAL(ch)) { if (arg1[0]=='\0') ShowRoom (ch, min, max); else ShowMap (ch, min, max); return; } send_to_char("{CHuh?{x\n\r",ch); return; } void do_smallmap( CHAR_DATA *ch, char *argument ) { int size,center,x,y,min,max; char arg1[10]; one_argument( argument, arg1 ); size = atoi (arg1); size=URANGE(6,size,MAX_MAP); center=MAX_MAP/2; min = MAX_MAP/2-size/2; max = MAX_MAP/2+size/2; for (x = 0; x < MAX_MAP; ++x) for (y = 0; y < MAX_MAP; ++y) map[x][y]=SECT_MAX; /* starts the mapping with the center room */ MapArea(ch->in_room, ch, center, center, min-1, max-1); /* marks the center, where ch is */ map[center][center]=SECT_MAX+2; /* can be any number above SECT_MAX+1 */ /* switch default will print out the * */ if (IS_IMMORTAL(ch)) { ShowHalfMap (ch, min, max); return; } send_to_char("{CHuh?{x\n\r",ch); return; } /* mlk :: pass it (SECTOR_XXX,"") and get back the sector ascii in a roleplaying format of course, not mountain_snow etc */ char *get_sector_name(int sector) { char *sector_name; sector_name="movement"; switch (sector) { case SECT_FOREST: sector_name="some trees";break; case SECT_FIELD: sector_name="a field";break; case SECT_HILLS: sector_name="some rolling hills";break; case SECT_ROAD: sector_name="a road";break; case SECT_WATER_SWIM: sector_name="shallow water";break; case SECT_WATER_NOSWIM: sector_name="deep water";break; case SECT_AIR: sector_name="the sky";break; case SECT_DESERT: sector_name="a lot of sand";break; case SECT_MOUNTAIN: sector_name="some mountainous terrain";break; case SECT_ROCK_MOUNTAIN:sector_name="a rocky mountain";break; case SECT_SNOW_MOUNTAIN:sector_name="snow covered mountains";break; case SECT_SWAMP: sector_name="bleak swampland";break; case SECT_JUNGLE: sector_name="thick jungle";break; case SECT_RUINS: sector_name="ruins of some sort";break; case SECT_INSIDE: sector_name="movement";break; case SECT_CITY: sector_name="movement";break; case SECT_ENTER: sector_name="movement";break; } /*switch1*/ return(strdup(sector_name)); } /* mlk :: when given (int array[5]) with vnum in [0], it will return 1 north sector_type, 2 east sector_type, 3 south sector_type, 4 east_sector_type & 5 number of exits leading to rooms of the same sector */ int *get_exit_sectors(int *exit_sectors) { ROOM_INDEX_DATA *room; EXIT_DATA *pexit; int door; room=get_room_index(exit_sectors[0]); exit_sectors[4]=0; for ( door = 0; door < MAX_MAP_DIR; door++ ) { /* cycles through for each exit */ if ( (pexit = room->exit[door]) != NULL && pexit->u1.to_room != NULL ) { exit_sectors[door]=pexit->u1.to_room->sector_type; if ((pexit->u1.to_room->sector_type)==(room->sector_type)) exit_sectors[4]+=1; } else exit_sectors[door]=-1; } return(exit_sectors); } /* will assign default values for NAME and DESC of wilderness */ void set_wilderness(CHAR_DATA *ch, char *argument) { char arg1[10],name[50],desc[300],buf[MAX_STRING_LENGTH]; ROOM_INDEX_DATA *room; int vnum,exit[5],exitsum; int CHANCE=10; /*if (strcmp(ch->name, "Kroudar") ) { send_to_char("There are few beings who can do that.\n\r",ch);return; }*/ one_argument( argument, arg1 ); vnum = atoi (arg1); if ( argument[0] == '\0' ) { /* for immortal command */ vnum=(ch->in_room->vnum); } room=get_room_index(vnum); if (!IS_BUILDER(ch,room->area)) { send_to_char("Wset: Insufficient Security",ch); return; } if ( !IS_SET(room->room_flags, ROOM_WILDERNESS) ) return; /* for NON wilderness */ exit[0]=vnum; get_exit_sectors(exit); exitsum=exit[4]; switch (room->sector_type) { case SECT_FOREST: strcpy(name,"In a Forest"); strcpy(desc,"You are in a forest teeming with life. All around are the sure signs of nature."); if (exitsum==4) { strcpy(name,"Within a Forest"); strcpy(desc,"You are deep within in a forest, surrounded on all sides by trees. Dead leaves blanket the ground and the lush canopy prevents much light from getting though."); } if (((exit[0]!=(room->sector_type))&&(number_percent()sector_type))&&(number_percent()sector_type))&&(number_percent()sector_type))&&(number_percent()sector_type))&&(number_percent()sector_type))&&(number_percent()sector_type))&&(number_percent()sector_type))&&(number_percent()sector_type))&&(number_percent()sector_type))&&(number_percent()sector_type))&&(number_percent()sector_type))&&(number_percent()sector_type))&&(number_percent()sector_type))&&(number_percent()sector_type))&&(number_percent()sector_type))&&(number_percent()sector_type))&&(number_percent()sector_type))&&(number_percent()sector_type))&&(number_percent()sector_type))&&(number_percent()sector_type))&&(number_percent()sector_type))&&(number_percent()sector_type))&&(number_percent()sector_type))&&(number_percent()sector_type))&&(number_percent()sector_type))&&(number_percent()sector_type))&&(number_percent()sector_type))&&(number_percent()sector_type))&&(number_percent()sector_type))&&(number_percent()sector_type))&&(number_percent()sector_type))&&(number_percent()sector_type))&&(number_percent()sector_type))&&(number_percent()sector_type))&&(number_percent()sector_type))&&(number_percent()sector_type))&&(number_percent()sector_type))&&(number_percent()sector_type))&&(number_percent()sector_type))&&(number_percent()sector_type))&&(number_percent()sector_type))&&(number_percent()sector_type))&&(number_percent()sector_type))&&(number_percent()sector_type))&&(number_percent()sector_type))&&(number_percent()sector_type))&&(number_percent()sector_type))&&(number_percent()sector_type))&&(number_percent()sector_type))&&(number_percent()sector_type))&&(number_percent()sector_type))&&(number_percent()sector_type))&&(number_percent()sector_type))&&(number_percent()sector_type))&&(number_percent()sector_type))&&(number_percent()in_room->area->area_flags, AREA_CHANGED ); free_string( room->name ); room->name = str_dup( name ); free_string( room->description ); room->description= str_dup ( desc ); format_string(room->description); return; } /* mlk this sets the whole wilderness default descs and names*/ void do_set_wilderness_all(CHAR_DATA *ch, char *argument) { ROOM_INDEX_DATA *room; int start,end,current; start=20001; end =29600; room=get_room_index(start); /* initialize room for this check here */ if (!IS_BUILDER(ch,room->area)) { send_to_char("Wset_all: Insufficient Security",ch); return; } for (current=start ; current <= end ; current++) { room=get_room_index(current); char_to_room( ch, room ); set_wilderness(ch,""); char_from_room( ch ); } char_to_room( ch, room ); return; }