--- deliantra/server/random_maps/door.C 2006/08/29 08:01:36 1.2 +++ deliantra/server/random_maps/door.C 2006/09/10 16:06:37 1.3 @@ -1,6 +1,7 @@ + /* * static char *rcsid_door_c = - * "$Id: door.C,v 1.2 2006/08/29 08:01:36 root Exp $"; + * "$Id: door.C,v 1.3 2006/09/10 16:06:37 root Exp $"; */ /* @@ -31,50 +32,65 @@ #include /* where are there adjacent doors or walls? */ -int surround_check2(char **layout,int i,int j,int Xsize, int Ysize){ +int +surround_check2 (char **layout, int i, int j, int Xsize, int Ysize) +{ /* 1 = door or wall to left, - 2 = door or wall to right, - 4 = door or wall above - 8 = door or wall below */ + 2 = door or wall to right, + 4 = door or wall above + 8 = door or wall below */ int surround_index = 0; - if((i > 0) && (layout[i-1][j]=='D'||layout[i-1][j]=='#')) surround_index +=1; - if((i < Xsize-1) && (layout[i+1][j]=='D'||layout[i+1][j]=='#')) surround_index +=2; - if((j > 0) && (layout[i][j-1]=='D'||layout[i][j-1]=='#')) surround_index +=4; - if((j < Ysize-1) && (layout[i][j+1]=='D'&&layout[i][j+1]=='#')) surround_index +=8; + + if ((i > 0) && (layout[i - 1][j] == 'D' || layout[i - 1][j] == '#')) + surround_index += 1; + if ((i < Xsize - 1) && (layout[i + 1][j] == 'D' || layout[i + 1][j] == '#')) + surround_index += 2; + if ((j > 0) && (layout[i][j - 1] == 'D' || layout[i][j - 1] == '#')) + surround_index += 4; + if ((j < Ysize - 1) && (layout[i][j + 1] == 'D' && layout[i][j + 1] == '#')) + surround_index += 8; return surround_index; } -void put_doors(mapstruct *the_map, char **maze, const char *doorstyle, RMParms *RP) { - int i,j; - mapstruct *vdoors; - mapstruct *hdoors; - char doorpath[128]; - - if(!strcmp(doorstyle,"none")) return; - vdoors=find_style("/styles/doorstyles", doorstyle, -1); - if(vdoors) - hdoors=vdoors; - else{ - vdoors = find_style("/styles/doorstyles/vdoors", doorstyle, -1); - if(!vdoors) return; - sprintf(doorpath,"/styles/doorstyles/hdoors%s", strrchr(vdoors->path, '/')); - hdoors = find_style(doorpath, 0, -1); - } - for(i=0; iXsize; i++) - for(j=0; jYsize; j++) { - if(maze[i][j]=='D') { - int sindex; - object *this_door, *new_door; - sindex = surround_check2(maze, i, j, RP->Xsize, RP->Ysize); - if(sindex==3) - this_door=pick_random_object(hdoors); - else - this_door=pick_random_object(vdoors); - new_door = arch_to_object(this_door->arch); - copy_object(this_door, new_door); - new_door->x = i; - new_door->y = j; - insert_ob_in_map(new_door, the_map, NULL, 0); - } - } +void +put_doors (mapstruct *the_map, char **maze, const char *doorstyle, RMParms * RP) +{ + int i, j; + mapstruct *vdoors; + mapstruct *hdoors; + char doorpath[128]; + + if (!strcmp (doorstyle, "none")) + return; + vdoors = find_style ("/styles/doorstyles", doorstyle, -1); + if (vdoors) + hdoors = vdoors; + else + { + vdoors = find_style ("/styles/doorstyles/vdoors", doorstyle, -1); + if (!vdoors) + return; + sprintf (doorpath, "/styles/doorstyles/hdoors%s", strrchr (vdoors->path, '/')); + hdoors = find_style (doorpath, 0, -1); + } + for (i = 0; i < RP->Xsize; i++) + for (j = 0; j < RP->Ysize; j++) + { + if (maze[i][j] == 'D') + { + int sindex; + object *this_door, *new_door; + + sindex = surround_check2 (maze, i, j, RP->Xsize, RP->Ysize); + if (sindex == 3) + this_door = pick_random_object (hdoors); + else + this_door = pick_random_object (vdoors); + new_door = arch_to_object (this_door->arch); + copy_object (this_door, new_door); + new_door->x = i; + new_door->y = j; + insert_ob_in_map (new_door, the_map, NULL, 0); + } + } }