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, 10 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

# User Rev Content
1 elmex 1.1 /*
2 root 1.15 * This file is part of Crossfire TRT, the Roguelike Realtime MORPG.
3 pippijn 1.14 *
4 root 1.15 * 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 pippijn 1.14 *
8 root 1.15 * Crossfire TRT 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     * The authors can be reached via e-mail to <crossfire@schmorp.de>
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     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 root 1.11 memset (&rp, 0, sizeof (random_map_params));
61 root 1.3 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 elmex 1.1 }
74    
75 root 1.3 void
76 root 1.5 set_map_timeout (maptile *)
77 root 1.3 {
78     } /* doesn't need to do anything */
79 elmex 1.1
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 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     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 root 1.3 }
126 elmex 1.1
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 root 1.3 void
137 root 1.5 fix_auto_apply (maptile *m)
138 root 1.3 {
139     object *tmp, *above = NULL;
140     int x, y;
141    
142 root 1.10 for (x = 0; x < m->width; x++)
143     for (y = 0; y < m->height; y++)
144 root 1.9 for (tmp = GET_MAP_OB (m, x, y); tmp != NULL; tmp = above)
145 root 1.3 {
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 root 1.8 if (tmp->has_random_items ())
153 root 1.3 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 root 1.8 if (tmp->has_random_items ())
161 root 1.3 while ((tmp->stats.hp--) > 0)
162     create_treasure (tmp->randomitems, tmp, 0, m->difficulty, 0);
163     }
164 root 1.8 else if (tmp->has_random_items ())
165 root 1.3 create_treasure (tmp->randomitems, tmp, GT_APPLY, m->difficulty, 0);
166     }
167 elmex 1.1 }
168 root 1.10 for (x = 0; x < m->width; x++)
169     for (y = 0; y < m->height; y++)
170 root 1.9 for (tmp = GET_MAP_OB (m, x, y); tmp != NULL; tmp = tmp->above)
171 root 1.3 if (tmp->above && (tmp->type == TRIGGER_BUTTON || tmp->type == TRIGGER_PEDESTAL))
172     check_trigger (tmp, tmp->above);
173 elmex 1.1 }
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 root 1.3 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 root 1.5 new_info_map (int color, maptile *map, const char *str)
189 root 1.3 {
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 root 1.5 set_darkness_map (maptile *m)
245 root 1.3 {
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     }