ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/server/random_maps/door.C
(Generate patch)

Comparing deliantra/server/random_maps/door.C (file contents):
Revision 1.2 by root, Tue Aug 29 08:01:36 2006 UTC vs.
Revision 1.10 by root, Sun Dec 31 20:46:17 2006 UTC

1/*
2 * static char *rcsid_door_c =
3 * "$Id: door.C,v 1.2 2006/08/29 08:01:36 root Exp $";
4 */
5 1
6/* 2/*
7 CrossFire, A Multiplayer game for X-windows 3 CrossFire, A Multiplayer game for X-windows
8 4
9 Copyright (C) 2002 Mark Wedel & Crossfire Development Team 5 Copyright (C) 2002 Mark Wedel & Crossfire Development Team
21 17
22 You should have received a copy of the GNU General Public License 18 You should have received a copy of the GNU General Public License
23 along with this program; if not, write to the Free Software 19 along with this program; if not, write to the Free Software
24 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 20 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
25 21
26 The authors can be reached via e-mail at crossfire-devel@real-time.com 22 The authors can be reached via e-mail at <crossfire@schmorp.de>
27*/ 23*/
28 24
29#include <global.h> 25#include <global.h>
30#include <random_map.h> 26#include <random_map.h>
31#include <rproto.h> 27#include <rproto.h>
32 28
33/* where are there adjacent doors or walls? */ 29/* where are there adjacent doors or walls? */
30int
34int surround_check2(char **layout,int i,int j,int Xsize, int Ysize){ 31surround_check2 (char **layout, int i, int j, int Xsize, int Ysize)
32{
35 /* 1 = door or wall to left, 33 /* 1 = door or wall to left,
36 2 = door or wall to right, 34 2 = door or wall to right,
37 4 = door or wall above 35 4 = door or wall above
38 8 = door or wall below */ 36 8 = door or wall below */
39 int surround_index = 0; 37 int surround_index = 0;
38
40 if((i > 0) && (layout[i-1][j]=='D'||layout[i-1][j]=='#')) surround_index +=1; 39 if ((i > 0) && (layout[i - 1][j] == 'D' || layout[i - 1][j] == '#'))
40 surround_index += 1;
41 if((i < Xsize-1) && (layout[i+1][j]=='D'||layout[i+1][j]=='#')) surround_index +=2; 41 if ((i < Xsize - 1) && (layout[i + 1][j] == 'D' || layout[i + 1][j] == '#'))
42 surround_index += 2;
42 if((j > 0) && (layout[i][j-1]=='D'||layout[i][j-1]=='#')) surround_index +=4; 43 if ((j > 0) && (layout[i][j - 1] == 'D' || layout[i][j - 1] == '#'))
44 surround_index += 4;
43 if((j < Ysize-1) && (layout[i][j+1]=='D'&&layout[i][j+1]=='#')) surround_index +=8; 45 if ((j < Ysize - 1) && (layout[i][j + 1] == 'D' && layout[i][j + 1] == '#'))
46 surround_index += 8;
44 return surround_index; 47 return surround_index;
45} 48}
46 49
50void
47void put_doors(mapstruct *the_map, char **maze, const char *doorstyle, RMParms *RP) { 51put_doors (maptile *the_map, char **maze, const char *doorstyle, random_map_params *RP)
48 int i,j; 52{
49 mapstruct *vdoors; 53 int i, j;
50 mapstruct *hdoors; 54 maptile *vdoors;
55 maptile *hdoors;
51 char doorpath[128]; 56 char doorpath[1024];
52 57
53 if(!strcmp(doorstyle,"none")) return; 58 if (!strcmp (doorstyle, "none"))
59 return;
60
54 vdoors=find_style("/styles/doorstyles", doorstyle, -1); 61 vdoors = find_style ("/styles/doorstyles", doorstyle, -1);
62
55 if(vdoors) 63 if (vdoors)
56 hdoors=vdoors; 64 hdoors = vdoors;
57 else{ 65 else
66 {
58 vdoors = find_style("/styles/doorstyles/vdoors", doorstyle, -1); 67 vdoors = find_style ("/styles/doorstyles/vdoors", doorstyle, -1);
59 if(!vdoors) return; 68 if (!vdoors)
69 return;
60 sprintf(doorpath,"/styles/doorstyles/hdoors%s", strrchr(vdoors->path, '/')); 70 sprintf (doorpath, "/styles/doorstyles/hdoors%s", strrchr (vdoors->path, '/'));
61 hdoors = find_style(doorpath, 0, -1); 71 hdoors = find_style (doorpath, 0, -1);
72 }
73
74 for (i = 0; i < RP->Xsize; i++)
75 for (j = 0; j < RP->Ysize; j++)
76 {
77 if (maze[i][j] == 'D')
78 {
79 int sindex;
80 object *this_door, *new_door;
81
82 sindex = surround_check2 (maze, i, j, RP->Xsize, RP->Ysize);
83 if (sindex == 3)
84 this_door = pick_random_object (hdoors);
85 else
86 this_door = pick_random_object (vdoors);
87
88 if (!this_door)
89 abort ();
90
91 new_door = arch_to_object (this_door->arch);
92 this_door->copy_to (new_door);
93 new_door->x = i;
94 new_door->y = j;
95 insert_ob_in_map (new_door, the_map, NULL, 0);
62 } 96 }
63 for(i=0; i<RP->Xsize; i++) 97 }
64 for(j=0; j<RP->Ysize; j++) {
65 if(maze[i][j]=='D') {
66 int sindex;
67 object *this_door, *new_door;
68 sindex = surround_check2(maze, i, j, RP->Xsize, RP->Ysize);
69 if(sindex==3)
70 this_door=pick_random_object(hdoors);
71 else
72 this_door=pick_random_object(vdoors);
73 new_door = arch_to_object(this_door->arch);
74 copy_object(this_door, new_door);
75 new_door->x = i;
76 new_door->y = j;
77 insert_ob_in_map(new_door, the_map, NULL, 0);
78 }
79 }
80} 98}

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines