/* Map generator designed by Dex for the Metaverse Project. * * This program builds a 10 by 10 zone depending on the letters * put in the static map. It assigns sector types, exits to all * adject rooms in the same zone and gives a brief room name. * The room description is left empty. * * No credits, trademarks or contacting required, but do you * suggestions, bugs or need help with this program, contact * dex@meta.mudservices.com * * The origin of this code is meta.mudservices.com * * Modified to work as a command on Rogue Winds by Scion 8/19/1999 */ #include <stdio.h> #include <time.h> #include <stdlib.h> #include <string.h> #include <ctype.h> #include <stdio.h> #include <time.h> #include "mud.h" int makezone(CHAR_DATA *ch, char note[MAX_STRING_LENGTH]) { FILE *fp; char buf[100]; char buf2[100]; OBJ_DATA *obj; static int pos; char *main_design; int range, min_range, max_range, count; /* The map, Each letter sets the room type in the sections below */ char design01[11] = "FFFFFffrff"; char design02[11] = "FFFFfffrff"; char design03[11] = "FFFffffrff"; char design04[11] = "FFFffffrwf"; char design05[11] = "Ffffffffrf"; char design06[11] = "fffiifffrr"; char design07[11] = "fffiiifffr"; char design08[11] = "fffffffffr"; char design09[11] = "ffffmmfffr"; char design10[11] = "fffmmmmffr"; EXTRA_DESCR_DATA *ed; char *map; int i=0; int a=0; bool rooms=FALSE; if (IS_NPC(ch)) { send_to_char("Hell no, mobs are NOT allowed to build zones!\r\n", ch); return FALSE; } if ((obj=ch->main_hand)!=NULL) { for (ed=obj->first_extradesc ; ed; ed=ed->next) { if (is_name("_text_", ed->keyword)) { rooms=TRUE; map=str_dup(strip_crn(ed->description)); if (strlen(map) < 100) { send_to_char("Your map has less than 100 rooms on it.\r\n", ch); return FALSE; } i=0; while (i<10) { design01[i]=map[a]; design01[i+1]='\0'; i++; a++; } i=0; while (i<10) { design02[i]=map[a]; design02[i+1]='\0'; i++; a++; } i=0; while (i<10) { design03[i]=map[a]; design03[i+1]='\0'; i++; a++; } i=0; while (i<10) { design04[i]=map[a]; design04[i+1]='\0'; i++; a++; } i=0; while (i<10) { design05[i]=map[a]; design05[i+1]='\0'; i++; a++; } i=0; while (i<10) { design06[i]=map[a]; design06[i+1]='\0'; i++; a++; } i=0; while (i<10) { design07[i]=map[a]; design07[i+1]='\0'; i++; a++; } i=0; while (i<10) { design08[i]=map[a]; design08[i+1]='\0'; i++; a++; } i=0; while (i<10) { design09[i]=map[a]; design09[i+1]='\0'; i++; a++; } i=0; while (i<10) { design10[i]=map[a]; design10[i+1]='\0'; i++; a++; } } } } else { send_to_char("You are not holding a note.\r\n", ch); return FALSE; } if (rooms==FALSE) { send_to_char("Could not read the rooms to build.\r\n", ch); return FALSE; } send_to_char("Generating map...\r\n", ch); sprintf(buf, "%s\r\n", design01); send_to_char(buf, ch); sprintf(buf, "%s\r\n", design02); send_to_char(buf, ch); sprintf(buf, "%s\r\n", design03); send_to_char(buf, ch); sprintf(buf, "%s\r\n", design04); send_to_char(buf, ch); sprintf(buf, "%s\r\n", design05); send_to_char(buf, ch); sprintf(buf, "%s\r\n", design06); send_to_char(buf, ch); sprintf(buf, "%s\r\n", design07); send_to_char(buf, ch); sprintf(buf, "%s\r\n", design08); send_to_char(buf, ch); sprintf(buf, "%s\r\n", design09); send_to_char(buf, ch); sprintf(buf, "%s\r\n", design10); send_to_char(buf, ch); sprintf (buf, "%s's Wilderness", ch->name); /* zone name */ sprintf (buf2, "../building/%s.are", ch->name); /* file name */ max_range = ch->pcdata->r_range_lo+100; /* ending vnum +1 (always ends up as one less);*/ min_range = ch->pcdata->r_range_lo; /* starting vnum */ pos = 0; if ( ( fp = fopen( buf2, "w" ) ) == NULL ) { pos = 0; send_to_char("Unable to generate new zone.\r\n",ch); } else { fprintf( fp, "#AREA %s~\n", buf); fprintf( fp, "#VERSION 1\n"); fprintf( fp, "#AUTHOR %s~\n", ch->name); fprintf( fp, "#RANGES\n0 116 0 116\n$\n"); fprintf( fp, "\n#RESETMSG Void~\n"); fprintf( fp, "#FLAGS\n0\n\n"); fprintf( fp, "#ECONOMY 1 1\n\n"); fprintf( fp, "#CLIMATE 1 2 3 4\n\n"); fprintf( fp, "#MOBILES\n#0\n\n"); fprintf( fp, "#OBJECTS\n#0\n\n"); fprintf( fp, "\n"); main_design = design01; count = 0; fprintf( fp, "#ROOMS\n" ); for(range = min_range ; range < max_range ; range ++) { /* counts through all of the static data above, switching to a new line at every 10 counts.*/ switch (count) { case 10: main_design = design10; pos = 0; break; case 20: main_design = design09; pos = 0; break; case 30: main_design = design08; pos = 0; break; case 40: main_design = design07; pos = 0; break; case 50: main_design = design06; pos = 0; break; case 60: main_design = design05; pos = 0; break; case 70: main_design = design04; pos = 0; break; case 80: main_design = design03; pos = 0; break; case 90: main_design = design02; pos = 0; break; } /* Generates the room data, leaving description blank. it assigns sector type, room name and a few related flags */ switch ( main_design[pos] ) { case 'i': fprintf( fp, "#%d\n", range); fprintf( fp, "a room~\n"); fprintf( fp, "~\n"); fprintf( fp, "0 0 0\n"); fprintf( fp, "0 0 0 0 0 0\n"); break; case 'c': fprintf( fp, "#%d\n", range); fprintf( fp, "a street~\n"); fprintf( fp, "~\n"); fprintf( fp, "0 0 1\n"); fprintf( fp, "0 0 0 0 0 0\n"); break; case 'f': fprintf( fp, "#%d\n", range); fprintf( fp, "a field~\n"); fprintf( fp, "~\n"); fprintf( fp, "0 0 2\n"); fprintf( fp, "0 0 0 0 0 0\n"); break; case 'F': fprintf( fp, "#%d\n", range); fprintf( fp, "the forest~\n"); fprintf( fp, "~\n"); fprintf( fp, "0 0 3\n"); fprintf( fp, "0 0 0 0 0 0\n"); break; case 'h': fprintf( fp, "#%d\n", range); fprintf( fp, "the hills~\n"); fprintf( fp, "~\n"); fprintf( fp, "0 0 4\n"); fprintf( fp, "0 0 0 0 0 0\n"); break; case 'm': fprintf( fp, "#%d\n", range); fprintf( fp, "the mountains~\n"); fprintf( fp, "~\n"); fprintf( fp, "0 0 5\n"); fprintf( fp, "0 0 0 0 0 0\n"); break; case 'r': fprintf( fp, "#%d\n", range); fprintf( fp, "a stream~\n"); fprintf( fp, "~\n"); fprintf( fp, "0 0 6\n"); fprintf( fp, "0 0 0 0 0 0\n"); break; case 'w': fprintf( fp, "#%d\n", range); fprintf( fp, "deep water~\n"); fprintf( fp, "~\n"); fprintf( fp, "0 0 7\n"); fprintf( fp, "0 0 0 0 0 0\n"); break; case 'U': fprintf( fp, "#%d\n", range); fprintf( fp, "underwater~\n"); fprintf( fp, "~\n"); fprintf( fp, "0 0 8\n"); fprintf( fp, "0 0 0 0 0 0\n"); break; case 'a': fprintf( fp, "#%d\n", range); fprintf( fp, "the air~\n"); fprintf( fp, "~\n"); fprintf( fp, "0 0 9\n"); fprintf( fp, "0 0 0 0 0 0\n"); break; case 'd': fprintf( fp, "#%d\n", range); fprintf( fp, "the desert~\n"); fprintf( fp, "~\n"); fprintf( fp, "0 0 10\n"); fprintf( fp, "0 0 0 0 0 0\n"); break; case 'V': fprintf( fp, "#%d\n", range); fprintf( fp, "a void~\n"); fprintf( fp, "~\n"); fprintf( fp, "0 0 11\n"); fprintf( fp, "0 0 0 0 0 0\n"); break; case 'o': fprintf( fp, "#%d\n", range); fprintf( fp, "the ocean floor~\n"); fprintf( fp, "~\n"); fprintf( fp, "0 0 12\n"); fprintf( fp, "0 0 0 0 0 0\n"); break; case 'u': fprintf( fp, "#%d\n", range); fprintf( fp, "a cave~\n"); fprintf( fp, "~\n"); fprintf( fp, "0 0 13\n"); fprintf( fp, "0 0 0 0 0 0\n"); break; default: fprintf( fp, "#%d\n", range); fprintf( fp, "Nowhere~\n"); fprintf( fp, "An incorrect sector type was defined for this room.~\n"); fprintf( fp, "0 0 1\n"); fprintf( fp, "0 0 0 0 0 0\n"); break; } /* Exit generation.*/ if (range < max_range - 10) { fprintf (fp, "D0\n"); fprintf (fp, "~\n"); fprintf (fp, "~\n"); fprintf (fp, "0 -1 %d\n", range + 10); } if (pos < 9) { fprintf (fp, "D1\n"); fprintf (fp, "~\n"); fprintf (fp, "~\n"); fprintf (fp, "0 -1 %d\n", range + 1); } if (range > min_range + 9) { fprintf (fp, "D2\n"); fprintf (fp, "~\n"); fprintf (fp, "~\n"); fprintf (fp, "0 -1 %d\n", range - 10); } if (pos > 0 ) { fprintf (fp, "D3\n"); fprintf (fp, "~\n"); fprintf (fp, "~\n"); fprintf (fp, "0 -1 %d\n", range - 1); } fprintf( fp, "S\n"); pos ++; count ++; } fprintf( fp, "#0\n" ); fprintf( fp, "#$\n" ); fclose( fp ); } return TRUE; }