ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/server/random_maps/standalone.C
Revision: 1.15
Committed: Sun Jul 1 05:00:19 2007 UTC (16 years, 11 months ago) by root
Content type: text/plain
Branch: MAIN
CVS Tags: rel-2_2, rel-2_3
Changes since 1.14: +10 -11 lines
Log Message:
- upgrade crossfire trt to the GPL version 3 (hopefully correctly).
- add a single file covered by the GNU Affero General Public License
  (which is not yet released, so I used the current draft, which is
  legally a bit wavy, but its likely better than nothing as it expresses
  direct intent by the authors, and we can upgrade as soon as it has been
  released).
  * this should ensure availability of source code for the server at least
    and hopefully also archetypes and maps even when modified versions
    are not being distributed, in accordance of section 13 of the agplv3.

File Contents

# Content
1 /*
2 * This file is part of Crossfire TRT, the Roguelike Realtime MORPG.
3 *
4 * Copyright (©) 2005,2006,2007 Marc Alexander Lehmann / Robin Redeker / the Crossfire TRT team
5 * Copyright (©) 2002,2007 Mark Wedel & Crossfire Development Team
6 * Copyright (©) 1992,2007 Frank Tore Johansen
7 *
8 * Crossfire TRT is free software: you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation, either version 3 of the License, or
11 * (at your option) any later version.
12 *
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
17 *
18 * You should have received a copy of the GNU General Public License
19 * along with this program. If not, see <http://www.gnu.org/licenses/>.
20 *
21 * The authors can be reached via e-mail to <crossfire@schmorp.de>
22 */
23
24 #define LO_NEWFILE 2
25
26 /* the main routine for making a standalone version. */
27
28 #include <time.h>
29 #include <stdio.h>
30 #include <global.h>
31 #include <maze_gen.h>
32 #include <room_gen.h>
33 #include <random_map.h>
34 #include <rproto.h>
35
36 int
37 main (int argc, char *argv[])
38 {
39 char InFileName[1024], OutFileName[1024];
40 maptile *newMap;
41 random_map_params rp;
42 FILE *fp;
43
44 if (argc < 3)
45 {
46 printf ("\nUsage: %s inputfile outputfile\n", argv[0]);
47 exit (0);
48 }
49 strcpy (InFileName, argv[1]);
50 strcpy (OutFileName, argv[2]);
51
52 init_globals ();
53 init_library ();
54 init_archetypes ();
55 init_artifacts ();
56 init_formulae ();
57 init_readable ();
58
59 init_gods ();
60 memset (&rp, 0, sizeof (random_map_params));
61 rp.Xsize = -1;
62 rp.Ysize = -1;
63 if ((fp = fopen (InFileName, "r")) == NULL)
64 {
65 fprintf (stderr, "\nError: can not open %s\n", InFileName);
66 exit (1);
67 }
68 load_parameters (fp, LO_NEWFILE, &rp);
69 fclose (fp);
70 newMap = generate_random_map (OutFileName, &rp);
71 new_save_map (newMap, 1);
72 exit (0);
73 }
74
75 void
76 set_map_timeout (maptile *)
77 {
78 } /* doesn't need to do anything */
79
80 #include <global.h>
81
82
83 /* some plagarized code from apply.c--I needed just these two functions
84 without all the rest of the junk, so.... */
85 int
86 auto_apply (object *op)
87 {
88 object *tmp = NULL;
89 int i;
90
91 switch (op->type)
92 {
93 case SHOP_FLOOR:
94 if (!op->has_random_items ())
95 return 0;
96 do
97 {
98 i = 10; /* let's give it 10 tries */
99 while ((tmp = generate_treasure (op->randomitems, op->stats.exp ? op->stats.exp : 5)) == NULL && --i);
100 if (tmp == NULL)
101 return 0;
102 if (QUERY_FLAG (tmp, FLAG_CURSED) || QUERY_FLAG (tmp, FLAG_DAMNED))
103 {
104 tmp->destroy ();
105 tmp = NULL;
106 }
107 }
108 while (!tmp);
109
110 tmp->x = op->x, tmp->y = op->y;
111 SET_FLAG (tmp, FLAG_UNPAID);
112 insert_ob_in_map (tmp, op->map, NULL, 0);
113 CLEAR_FLAG (op, FLAG_AUTO_APPLY);
114 identify (tmp);
115 break;
116
117 case TREASURE:
118 if (op->has_random_items ())
119 while ((op->stats.hp--) > 0)
120 create_treasure (op->randomitems, op, GT_ENVIRONMENT,
121 op->stats.exp ? op->stats.exp : op->map == NULL ? 14 : op->map->difficulty, 0);
122 op->remove ();
123 op->destroy ();
124 break;
125 }
126
127 return tmp ? 1 : 0;
128 }
129
130 /* fix_auto_apply goes through the entire map (only the first time
131 * when an original map is loaded) and performs special actions for
132 * certain objects (most initialization of chests and creation of
133 * treasures and stuff). Calls auto_apply if appropriate.
134 */
135
136 void
137 fix_auto_apply (maptile *m)
138 {
139 object *tmp, *above = NULL;
140 int x, y;
141
142 for (x = 0; x < m->width; x++)
143 for (y = 0; y < m->height; y++)
144 for (tmp = GET_MAP_OB (m, x, y); tmp != NULL; tmp = above)
145 {
146 above = tmp->above;
147
148 if (QUERY_FLAG (tmp, FLAG_AUTO_APPLY))
149 auto_apply (tmp);
150 else if (tmp->type == TREASURE)
151 {
152 if (tmp->has_random_items ())
153 while ((tmp->stats.hp--) > 0)
154 create_treasure (tmp->randomitems, tmp, 0, m->difficulty, 0);
155 }
156 if (tmp && tmp->arch && tmp->type != PLAYER && tmp->type != TREASURE && tmp->randomitems)
157 {
158 if (tmp->type == CONTAINER)
159 {
160 if (tmp->has_random_items ())
161 while ((tmp->stats.hp--) > 0)
162 create_treasure (tmp->randomitems, tmp, 0, m->difficulty, 0);
163 }
164 else if (tmp->has_random_items ())
165 create_treasure (tmp->randomitems, tmp, GT_APPLY, m->difficulty, 0);
166 }
167 }
168 for (x = 0; x < m->width; x++)
169 for (y = 0; y < m->height; y++)
170 for (tmp = GET_MAP_OB (m, x, y); tmp != NULL; tmp = tmp->above)
171 if (tmp->above && (tmp->type == TRIGGER_BUTTON || tmp->type == TRIGGER_PEDESTAL))
172 check_trigger (tmp, tmp->above);
173 }
174
175 /**
176 * Those are dummy functions defined to resolve all symboles.
177 * Added as part of glue cleaning.
178 * Ryo 2005-07-15
179 **/
180
181 void
182 new_draw_info (int a, int b, const object *ob, const char *txt)
183 {
184 fprintf (logfile, "%s\n", txt);
185 }
186
187 void
188 new_info_map (int color, maptile *map, const char *str)
189 {
190 fprintf (logfile, "new_info_map: %s\n", str);
191 }
192
193 void
194 move_teleporter (object *ob)
195 {
196 }
197
198 void
199 move_firewall (object *ob)
200 {
201 }
202
203 void
204 move_duplicator (object *ob)
205 {
206 }
207
208 void
209 move_marker (object *ob)
210 {
211 }
212
213 void
214 move_creator (object *ob)
215 {
216 }
217
218 void
219 emergency_save (int x)
220 {
221 }
222
223 void
224 clean_tmp_files (void)
225 {
226 }
227
228 void
229 esrv_send_item (object *ob, object *obx)
230 {
231 }
232
233 void
234 dragon_ability_gain (object *ob, int x, int y)
235 {
236 }
237
238 void
239 weather_effect (const char *c)
240 {
241 }
242
243 void
244 set_darkness_map (maptile *m)
245 {
246 }
247
248 void
249 move_apply (object *ob, object *obt, object *obx)
250 {
251 }
252
253 object *
254 find_skill_by_number (object *ob, int x)
255 {
256 return NULL;
257 }
258
259 void
260 esrv_del_item (player *pl, int tag)
261 {
262 }
263
264 void
265 esrv_update_spells (player *pl)
266 {
267 }
268
269 void
270 monster_check_apply (object *ob, object *obt)
271 {
272 }
273
274 void
275 trap_adjust (object *ob, int x)
276 {
277 }