1 /* 2000-08-10T16:43:50Z
2  *
3  * cave data structures
4  */
5 
6 #include "main_em.h"
7 
8 
9 struct LevelInfo_EM native_em_level;
10 
setLevelInfoToDefaults_EM(void)11 void setLevelInfoToDefaults_EM(void)
12 {
13   int i;
14 
15   native_em_level.file_version = FILE_VERSION_EM_ACTUAL;
16 
17   native_em_level.lev = &lev;
18   for (i = 0; i < MAX_PLAYERS; i++)
19     native_em_level.ply[i] = &ply[i];
20 
21   lev.width = 64;
22   lev.height = 32;
23 
24   for (i = 0; i < MAX_PLAYERS; i++)
25   {
26     ply[i].x_initial = 0;
27     ply[i].y_initial = 0;
28   }
29 
30   lev.lenses_cnt_initial = 0;
31   lev.magnify_cnt_initial = 0;
32 
33   lev.wheel_cnt_initial = 0;
34   lev.wheel_x_initial = 1;
35   lev.wheel_y_initial = 1;
36 
37   lev.wind_time = 9999;
38   lev.wind_cnt_initial = 0;
39 
40   lev.wonderwall_state_initial = 0;
41   lev.wonderwall_time_initial = 0;
42 
43   lev.num_ball_arrays = 8;
44 
45   for (i = 0; i < TILE_MAX; i++)
46     lev.android_array[i] = Xblank;
47 
48 #if 1
49   /* initial number of players in this level */
50   lev.home_initial = 0;
51 
52   for (i = 0; i < MAX_PLAYERS; i++)
53   {
54     ply[i].exists = 0;
55     ply[i].alive_initial = FALSE;
56   }
57 #else
58   /* initial number of players in this level */
59   lev.home_initial = (setup.team_mode ? 2 : 1);
60 
61   for (i = 0; i < MAX_PLAYERS; i++)
62   {
63     ply[i].exists = 0;
64     ply[i].alive_initial = (lev.home_initial > i ? TRUE : FALSE);
65   }
66 #endif
67 }
68 
69 
70 /* load cave
71  *
72  * completely initializes the level structure, ready for a game
73  */
74 
75 #define MAX_EM_LEVEL_SIZE		16384
76 
LoadNativeLevel_EM(char * filename,boolean level_info_only)77 boolean LoadNativeLevel_EM(char *filename, boolean level_info_only)
78 {
79   unsigned char raw_leveldata[MAX_EM_LEVEL_SIZE];
80   int raw_leveldata_length;
81   int file_version;
82   FILE *file;
83 
84   /* always start with reliable default values */
85   setLevelInfoToDefaults_EM();
86 
87   if (!(file = fopen(filename, MODE_READ)))
88   {
89     if (!level_info_only)
90       Error(ERR_WARN, "cannot open level '%s' -- using empty level", filename);
91 
92     return FALSE;
93   }
94 
95   raw_leveldata_length = fread(raw_leveldata, 1, MAX_EM_LEVEL_SIZE, file);
96 
97   fclose(file);
98 
99   if (raw_leveldata_length <= 0)
100   {
101     Error(ERR_WARN, "cannot read level '%s' -- using empty level", filename);
102 
103     return FALSE;
104   }
105 
106   file_version = cleanup_em_level(raw_leveldata, raw_leveldata_length,filename);
107 
108   if (file_version == FILE_VERSION_EM_UNKNOWN)
109   {
110     Error(ERR_WARN, "unknown EM level '%s' -- using empty level", filename);
111 
112     return FALSE;
113   }
114 
115   convert_em_level(raw_leveldata, file_version);
116   prepare_em_level();
117 
118   return TRUE;
119 }
120