rnd-20040921-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 #include "file.h"
10
11
12 struct cave_node *cave_list;
13
14 static void setLevelInfoToDefaults_EM(void)
15 {
16   native_em_level.lev = &lev;
17   native_em_level.ply1 = &ply1;
18   native_em_level.ply2 = &ply2;
19
20   lev.width = 64;
21   lev.height = 32;
22
23   ply1.x_initial = 0;
24   ply1.y_initial = 0;
25
26   ply2.x_initial = 0;
27   ply2.y_initial = 0;
28 }
29
30
31 /* attempt load a cave
32  * 
33  * completely initializes the level structure, ready for a game
34  */
35
36 #define MAX_EM_LEVEL_SIZE               16384
37
38 boolean LoadNativeLevel_EM(char *filename)
39 {
40   unsigned char raw_leveldata[MAX_EM_LEVEL_SIZE];
41   int raw_leveldata_length;
42   FILE *file;
43
44   /* always start with reliable default values */
45   setLevelInfoToDefaults_EM();
46
47   if (!(file = fopen(filename, MODE_READ)))
48   {
49     Error(ERR_WARN, "cannot open level '%s' -- using empty level", filename);
50
51     return FALSE;
52   }
53
54   raw_leveldata_length = fread(raw_leveldata, 1, MAX_EM_LEVEL_SIZE, file);
55
56   fclose(file);
57
58   if (raw_leveldata_length <= 0)
59   {
60     Error(ERR_WARN, "cannot read level '%s' -- using empty level", filename);
61
62     return FALSE;
63   }
64
65   if (!cleanup_em_level(raw_leveldata, &raw_leveldata_length))
66   {
67     Error(ERR_WARN, "unknown EM level '%s' -- using empty level", filename);
68
69     return FALSE;
70   }
71
72   convert_em_level(raw_leveldata);
73   prepare_em_level();
74
75   return TRUE;
76 }