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