ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/server/random_maps/decor.C
Revision: 1.34
Committed: Sat Nov 17 23:40:02 2018 UTC (5 years, 6 months ago) by root
Content type: text/plain
Branch: MAIN
CVS Tags: HEAD
Changes since 1.33: +1 -0 lines
Log Message:
copyright update 2018

File Contents

# User Rev Content
1 elmex 1.1 /*
2 root 1.17 * This file is part of Deliantra, the Roguelike Realtime MMORPG.
3 root 1.32 *
4 root 1.34 * Copyright (©) 2017,2018 Marc Alexander Lehmann / the Deliantra team
5 root 1.33 * Copyright (©) 2005,2006,2007,2008,2009,2010,2011,2012,2013,2014,2015,2016 Marc Alexander Lehmann / Robin Redeker / the Deliantra team
6 root 1.23 * Copyright (©) 2002 Mark Wedel & Crossfire Development Team
7     * Copyright (©) 1992 Frank Tore Johansen
8 root 1.32 *
9 root 1.22 * Deliantra is free software: you can redistribute it and/or modify it under
10     * the terms of the Affero GNU General Public License as published by the
11     * Free Software Foundation, either version 3 of the License, or (at your
12     * option) any later version.
13 root 1.32 *
14 pippijn 1.11 * This program is distributed in the hope that it will be useful,
15     * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 root 1.16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 pippijn 1.11 * GNU General Public License for more details.
18 root 1.32 *
19 root 1.22 * You should have received a copy of the Affero GNU General Public License
20     * and the GNU General Public License along with this program. If not, see
21     * <http://www.gnu.org/licenses/>.
22 root 1.32 *
23 root 1.17 * The authors can be reached via e-mail to <support@deliantra.net>
24 pippijn 1.11 */
25 elmex 1.1
26     #include <global.h>
27 root 1.29 #include <rmg.h>
28 elmex 1.1 #include <rproto.h>
29    
30     #define NR_DECOR_OPTIONS 1
31    
32     /* return a simple count of objects in the map at x,y. */
33    
34 root 1.21 static int
35 root 1.4 obj_count_in_map (maptile *map, int x, int y)
36 root 1.2 {
37     int count = 0;
38    
39 root 1.26 for (object *tmp = map->at (x, y).bot; tmp; tmp = tmp->above)
40 root 1.21 ++count;
41 root 1.19
42 elmex 1.1 return count;
43     }
44 root 1.2
45 elmex 1.1 /* put the decor into the map. Right now, it's very primitive. */
46    
47 root 1.2 void
48 root 1.28 put_decor (maptile *map, layout &maze, const char *decorstyle, int decor_option, random_map_params *RP)
49 root 1.2 {
50 root 1.26 maptile *decor_map = find_style ("/styles/decorstyles", decorstyle, RP->difficulty);
51 root 1.12 if (!decor_map)
52 root 1.2 return;
53 root 1.12
54 elmex 1.1 /* pick a random option, only 1 option right now. */
55 root 1.2 if (decor_option == 0)
56 root 1.21 decor_option = rmg_rndm (NR_DECOR_OPTIONS) + 1;
57 root 1.12
58 root 1.2 switch (decor_option)
59     {
60 root 1.8 case 0:
61     break;
62 root 1.20
63 root 1.8 case 1:
64     { /* random placement of decor objects. */
65 root 1.21 int number_to_place = rmg_rndm (RP->Xsize * RP->Ysize / 5);
66 root 1.8 int failures = 0;
67    
68     while (failures < 100 && number_to_place > 0)
69     {
70 root 1.26 //coroapi::cede_to_tick ();
71 root 1.21
72     int x = rmg_rndm (RP->Xsize - 2) + 1;
73     int y = rmg_rndm (RP->Ysize - 2) + 1;
74 root 1.8
75     if (maze[x][y] == 0 && obj_count_in_map (map, x, y) < 2)
76 root 1.20 {
77 root 1.21 object *this_object = decor_map->pick_random_object (rmg_rndm)->clone ();
78 root 1.8 /* it screws things up if decor can stop people */
79 elmex 1.15 this_object->move_block = 0;
80 root 1.21 map->insert (this_object, x, y, 0, 0);
81 root 1.20
82 root 1.8 number_to_place--;
83     }
84     else
85     failures++;
86     }
87 root 1.2 break;
88 root 1.8 }
89 root 1.20
90 root 1.8 default:
91 root 1.26 {
92     /* place decor objects everywhere: tile the map. */
93     for (int i = 1; i < RP->Xsize - 1; i++)
94     for (int j = 1; j < RP->Ysize - 1; j++)
95 root 1.2 {
96 root 1.8 if (maze[i][j] == 0)
97     {
98 root 1.21 object *this_object = decor_map->pick_random_object (rmg_rndm)->clone ();
99 root 1.2
100 root 1.8 this_object->x = i;
101     this_object->y = j;
102 root 1.2 /* it screws things up if decor can stop people */
103 elmex 1.15 this_object->move_block = 0;
104 root 1.20
105 root 1.26 insert_ob_in_map (this_object, map, 0, 0);
106 root 1.2 }
107     }
108 root 1.26
109 root 1.8 break;
110     }
111 elmex 1.1 }
112     }
113 root 1.20