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

Comparing deliantra/server/random_maps/special.C (file contents):
Revision 1.11 by root, Sat Dec 30 18:45:28 2006 UTC vs.
Revision 1.15 by root, Mon Jan 15 15:54:19 2007 UTC

1
1/* 2/*
2 CrossFire, A Multiplayer game for X-windows 3 CrossFire, A Multiplayer game for X-windows
3 4
5 Copyright (C) 2005, 2006, 2007 Marc Lehmann & Crossfire+ Development Team
4 Copyright (C) 2002 Mark Wedel & Crossfire Development Team 6 Copyright (C) 2002 Mark Wedel & Crossfire Development Team
5 Copyright (C) 1992 Frank Tore Johansen 7 Copyright (C) 1992 Frank Tore Johansen
6 8
7 This program is free software; you can redistribute it and/or modify 9 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by 10 it under the terms of the GNU General Public License as published by
166 168
167 while (i < 0 && tries < 10) 169 while (i < 0 && tries < 10)
168 { 170 {
169 ix = RANDOM () % (map->width - 2) + 1; 171 ix = RANDOM () % (map->width - 2) + 1;
170 iy = RANDOM () % (map->height - 2) + 1; 172 iy = RANDOM () % (map->height - 2) + 1;
171 i = find_first_free_spot (fountain, map, ix, iy); 173 i = find_free_spot (fountain, map, ix, iy, 1, SIZEOFFREE1 + 1);
172 tries++; 174 tries++;
173 } 175 }
174 176
175 if (i == -1) 177 if (i == -1)
176 { /* can't place fountain */ 178 { /* can't place fountain */
190 potion->material = M_ADAMANT; 192 potion->material = M_ADAMANT;
191 fountain->x = ix; 193 fountain->x = ix;
192 fountain->y = iy; 194 fountain->y = iy;
193 insert_ob_in_map (fountain, map, NULL, 0); 195 insert_ob_in_map (fountain, map, NULL, 0);
194 insert_ob_in_map (potion, map, NULL, 0); 196 insert_ob_in_map (potion, map, NULL, 0);
195
196} 197}
197 198
198void 199void
199place_special_exit (maptile *map, int hole_type, random_map_params * RP) 200place_special_exit (maptile *map, int hole_type, random_map_params *RP)
200{ 201{
201 int ix, iy, i = -1; 202 int ix, iy, i = -1;
202 char buf[HUGE_BUF], *style, *decor, *mon; 203 char buf[16384], *style, *decor, *mon;
203 maptile *exit_style = find_style ("/styles/misc", "obscure_exits", -1); 204 maptile *exit_style = find_style ("/styles/misc", "obscure_exits", -1);
204 int g_xsize, g_ysize; 205 int g_xsize, g_ysize;
205 206
206 object *the_exit = object::create (); 207 object *the_exit = object::create ();
207 208
212 213
213 while (i < 0) 214 while (i < 0)
214 { 215 {
215 ix = RANDOM () % (map->width - 2) + 1; 216 ix = RANDOM () % (map->width - 2) + 1;
216 iy = RANDOM () % (map->height - 2) + 1; 217 iy = RANDOM () % (map->height - 2) + 1;
217 i = find_first_free_spot (the_exit, map, ix, iy); 218 i = find_free_spot (the_exit, map, ix, iy, 1, SIZEOFFREE1 + 1);
218 } 219 }
219 220
220 ix += freearr_x[i]; 221 ix += freearr_x[i];
221 iy += freearr_y[i]; 222 iy += freearr_y[i];
222 the_exit->x = ix; 223 the_exit->x = ix;
225 if (!hole_type) 226 if (!hole_type)
226 hole_type = RANDOM () % NR_OF_HOLE_TYPES + 1; 227 hole_type = RANDOM () % NR_OF_HOLE_TYPES + 1;
227 228
228 switch (hole_type) 229 switch (hole_type)
229 { 230 {
230 case GLORY_HOLE: /* treasures */ 231 case GLORY_HOLE: /* treasures */
231 { 232 {
232 g_xsize = RANDOM () % 3 + 4 + RP->difficulty / 4; 233 g_xsize = RANDOM () % 3 + 4 + RP->difficulty / 4;
233 g_ysize = RANDOM () % 3 + 4 + RP->difficulty / 4; 234 g_ysize = RANDOM () % 3 + 4 + RP->difficulty / 4;
234 style = "onion"; 235 style = "onion";
235 decor = "wealth2"; 236 decor = "wealth2";
236 mon = "none"; 237 mon = "none";
237 break; 238 break;
238 } 239 }
239 240
240 case ORC_ZONE: /* hole with orcs in it. */ 241 case ORC_ZONE: /* hole with orcs in it. */
241 { 242 {
242 g_xsize = RANDOM () % 3 + 4 + RP->difficulty / 4; 243 g_xsize = RANDOM () % 3 + 4 + RP->difficulty / 4;
243 g_ysize = RANDOM () % 3 + 4 + RP->difficulty / 4; 244 g_ysize = RANDOM () % 3 + 4 + RP->difficulty / 4;
244 style = "onion"; 245 style = "onion";
245 decor = "wealth2"; 246 decor = "wealth2";
246 mon = "orc"; 247 mon = "orc";
247 break; 248 break;
248 } 249 }
249 250
250 case MINING_ZONE: /* hole with orcs in it. */ 251 case MINING_ZONE: /* hole with orcs in it. */
251 { 252 {
252 g_xsize = RANDOM () % 9 + 4 + RP->difficulty / 4; 253 g_xsize = RANDOM () % 9 + 4 + RP->difficulty / 4;
253 g_ysize = RANDOM () % 9 + 4 + RP->difficulty / 4; 254 g_ysize = RANDOM () % 9 + 4 + RP->difficulty / 4;
254 style = "maze"; 255 style = "maze";
255 decor = "minerals2"; 256 decor = "minerals2";
256 mon = "none"; 257 mon = "none";
257 break; 258 break;
258 } 259 }
259 260
260 default: /* undefined */ 261 default: /* undefined */
261 LOG (llevError, "place_special_exit: undefined hole type %d\n", hole_type); 262 LOG (llevError, "place_special_exit: undefined hole type %d\n", hole_type);
262 return; 263 return;
263 break; 264 break;
264 } 265 }
265 266
266 /* Need to be at least this size, otherwise the load 267 /* Need to be at least this size, otherwise the load
267 * code will generate new size values which are too large. 268 * code will generate new size values which are too large.
268 */ 269 */
281 insert_ob_in_map (the_exit, map, NULL, 0); 282 insert_ob_in_map (the_exit, map, NULL, 0);
282} 283}
283 284
284 285
285void 286void
286place_specials_in_map (maptile *map, char **layout, random_map_params * RP) 287place_specials_in_map (maptile *map, char **layout, random_map_params *RP)
287{ 288{
288 maptile *special_map; 289 maptile *special_map;
289 int ix, iy; /* map insertion locatons */ 290 int ix, iy; /* map insertion locatons */
290 int special_type; /* type of special to make */ 291 int special_type; /* type of special to make */
291 292
292 293
293 special_type = RANDOM () % NUM_OF_SPECIAL_TYPES; 294 special_type = RANDOM () % NUM_OF_SPECIAL_TYPES;
294 switch (special_type) 295 switch (special_type)
295 { 296 {
296 297
297 /* includes a special map into the random map being made. */ 298 /* includes a special map into the random map being made. */
298 case SPECIAL_SUBMAP: 299 case SPECIAL_SUBMAP:
299 { 300 {
300 special_map = find_style ("/styles/specialmaps", 0, RP->difficulty); 301 special_map = find_style ("/styles/specialmaps", 0, RP->difficulty);
301 if (special_map == NULL) 302 if (special_map == NULL)
302 return; 303 return;
303 304
304 if (find_spot_for_submap (map, layout, &ix, &iy, special_map->width, special_map->height)) 305 if (find_spot_for_submap (map, layout, &ix, &iy, special_map->width, special_map->height))
305 include_map_in_map (map, special_map, ix, iy); 306 include_map_in_map (map, special_map, ix, iy);
306 break; 307 break;
307 } 308 }
308 309
309 /* Make a special fountain: an unpickable potion disguised as 310 /* Make a special fountain: an unpickable potion disguised as
310 a fountain, or rather, colocated with a fountain. */ 311 a fountain, or rather, colocated with a fountain. */
311 case SPECIAL_FOUNTAIN: 312 case SPECIAL_FOUNTAIN:
312 { 313 {
313 place_fountain_with_specials (map); 314 place_fountain_with_specials (map);
314 break; 315 break;
315 } 316 }
316 317
317 /* Make an exit to another random map, e.g. a gloryhole. */ 318 /* Make an exit to another random map, e.g. a gloryhole. */
318 case SPECIAL_EXIT: 319 case SPECIAL_EXIT:
319 { 320 {
320 place_special_exit (map, 0, RP); 321 place_special_exit (map, 0, RP);
321 break; 322 break;
322 } 323 }
323 } 324 }
324 325
325} 326}

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines