1 | /* |
1 | /* |
2 | * This file is part of Deliantra, the Roguelike Realtime MMORPG. |
2 | * This file is part of Deliantra, the Roguelike Realtime MMORPG. |
3 | * |
3 | * |
4 | * Copyright (©) 2010 Marc Alexander Lehmann / Robin Redeker / the Deliantra team |
4 | * Copyright (©) 2010,2011,2012 Marc Alexander Lehmann / Robin Redeker / the Deliantra team |
5 | * Copyright (©) Crossfire Development Team (restored, original file without copyright notice) |
5 | * Copyright (©) 1994-2004 Crossfire Development Team (restored, original file without copyright notice) |
6 | * |
6 | * |
7 | * Deliantra is free software: you can redistribute it and/or modify it under |
7 | * Deliantra is free software: you can redistribute it and/or modify it under |
8 | * the terms of the Affero GNU General Public License as published by the |
8 | * the terms of the Affero GNU General Public License as published by the |
9 | * Free Software Foundation, either version 3 of the License, or (at your |
9 | * Free Software Foundation, either version 3 of the License, or (at your |
10 | * option) any later version. |
10 | * option) any later version. |
… | |
… | |
20 | * |
20 | * |
21 | * The authors can be reached via e-mail to <support@deliantra.net> |
21 | * The authors can be reached via e-mail to <support@deliantra.net> |
22 | */ |
22 | */ |
23 | |
23 | |
24 | #include <global.h> |
24 | #include <global.h> |
25 | #include <random_map.h> |
25 | #include <rmg.h> |
26 | #include <rproto.h> |
26 | #include <rproto.h> |
27 | |
27 | |
28 | void noinline |
28 | void noinline |
29 | layout::alloc (int w, int h) |
29 | layout::alloc (int w, int h) |
30 | { |
30 | { |
… | |
… | |
312 | seeds.push (point (x, y)); |
312 | seeds.push (point (x, y)); |
313 | |
313 | |
314 | // phase 2, while we have seeds, if |
314 | // phase 2, while we have seeds, if |
315 | // seed is empty, floodfill, else grow |
315 | // seed is empty, floodfill, else grow |
316 | |
316 | |
|
|
317 | int rem_index = 0; // used to remove "somewhat ordered" |
|
|
318 | |
317 | while (seeds.size) |
319 | while (seeds.size) |
318 | { |
320 | { |
319 | coroapi::cede_to_tick (); |
321 | coroapi::cede_to_tick (); |
320 | |
322 | |
|
|
323 | int i = perturb |
|
|
324 | ? rmg_rndm (max (0, seeds.size - 8), seeds.size - 1) |
|
|
325 | : rem_index ++ % seeds.size; |
|
|
326 | |
321 | point p = seeds.remove (rmg_rndm (seeds.size)); |
327 | point p = seeds.remove (i); |
322 | |
328 | |
323 | x = p.x; |
329 | x = p.x; |
324 | y = p.y; |
330 | y = p.y; |
325 | |
331 | |
326 | if (!dist [x][y]) |
332 | if (!dist [x][y]) |
… | |
… | |
1007 | static struct demo |
1013 | static struct demo |
1008 | { |
1014 | { |
1009 | demo () |
1015 | demo () |
1010 | { |
1016 | { |
1011 | rmg_rndm.seed (time (0)); |
1017 | rmg_rndm.seed (time (0)); |
|
|
1018 | extern void hack();hack (); |
1012 | |
1019 | |
1013 | for(int i=1;i<100;i++) |
1020 | for(int i=1;i<100;i++) |
1014 | { |
1021 | { |
1015 | layout maze (40, 30); |
1022 | layout maze (40, 30); |
1016 | gen_village (maze); |
1023 | maze.fill_rand (99); |
1017 | maze.doorify (); |
1024 | maze.border (); |
|
|
1025 | maze.isolation_remover (2); |
1018 | maze.print (); |
1026 | maze.print (); |
1019 | exit(0); |
|
|
1020 | } |
1027 | } |
1021 | |
1028 | |
1022 | exit (1); |
1029 | exit (1); |
1023 | } |
1030 | } |
1024 | } demo; |
1031 | } demo; |