rnd-20041127-2-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   for (i = 0; i < TILE_MAX; i++)
46     lev.android_array[i] = Xblank;
47
48   lev.home_initial = 1;         /* initial number of players in this level */
49
50   ply1.alive_initial = (lev.home_initial >= 1);
51   ply2.alive_initial = (lev.home_initial >= 2);
52 }
53
54
55 /* load cave
56  * 
57  * completely initializes the level structure, ready for a game
58  */
59
60 #define MAX_EM_LEVEL_SIZE               16384
61
62 boolean LoadNativeLevel_EM(char *filename)
63 {
64   unsigned char raw_leveldata[MAX_EM_LEVEL_SIZE];
65   int raw_leveldata_length;
66   int file_version;
67   FILE *file;
68
69   /* always start with reliable default values */
70   setLevelInfoToDefaults_EM();
71
72   if (!(file = fopen(filename, MODE_READ)))
73   {
74     Error(ERR_WARN, "cannot open level '%s' -- using empty level", filename);
75
76     return FALSE;
77   }
78
79   raw_leveldata_length = fread(raw_leveldata, 1, MAX_EM_LEVEL_SIZE, file);
80
81   fclose(file);
82
83   if (raw_leveldata_length <= 0)
84   {
85     Error(ERR_WARN, "cannot read level '%s' -- using empty level", filename);
86
87     return FALSE;
88   }
89
90   if (!(file_version = cleanup_em_level(raw_leveldata, raw_leveldata_length)))
91   {
92     Error(ERR_WARN, "unknown EM level '%s' -- using empty level", filename);
93
94     return FALSE;
95   }
96
97   convert_em_level(raw_leveldata, file_version);
98   prepare_em_level();
99
100   return TRUE;
101 }