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