ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/server/random_maps/standalone.C
Revision: 1.19
Committed: Mon Sep 29 10:32:50 2008 UTC (15 years, 7 months ago) by root
Content type: text/plain
Branch: MAIN
CVS Tags: rel-2_80, rel-2_72, rel-2_73, rel-2_76, rel-2_77, rel-2_74, rel-2_75, rel-2_78, rel-2_79
Changes since 1.18: +2 -2 lines
Log Message:
destroy (true) => destroy ()

File Contents

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