removed runtime values from level structure for EM and SP engine
[rocksndiamonds.git] / src / game_em / cave.c
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
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   game_em.lev = &lev;
22   for (i = 0; i < MAX_PLAYERS; i++)
23     game_em.ply[i] = &ply[i];
24
25   lev.width = 64;
26   lev.height = 32;
27
28   for (i = 0; i < MAX_PLAYERS; i++)
29   {
30     ply[i].x_initial = -1;
31     ply[i].y_initial = -1;
32   }
33
34   lev.lenses_cnt_initial = 0;
35   lev.magnify_cnt_initial = 0;
36
37   lev.wheel_cnt_initial = 0;
38   lev.wheel_x_initial = 1;
39   lev.wheel_y_initial = 1;
40
41   lev.wind_time = 9999;
42   lev.wind_cnt_initial = 0;
43
44   lev.wonderwall_state_initial = 0;
45   lev.wonderwall_time_initial = 0;
46
47   lev.num_ball_arrays = 8;
48
49   for (i = 0; i < TILE_MAX; i++)
50     lev.android_array[i] = Xblank;
51
52   /* initial number of players in this level */
53   lev.home_initial = 0;
54
55   for (i = 0; i < MAX_PLAYERS; i++)
56   {
57     ply[i].exists = 0;
58     ply[i].alive_initial = FALSE;
59   }
60 }
61
62
63 /* load cave
64  * 
65  * completely initializes the level structure, ready for a game
66  */
67
68 #define MAX_EM_LEVEL_SIZE               16384
69
70 boolean LoadNativeLevel_EM(char *filename, boolean level_info_only)
71 {
72   unsigned char raw_leveldata[MAX_EM_LEVEL_SIZE];
73   int raw_leveldata_length;
74   int file_version;
75   File *file;
76
77   /* always start with reliable default values */
78   setLevelInfoToDefaults_EM();
79
80   if (!(file = openFile(filename, MODE_READ)))
81   {
82     if (!level_info_only)
83       Error(ERR_WARN, "cannot open level '%s' -- using empty level", filename);
84
85     return FALSE;
86   }
87
88   raw_leveldata_length = readFile(file, raw_leveldata, 1, MAX_EM_LEVEL_SIZE);
89
90   closeFile(file);
91
92   if (raw_leveldata_length <= 0)
93   {
94     Error(ERR_WARN, "cannot read level '%s' -- using empty level", filename);
95
96     return FALSE;
97   }
98
99   file_version = cleanup_em_level(raw_leveldata, raw_leveldata_length,filename);
100
101   if (file_version == FILE_VERSION_EM_UNKNOWN)
102   {
103     Error(ERR_WARN, "unknown EM level '%s' -- using empty level", filename);
104
105     return FALSE;
106   }
107
108   convert_em_level(raw_leveldata, file_version);
109   prepare_em_level();
110
111   return TRUE;
112 }