ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/server/random_maps/standalone.C
Revision: 1.9
Committed: Wed Dec 20 09:14:22 2006 UTC (17 years, 5 months ago) by root
Content type: text/plain
Branch: MAIN
Changes since 1.8: +2 -2 lines
Log Message:
- minor cleanups
- minor optimisations (in_player vs. is_player_inv)
- added P_PLAYER map flag
- some (dead) concept code

File Contents

# Content
1 /*
2 CrossFire, A Multiplayer game for X-windows
3
4 Copyright (C) 2002 Mark Wedel & Crossfire Development Team
5 Copyright (C) 1992 Frank Tore Johansen
6
7 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
9 the Free Software Foundation; either version 2 of the License, or
10 (at your option) any later version.
11
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with this program; if not, write to the Free Software
19 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
20
21 The authors can be reached via e-mail at <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 RMParms 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 (RMParms));
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 < MAP_WIDTH (m); x++)
143 for (y = 0; y < MAP_HEIGHT (m); 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 < MAP_WIDTH (m); x++)
169 for (y = 0; y < MAP_HEIGHT (m); 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 }