2 // C Implementation: level
7 // Author: Tobias Glaesser <tobi.web@gmx.de>, (C) 2003
9 // Copyright: See COPYING file that comes with this distribution
21 /* Load data for this level: */
23 void loadlevel(st_level* plevel, char *subset, int level)
33 filename = (char *) malloc(sizeof(char) * (strlen(DATA_PREFIX) + 20) + strlen(subset));
34 sprintf(filename, "%s/levels/%s/level%d.dat", DATA_PREFIX, subset, level);
35 fi = fopen(filename, "r");
46 /* Load header info: */
51 strcpy(plevel->name, str);
52 plevel->name[strlen(plevel->name)-1] = '\0';
56 strcpy(plevel->theme, str);
57 plevel->theme[strlen(plevel->theme)-1] = '\0';
61 /* (Time to beat level) */
63 plevel->time_left = atoi(str);
65 /* (Song file for this level) */
66 fgets(str, sizeof(plevel->song_title), fi);
67 strcpy(plevel->song_title, str);
68 plevel->song_title[strlen(plevel->song_title)-1] = '\0';
72 /* (Level background color) */
74 plevel->bkgd_red = atoi(str);
76 plevel->bkgd_green= atoi(str);
78 plevel->bkgd_blue = atoi(str);
82 plevel->width = atoi(str);
85 /* Allocate some space for the line-reading! */
87 line = (char *) malloc(sizeof(char) * (plevel->width + 5));
90 fprintf(stderr, "Couldn't allocate space to load level data!");
96 /* Load the level lines: */
98 for (y = 0; y < 15; y++)
100 if(fgets(line, plevel->width + 5, fi) == NULL)
102 fprintf(stderr, "Level %s isn't complete!\n",plevel->name);
107 line[strlen(line) - 1] = '\0';
108 plevel->tiles[y] = strdup(line);
118 void loadlevelgfx(st_level *plevel)
121 load_level_image(&img_brick[0],plevel->theme,"brick0.png", IGNORE_ALPHA);
122 load_level_image(&img_brick[1],plevel->theme,"brick1.png", IGNORE_ALPHA);
124 load_level_image(&img_solid[0],plevel->theme,"solid0.png", USE_ALPHA);
125 load_level_image(&img_solid[1],plevel->theme,"solid1.png", USE_ALPHA);
126 load_level_image(&img_solid[2],plevel->theme,"solid2.png", USE_ALPHA);
127 load_level_image(&img_solid[3],plevel->theme,"solid3.png", USE_ALPHA);
129 load_level_image(&img_bkgd[0][0],plevel->theme,"bkgd-00.png", USE_ALPHA);
130 load_level_image(&img_bkgd[0][1],plevel->theme,"bkgd-01.png", USE_ALPHA);
131 load_level_image(&img_bkgd[0][2],plevel->theme,"bkgd-02.png", USE_ALPHA);
132 load_level_image(&img_bkgd[0][3],plevel->theme,"bkgd-03.png", USE_ALPHA);
134 load_level_image(&img_bkgd[1][0],plevel->theme,"bkgd-10.png", USE_ALPHA);
135 load_level_image(&img_bkgd[1][1],plevel->theme,"bkgd-11.png", USE_ALPHA);
136 load_level_image(&img_bkgd[1][2],plevel->theme,"bkgd-12.png", USE_ALPHA);
137 load_level_image(&img_bkgd[1][3],plevel->theme,"bkgd-13.png", USE_ALPHA);
140 /* Free graphics data for this level: */
142 void unloadlevelgfx(void)
146 for (i = 0; i < 2; i++)
148 texture_free(&img_brick[i]);
150 for (i = 0; i < 4; i++)
152 texture_free(&img_solid[i]);
153 texture_free(&img_bkgd[0][i]);
154 texture_free(&img_bkgd[1][i]);
158 /* Load a level-specific graphic... */
160 void load_level_image(texture_type* ptexture, char* theme, char * file, int use_alpha)
164 snprintf(fname, 1024, "%s/themes/%s/%s", st_dir, theme, file);
165 if(!faccessible(fname))
166 snprintf(fname, 1024, "%s/images/themes/%s/%s", DATA_PREFIX, theme, file);
168 texture_load(ptexture, fname, use_alpha);
171 /* Edit a piece of the map! */
173 void level_change(st_level* plevel, float x, float y, unsigned char c)
180 if (yy >= 0 && yy < 15 && xx >= 0 && xx <= plevel->width)
181 plevel->tiles[yy][xx] = c;