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