ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/cf.schmorp.de/server/random_maps/decor.C
(Generate patch)

Comparing cf.schmorp.de/server/random_maps/decor.C (file contents):
Revision 1.1 by elmex, Sun Aug 13 17:16:03 2006 UTC vs.
Revision 1.8 by root, Sun Dec 31 19:02:23 2006 UTC

1/*
2 * static char *rcsid_decor_ =
3 * "$Id: decor.C,v 1.1 2006/08/13 17:16:03 elmex 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 25
30#include <global.h> 26#include <global.h>
31#include <random_map.h> 27#include <random_map.h>
33 29
34#define NR_DECOR_OPTIONS 1 30#define NR_DECOR_OPTIONS 1
35 31
36/* return a simple count of objects in the map at x,y. */ 32/* return a simple count of objects in the map at x,y. */
37 33
34int
38int obj_count_in_map(mapstruct *map,int x,int y) { 35obj_count_in_map (maptile *map, int x, int y)
36{
39 int count=0; 37 int count = 0;
40 object *tmp; 38 object *tmp;
39
41 for(tmp=get_map_ob(map,x,y);tmp!=NULL;tmp=tmp->above) 40 for (tmp = GET_MAP_OB (map, x, y); tmp != NULL; tmp = tmp->above)
42 count++; 41 count++;
43 return count; 42 return count;
44} 43}
44
45/* put the decor into the map. Right now, it's very primitive. */ 45/* put the decor into the map. Right now, it's very primitive. */
46 46
47void
47void put_decor(mapstruct *map,char **maze,char *decorstyle,int decor_option,RMParms *RP) { 48put_decor (maptile *map, char **maze, char *decorstyle, int decor_option, random_map_params *RP)
49{
48 mapstruct *decor_map; 50 maptile *decor_map;
49 char style_name[256]; 51 char style_name[256];
50 52
51 sprintf(style_name,"/styles/decorstyles"); 53 sprintf (style_name, "/styles/decorstyles");
52 54
53 decor_map = find_style(style_name,decorstyle,-1); 55 decor_map = find_style (style_name, decorstyle, -1);
54 if(decor_map == NULL) return; 56 if (decor_map == NULL)
57 return;
55 /* pick a random option, only 1 option right now. */ 58 /* pick a random option, only 1 option right now. */
56 if(decor_option==0) 59 if (decor_option == 0)
57 decor_option = RANDOM() % NR_DECOR_OPTIONS +1; 60 decor_option = RANDOM () % NR_DECOR_OPTIONS + 1;
58 switch(decor_option) { 61 switch (decor_option)
59 case 0: break; 62 {
60 case 1: { /* random placement of decor objects. */ 63 case 0:
64 break;
65 case 1:
66 { /* random placement of decor objects. */
61 int number_to_place = RANDOM() % ( (RP->Xsize *RP->Ysize) / 5); 67 int number_to_place = RANDOM () % ((RP->Xsize * RP->Ysize) / 5);
62 int failures=0; 68 int failures = 0;
63 object *new_decor_object; 69 object *new_decor_object;
70
64 while(failures < 100 && number_to_place > 0) { 71 while (failures < 100 && number_to_place > 0)
72 {
65 int x,y; 73 int x, y;
74
66 x = RANDOM() % (RP->Xsize-2) +1; 75 x = RANDOM () % (RP->Xsize - 2) + 1;
67 y = RANDOM() % (RP->Ysize-2) +1; 76 y = RANDOM () % (RP->Ysize - 2) + 1;
68 if(maze[x][y]==0 && obj_count_in_map(map,x,y)<2) { /* empty */ 77 if (maze[x][y] == 0 && obj_count_in_map (map, x, y) < 2)
78 { /* empty */
69 object *this_object; 79 object *this_object;
80
70 new_decor_object = pick_random_object(decor_map); 81 new_decor_object = pick_random_object (decor_map);
71 this_object = arch_to_object(new_decor_object->arch); 82 this_object = arch_to_object (new_decor_object->arch);
72 copy_object(new_decor_object,this_object); 83 new_decor_object->copy_to (this_object);
73 this_object->x = x; 84 this_object->x = x;
74 this_object->y = y; 85 this_object->y = y;
75 /* it screws things up if decor can stop people */ 86 /* it screws things up if decor can stop people */
76 this_object->move_block = MOVE_BLOCK_DEFAULT; 87 this_object->move_block = MOVE_BLOCK_DEFAULT;
77 insert_ob_in_map(this_object,map,NULL,0); 88 insert_ob_in_map (this_object, map, NULL, 0);
78 number_to_place--; 89 number_to_place--;
90 }
91 else
92 failures++;
79 } 93 }
80 else 94 break;
81 failures++;
82 } 95 }
96 default:
97 { /* place decor objects everywhere: tile the map. */
98 int i, j;
99
100 for (i = 1; i < RP->Xsize - 1; i++)
101 for (j = 1; j < RP->Ysize - 1; j++)
102 {
103 if (maze[i][j] == 0)
104 {
105 object *new_decor_object, *this_object;
106
107 new_decor_object = pick_random_object (decor_map);
108 this_object = arch_to_object (new_decor_object->arch);
109 new_decor_object->copy_to (this_object);
110 this_object->x = i;
111 this_object->y = j;
112 /* it screws things up if decor can stop people */
113 this_object->move_block = MOVE_BLOCK_DEFAULT;
114 insert_ob_in_map (this_object, map, NULL, 0);
115 }
116 }
83 break; 117 break;
118 }
84 } 119 }
85 default: { /* place decor objects everywhere: tile the map. */
86 int i,j;
87 for(i=1;i<RP->Xsize-1;i++) for(j=1;j<RP->Ysize-1;j++) {
88 if(maze[i][j]==0) {
89 object *new_decor_object, *this_object;
90
91 new_decor_object = pick_random_object(decor_map);
92 this_object = arch_to_object(new_decor_object->arch);
93 copy_object(new_decor_object,this_object);
94 this_object->x = i;
95 this_object->y = j;
96 /* it screws things up if decor can stop people */
97 this_object->move_block = MOVE_BLOCK_DEFAULT;
98 insert_ob_in_map(this_object,map,NULL,0);
99 }
100 }
101 break;
102 }
103 }
104} 120}

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines