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

Comparing deliantra/server/common/init.C (file contents):
Revision 1.12 by root, Thu Sep 14 18:13:01 2006 UTC vs.
Revision 1.20 by pippijn, Tue Jan 2 23:39:21 2007 UTC

16 16
17 You should have received a copy of the GNU General Public License 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 18 along with this program; if not, write to the Free Software
19 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 19 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
20 20
21 The authors can be reached via e-mail at crossfire-devel@real-time.com 21 The authors can be reached via e-mail at <crossfire@schmorp.de>
22*/ 22*/
23 23
24#define EXTERN // horrible hack 24#define EXTERN // horrible hack
25 25
26#include <global.h> 26#include <global.h>
27#include <object.h> 27#include <object.h>
28 28
29extern const char *const attacktype_desc[NROFATTACKS] = { 29extern const char *const attacktype_desc[NROFATTACKS] = {
30# define def(uc, lc, name, plus, change) # name, 30# define def(uc, lc, name, plus, change) # name,
31# include "attackinc.h"
32# undef def
33};
34
35extern const keyword resist_save[NROFATTACKS] = {
36# define def(uc, lc, name, plus, change) KW_resist_ ## lc,
37# include "attackinc.h" 31# include "attackinc.h"
38# undef def 32# undef def
39}; 33};
40 34
41extern const char *const resist_plus[NROFATTACKS] = { 35extern const char *const resist_plus[NROFATTACKS] = {
93 SEARCH_ITEMS, 87 SEARCH_ITEMS,
94 SPELL_ENCUMBRANCE, 88 SPELL_ENCUMBRANCE,
95 SPELL_FAILURE_EFFECTS, 89 SPELL_FAILURE_EFFECTS,
96 CASTING_TIME, 90 CASTING_TIME,
97 REAL_WIZ, 91 REAL_WIZ,
98 RECYCLE_TMP_MAPS,
99 EXPLORE_MODE, 92 EXPLORE_MODE,
100 SPELLPOINT_LEVEL_DEPEND, 93 SPELLPOINT_LEVEL_DEPEND,
101 SET_FRIENDLY_FIRE, 94 SET_FRIENDLY_FIRE,
102 "", /* Who format specifier */
103 "", /* who wiz format specifier */
104 MOTD, 95 MOTD,
105 "rules", 96 "rules",
106 "news", 97 "news",
107 "", /* DM_MAIL */ 98 "", /* DM_MAIL */
108 0, /* This and the next 3 values are metaserver values */
109 "",
110 "",
111 0,
112 "",
113 0, 0, 0, 0, 0, 0, 0, 0, /* worldmap settings */ 99 0, 0, 0, 0, 0, 0, 0, 0, /* worldmap settings */
114 EMERGENCY_MAPPATH, EMERGENCY_X, EMERGENCY_Y,
115 0, 100 0,
116 1.0, 101 1.0,
117 102
118/* Armor enchantment stuff */ 103/* Armor enchantment stuff */
119 ARMOR_MAX_ENCHANT, 104 ARMOR_MAX_ENCHANT,
150 "Wounding", 135 "Wounding",
151 "Death", 136 "Death",
152 "Light" 137 "Light"
153}; 138};
154 139
155
156/* This loads the emergency map information from a
157 * .emergency file in the map directory. Doing this makes
158 * it easier to switch between map distributions (don't need
159 * to recompile. Note that there is no reason I see that
160 * this could not be re-loaded during play, but it seems
161 * like there should be little reason to do that.
162 */
163static void
164init_emergency_mappath (void)
165{
166 char filename[MAX_BUF], tmpbuf[MAX_BUF];
167 FILE *fp;
168 int online = 0;
169
170 /* If this file doesn't exist, not a big deal */
171 sprintf (filename, "%s/%s/.emergency", settings.datadir, settings.mapdir);
172 if ((fp = fopen (filename, "r")) != NULL)
173 {
174 while (fgets (tmpbuf, MAX_BUF - 1, fp))
175 {
176 if (tmpbuf[0] == '#')
177 continue; /* ignore comments */
178
179 if (online == 0)
180 {
181 tmpbuf[strlen (tmpbuf) - 1] = 0; /* kill newline */
182 settings.emergency_mapname = strdup_local (tmpbuf);
183 }
184 else if (online == 1)
185 {
186 settings.emergency_x = atoi (tmpbuf);
187 }
188
189 else if (online == 2)
190 {
191 settings.emergency_y = atoi (tmpbuf);
192 }
193 online++;
194 if (online > 2)
195 break;
196 }
197 fclose (fp);
198 if (online <= 2)
199 LOG (llevError, "Online read partial data from %s\n", filename);
200 LOG (llevDebug, "Emergency mappath reset to %s (%d, %d)\n", settings.emergency_mapname, settings.emergency_x, settings.emergency_y);
201 }
202}
203
204
205/* 140/*
206 * It is vital that init_library() is called by any functions 141 * It is vital that init_library() is called by any functions
207 * using this library. 142 * using this library.
208 * If you want to lessen the size of the program using the library, 143 * If you want to lessen the size of the program using the library,
209 * you can replace the call to init_library() with init_globals() and 144 * you can replace the call to init_library() with init_globals() and
210 * init_function_pointers(). Good idea to also call init_vars and 145 * init_function_pointers(). Good idea to also call init_vars and
211 * init_hash_table if you are doing any object loading. 146 * init_hash_table if you are doing any object loading.
212 */ 147 */
213
214void 148void
215init_library (void) 149init_library (void)
216{ 150{
217 init_environ (); 151 init_environ ();
218 init_globals (); 152 init_globals ();
223 init_anim (); /* Must be after we read in the bitmaps */ 157 init_anim (); /* Must be after we read in the bitmaps */
224 init_archetypes (); /* Reads all archetypes from file */ 158 init_archetypes (); /* Reads all archetypes from file */
225 init_dynamic (); 159 init_dynamic ();
226 init_attackmess (); 160 init_attackmess ();
227 init_clocks (); 161 init_clocks ();
228 init_emergency_mappath ();
229 init_experience (); 162 init_experience ();
230} 163}
231 164
232 165
233/* init_environ initializes values from the environmental variables. 166/* init_environ initializes values from the environmental variables.
296 while (at) 229 while (at)
297 { 230 {
298 if (at->clone.type == MAP) 231 if (at->clone.type == MAP)
299 { 232 {
300 if (at->clone.race) 233 if (at->clone.race)
301 strcpy (first_map_ext_path, at->clone.race); 234 first_map_ext_path = at->clone.race;
302 235
303 if (EXIT_PATH (&at->clone)) 236 if (EXIT_PATH (&at->clone))
304 { 237 {
305 strcpy (first_map_path, EXIT_PATH (&at->clone)); 238 first_map_path = EXIT_PATH (&at->clone);
306 return; 239 return;
307 } 240 }
308 } 241 }
309 242
310 at = at->next; 243 at = at->next;
353 return; 286 return;
354 else 287 else
355 has_been_done = 1; 288 has_been_done = 1;
356 289
357 sprintf (filename, "%s/clockdata", settings.localdir); 290 sprintf (filename, "%s/clockdata", settings.localdir);
358 LOG (llevDebug, "Reading clockdata from %s...", filename); 291 LOG (llevDebug, "Reading clockdata from %s...\n", filename);
359 if ((fp = fopen (filename, "r")) == NULL) 292 if ((fp = fopen (filename, "r")) == NULL)
360 { 293 {
361 LOG (llevError, "Can't open %s.\n", filename); 294 LOG (llevError, "Can't open %s.\n", filename);
362 todtick = 0; 295 todtick = 0;
363 write_todclock (); 296 write_todclock ();
390 return; 323 return;
391 else 324 else
392 has_been_done = 1; 325 has_been_done = 1;
393 326
394 sprintf (filename, "%s/attackmess", settings.datadir); 327 sprintf (filename, "%s/attackmess", settings.datadir);
395 LOG (llevDebug, "Reading attack messages from %s...", filename); 328 LOG (llevDebug, "Reading attack messages from %s...\n", filename);
396 if ((fp = open_and_uncompress (filename, 0, &comp)) == NULL) 329 if ((fp = open_and_uncompress (filename, 0, &comp)) == NULL)
397 { 330 {
398 LOG (llevError, "Can't open %s.\n", filename); 331 LOG (llevError, "Can't open %s.\n", filename);
399 return; 332 return;
400 } 333 }
430 { 363 {
431 p = strtok (buf, "="); 364 p = strtok (buf, "=");
432 attack_mess[mess][level].level = atoi (buf); 365 attack_mess[mess][level].level = atoi (buf);
433 p = strtok (NULL, "="); 366 p = strtok (NULL, "=");
434 if (p != NULL) 367 if (p != NULL)
435 attack_mess[mess][level].buf1 = strdup_local (p); 368 attack_mess[mess][level].buf1 = strdup (p);
436 else 369 else
437 attack_mess[mess][level].buf1 = strdup_local (""); 370 attack_mess[mess][level].buf1 = strdup ("");
438 mode = 2; 371 mode = 2;
439 continue; 372 continue;
440 } 373 }
441 else if (mode == 2) 374 else if (mode == 2)
442 { 375 {
443 p = strtok (buf, "="); 376 p = strtok (buf, "=");
444 attack_mess[mess][level].level = atoi (buf); 377 attack_mess[mess][level].level = atoi (buf);
445 p = strtok (NULL, "="); 378 p = strtok (NULL, "=");
446 if (p != NULL) 379 if (p != NULL)
447 attack_mess[mess][level].buf2 = strdup_local (p); 380 attack_mess[mess][level].buf2 = strdup (p);
448 else 381 else
449 attack_mess[mess][level].buf2 = strdup_local (""); 382 attack_mess[mess][level].buf2 = strdup ("");
450 mode = 3; 383 mode = 3;
451 continue; 384 continue;
452 } 385 }
453 else if (mode == 3) 386 else if (mode == 3)
454 { 387 {
455 p = strtok (buf, "="); 388 p = strtok (buf, "=");
456 attack_mess[mess][level].level = atoi (buf); 389 attack_mess[mess][level].level = atoi (buf);
457 p = strtok (NULL, "="); 390 p = strtok (NULL, "=");
458 if (p != NULL) 391 if (p != NULL)
459 attack_mess[mess][level].buf3 = strdup_local (p); 392 attack_mess[mess][level].buf3 = strdup (p);
460 else 393 else
461 attack_mess[mess][level].buf3 = strdup_local (""); 394 attack_mess[mess][level].buf3 = strdup ("");
462 mode = 1; 395 mode = 1;
463 level++; 396 level++;
464 total++; 397 total++;
465 continue; 398 continue;
466 } 399 }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines