ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/server/random_maps/standalone.C
(Generate patch)

Comparing deliantra/server/random_maps/standalone.C (file contents):
Revision 1.4 by root, Thu Sep 14 22:34:02 2006 UTC vs.
Revision 1.19 by root, Mon Sep 29 10:32:50 2008 UTC

1/* 1/*
2 CrossFire, A Multiplayer game for X-windows 2 * This file is part of Deliantra, the Roguelike Realtime MMORPG.
3 3 *
4 * Copyright (©) 2005,2006,2007,2008 Marc Alexander Lehmann / Robin Redeker / the Deliantra team
4 Copyright (C) 2002 Mark Wedel & Crossfire Development Team 5 * Copyright (©) 2002,2007 Mark Wedel & Crossfire Development Team
5 Copyright (C) 1992 Frank Tore Johansen 6 * Copyright (©) 1992,2007 Frank Tore Johansen
6 7 *
7 This program is free software; you can redistribute it and/or modify 8 * Deliantra 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 * 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 * the Free Software Foundation, either version 3 of the License, or
10 (at your option) any later version. 11 * (at your option) any later version.
11 12 *
12 This program is distributed in the hope that it will be useful, 13 * This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of 14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details. 16 * GNU General Public License for more details.
16 17 *
17 You should have received a copy of the GNU General Public License 18 * 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 * along with this program. If not, see <http://www.gnu.org/licenses/>.
19 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 20 *
20 21 * The authors can be reached via e-mail to <support@deliantra.net>
21 The authors can be reached via e-mail at <crossfire@schmorp.de>
22*/ 22 */
23 23
24#define LO_NEWFILE 2 24#define LO_NEWFILE 2
25 25
26/* the main routine for making a standalone version. */ 26/* the main routine for making a standalone version. */
27 27
35 35
36int 36int
37main (int argc, char *argv[]) 37main (int argc, char *argv[])
38{ 38{
39 char InFileName[1024], OutFileName[1024]; 39 char InFileName[1024], OutFileName[1024];
40 mapstruct *newMap; 40 maptile *newMap;
41 RMParms rp; 41 random_map_params rp;
42 FILE *fp; 42 FILE *fp;
43 43
44 if (argc < 3) 44 if (argc < 3)
45 { 45 {
46 printf ("\nUsage: %s inputfile outputfile\n", argv[0]); 46 printf ("\nUsage: %s inputfile outputfile\n", argv[0]);
47 exit (0); 47 exit (0);
48 } 48 }
49
49 strcpy (InFileName, argv[1]); 50 strcpy (InFileName, argv[1]);
50 strcpy (OutFileName, argv[2]); 51 strcpy (OutFileName, argv[2]);
51 52
52 init_globals (); 53 init_globals ();
53 init_library (); 54 init_library ();
55 init_artifacts (); 56 init_artifacts ();
56 init_formulae (); 57 init_formulae ();
57 init_readable (); 58 init_readable ();
58 59
59 init_gods (); 60 init_gods ();
60 memset (&rp, 0, sizeof (RMParms)); 61 memset (&rp, 0, sizeof (random_map_params));
61 rp.Xsize = -1; 62 rp.Xsize = -1;
62 rp.Ysize = -1; 63 rp.Ysize = -1;
63 if ((fp = fopen (InFileName, "r")) == NULL) 64 if ((fp = fopen (InFileName, "r")) == NULL)
64 { 65 {
65 fprintf (stderr, "\nError: can not open %s\n", InFileName); 66 fprintf (stderr, "\nError: can not open %s\n", InFileName);
71 new_save_map (newMap, 1); 72 new_save_map (newMap, 1);
72 exit (0); 73 exit (0);
73} 74}
74 75
75void 76void
76set_map_timeout (mapstruct *) 77set_map_timeout (maptile *)
77{ 78{
78} /* doesn't need to do anything */ 79} /* doesn't need to do anything */
79 80
80#include <global.h> 81#include <global.h>
81
82 82
83/* some plagarized code from apply.c--I needed just these two functions 83/* some plagarized code from apply.c--I needed just these two functions
84without all the rest of the junk, so.... */ 84without all the rest of the junk, so.... */
85int 85int
86auto_apply (object *op) 86auto_apply (object *op)
88 object *tmp = NULL; 88 object *tmp = NULL;
89 int i; 89 int i;
90 90
91 switch (op->type) 91 switch (op->type)
92 { 92 {
93 case SHOP_FLOOR: 93 case SHOP_FLOOR:
94 if (!HAS_RANDOM_ITEMS (op)) 94 if (!op->has_random_items ())
95 return 0; 95 return 0;
96 do 96 do
97 { 97 {
98 i = 10; /* let's give it 10 tries */ 98 i = 10; /* let's give it 10 tries */
99
99 while ((tmp = generate_treasure (op->randomitems, op->stats.exp ? op->stats.exp : 5)) == NULL && --i); 100 while (!(tmp = generate_treasure (op->randomitems, op->stats.exp ? op->stats.exp : 5))
101 && --i)
102 ;
103
100 if (tmp == NULL) 104 if (tmp == NULL)
101 return 0; 105 return 0;
106
102 if (QUERY_FLAG (tmp, FLAG_CURSED) || QUERY_FLAG (tmp, FLAG_DAMNED)) 107 if (QUERY_FLAG (tmp, FLAG_CURSED) || QUERY_FLAG (tmp, FLAG_DAMNED))
103 { 108 {
104 free_object (tmp); 109 tmp->destroy ();
105 tmp = NULL; 110 tmp = NULL;
106 } 111 }
107 } 112 }
108 while (!tmp); 113 while (!tmp);
109 114
110 tmp->x = op->x, tmp->y = op->y; 115 tmp->x = op->x, tmp->y = op->y;
111 SET_FLAG (tmp, FLAG_UNPAID); 116 SET_FLAG (tmp, FLAG_UNPAID);
112 insert_ob_in_map (tmp, op->map, NULL, 0); 117 insert_ob_in_map (tmp, op->map, NULL, 0);
113 CLEAR_FLAG (op, FLAG_AUTO_APPLY); 118 CLEAR_FLAG (op, FLAG_AUTO_APPLY);
114 identify (tmp); 119 identify (tmp);
115 break; 120 break;
116 121
117 case TREASURE: 122 case TREASURE:
118 if (HAS_RANDOM_ITEMS (op)) 123 if (op->has_random_items ())
119 while ((op->stats.hp--) > 0) 124 while ((op->stats.hp--) > 0)
120 create_treasure (op->randomitems, op, GT_ENVIRONMENT, 125 create_treasure (op->randomitems, op, GT_ENVIRONMENT,
121 op->stats.exp ? op->stats.exp : op->map == NULL ? 14 : op->map->difficulty, 0); 126 op->stats.exp ? op->stats.exp : op->map == NULL ? 14 : op->map->difficulty, 0);
122 remove_ob (op); 127
123 free_object (op); 128 op->destroy ();
124 break; 129 break;
125 } 130 }
126 131
127 return tmp ? 1 : 0; 132 return tmp ? 1 : 0;
128} 133}
129 134
130/* fix_auto_apply goes through the entire map (only the first time 135/* fix_auto_apply goes through the entire map (only the first time
131 * when an original map is loaded) and performs special actions for 136 * when an original map is loaded) and performs special actions for
132 * certain objects (most initialization of chests and creation of 137 * certain objects (most initialization of chests and creation of
133 * treasures and stuff). Calls auto_apply if appropriate. 138 * treasures and stuff). Calls auto_apply if appropriate.
134 */ 139 */
135
136void 140void
137fix_auto_apply (mapstruct *m) 141fix_auto_apply (maptile *m)
138{ 142{
139 object *tmp, *above = NULL; 143 object *tmp, *above = NULL;
140 int x, y; 144 int x, y;
141 145
142 for (x = 0; x < MAP_WIDTH (m); x++) 146 for (x = 0; x < m->width; x++)
143 for (y = 0; y < MAP_HEIGHT (m); y++) 147 for (y = 0; y < m->height; y++)
144 for (tmp = get_map_ob (m, x, y); tmp != NULL; tmp = above) 148 for (tmp = GET_MAP_OB (m, x, y); tmp != NULL; tmp = above)
145 { 149 {
146 above = tmp->above; 150 above = tmp->above;
147 151
148 if (QUERY_FLAG (tmp, FLAG_AUTO_APPLY)) 152 if (QUERY_FLAG (tmp, FLAG_AUTO_APPLY))
149 auto_apply (tmp); 153 auto_apply (tmp);
150 else if (tmp->type == TREASURE) 154 else if (tmp->type == TREASURE)
151 { 155 {
152 if (HAS_RANDOM_ITEMS (tmp)) 156 if (tmp->has_random_items ())
153 while ((tmp->stats.hp--) > 0) 157 while ((tmp->stats.hp--) > 0)
154 create_treasure (tmp->randomitems, tmp, 0, m->difficulty, 0); 158 create_treasure (tmp->randomitems, tmp, 0, m->difficulty, 0);
155 } 159 }
156 if (tmp && tmp->arch && tmp->type != PLAYER && tmp->type != TREASURE && tmp->randomitems) 160 if (tmp && tmp->arch && tmp->type != PLAYER && tmp->type != TREASURE && tmp->randomitems)
157 { 161 {
158 if (tmp->type == CONTAINER) 162 if (tmp->type == CONTAINER)
159 { 163 {
160 if (HAS_RANDOM_ITEMS (tmp)) 164 if (tmp->has_random_items ())
161 while ((tmp->stats.hp--) > 0) 165 while ((tmp->stats.hp--) > 0)
162 create_treasure (tmp->randomitems, tmp, 0, m->difficulty, 0); 166 create_treasure (tmp->randomitems, tmp, 0, m->difficulty, 0);
163 } 167 }
164 else if (HAS_RANDOM_ITEMS (tmp)) 168 else if (tmp->has_random_items ())
165 create_treasure (tmp->randomitems, tmp, GT_APPLY, m->difficulty, 0); 169 create_treasure (tmp->randomitems, tmp, GT_APPLY, m->difficulty, 0);
166 } 170 }
167 } 171 }
168 for (x = 0; x < MAP_WIDTH (m); x++) 172 for (x = 0; x < m->width; x++)
169 for (y = 0; y < MAP_HEIGHT (m); y++) 173 for (y = 0; y < m->height; y++)
170 for (tmp = get_map_ob (m, x, y); tmp != NULL; tmp = tmp->above) 174 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)) 175 if (tmp->above && (tmp->type == TRIGGER_BUTTON || tmp->type == TRIGGER_PEDESTAL))
172 check_trigger (tmp, tmp->above); 176 check_trigger (tmp, tmp->above);
173} 177}
174 178
175/** 179/**
183{ 187{
184 fprintf (logfile, "%s\n", txt); 188 fprintf (logfile, "%s\n", txt);
185} 189}
186 190
187void 191void
188new_info_map (int color, mapstruct *map, const char *str) 192new_info_map (int color, maptile *map, const char *str)
189{ 193{
190 fprintf (logfile, "new_info_map: %s\n", str); 194 fprintf (logfile, "new_info_map: %s\n", str);
191} 195}
192 196
193void 197void
239weather_effect (const char *c) 243weather_effect (const char *c)
240{ 244{
241} 245}
242 246
243void 247void
244set_darkness_map (mapstruct *m) 248set_darkness_map (maptile *m)
245{ 249{
246} 250}
247 251
248void 252void
249move_apply (object *ob, object *obt, object *obx) 253move_apply (object *ob, object *obt, object *obx)
273 277
274void 278void
275trap_adjust (object *ob, int x) 279trap_adjust (object *ob, int x)
276{ 280{
277} 281}
282

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines