static void setLevelInfoToDefaults()
{
- int i, x, y;
+ int i, j, x, y;
level.file_version = FILE_VERSION_ACTUAL;
level.game_version = GAME_VERSION_ACTUAL;
for(i=0; i<LEVEL_SCORE_ELEMENTS; i++)
level.score[i] = 10;
- level.num_yam_contents = STD_ELEMENT_CONTENTS;
+ level.num_yamyam_contents = STD_ELEMENT_CONTENTS;
for(i=0; i<MAX_ELEMENT_CONTENTS; i++)
for(x=0; x<3; x++)
for(y=0; y<3; y++)
- level.yam_content[i][x][y] =
+ level.yamyam_content[i][x][y] =
(i < STD_ELEMENT_CONTENTS ? EL_ROCK : EL_EMPTY);
Feld[0][0] = Ur[0][0] = EL_PLAYER_1;
for (i=0; i < NUM_CUSTOM_ELEMENTS; i++)
{
- level.custom_element_successor[i] = EL_EMPTY_SPACE;
- Properties[EL_CUSTOM_START + i][EP_BITFIELD_BASE] = EP_BITMASK_DEFAULT;
+ int element = EL_CUSTOM_START + i;
+
+ level.custom_element[i].use_gfx_element = FALSE;
+ level.custom_element[i].gfx_element = EL_EMPTY_SPACE;
+ level.custom_element[i].move_direction = 0;
+
+ for(x=0; x<3; x++)
+ for(y=0; y<3; y++)
+ level.custom_element[i].content[x][y] = EL_EMPTY_SPACE;
+
+ level.custom_element[i].change.events = CE_BITMASK_DEFAULT;
+ level.custom_element[i].change.delay_fixed = 0;
+ level.custom_element[i].change.delay_random = 0;
+ level.custom_element[i].change.successor = EL_EMPTY_SPACE;
+
+ /* start with no properties at all */
+ for (j=0; j < NUM_EP_BITFIELDS; j++)
+ Properties[element][j] = EP_BITMASK_DEFAULT;
}
BorderElement = EL_STEELWALL;
for(i=0; i<LEVEL_SCORE_ELEMENTS; i++)
level->score[i] = fgetc(file);
- level->num_yam_contents = STD_ELEMENT_CONTENTS;
+ level->num_yamyam_contents = STD_ELEMENT_CONTENTS;
for(i=0; i<STD_ELEMENT_CONTENTS; i++)
for(y=0; y<3; y++)
for(x=0; x<3; x++)
- level->yam_content[i][x][y] = checkLevelElement(fgetc(file));
+ level->yamyam_content[i][x][y] = checkLevelElement(fgetc(file));
level->amoeba_speed = fgetc(file);
level->time_magic_wall = fgetc(file);
}
fgetc(file);
- level->num_yam_contents = fgetc(file);
+ level->num_yamyam_contents = fgetc(file);
fgetc(file);
fgetc(file);
/* correct invalid number of content fields -- should never happen */
- if (level->num_yam_contents < 1 ||
- level->num_yam_contents > MAX_ELEMENT_CONTENTS)
- level->num_yam_contents = STD_ELEMENT_CONTENTS;
+ if (level->num_yamyam_contents < 1 ||
+ level->num_yamyam_contents > MAX_ELEMENT_CONTENTS)
+ level->num_yamyam_contents = STD_ELEMENT_CONTENTS;
for(i=0; i<MAX_ELEMENT_CONTENTS; i++)
for(y=0; y<3; y++)
for(x=0; x<3; x++)
- level->yam_content[i][x][y] =
+ level->yamyam_content[i][x][y] =
checkLevelElement(level->encoding_16bit_field ?
getFile16BitBE(file) : fgetc(file));
return chunk_size;
if (element == EL_YAMYAM)
{
- level->num_yam_contents = num_contents;
+ level->num_yamyam_contents = num_contents;
for(i=0; i<num_contents; i++)
for(y=0; y<3; y++)
for(x=0; x<3; x++)
- level->yam_content[i][x][y] = content_array[i][x][y];
+ level->yamyam_content[i][x][y] = content_array[i][x][y];
}
else if (element == EL_BD_AMOEBA)
{
int i = element - EL_CUSTOM_START;
if (IS_CUSTOM_ELEMENT(element))
- level->custom_element_successor[i] = custom_element_successor;
+ level->custom_element[i].change.successor = custom_element_successor;
else
Error(ERR_WARN, "invalid custom element number %d", element);
}
for(y=0; y<3; y++)
for(x=0; x<3; x++)
fputc((level->encoding_16bit_yamyam ? EL_EMPTY :
- level->yam_content[i][x][y]),
+ level->yamyam_content[i][x][y]),
file);
fputc(level->amoeba_speed, file);
fputc(level->time_magic_wall, file);
int i, x, y;
fputc(EL_YAMYAM, file);
- fputc(level->num_yam_contents, file);
+ fputc(level->num_yamyam_contents, file);
fputc(0, file);
fputc(0, file);
for(y=0; y<3; y++)
for(x=0; x<3; x++)
if (level->encoding_16bit_field)
- putFile16BitBE(file, level->yam_content[i][x][y]);
+ putFile16BitBE(file, level->yamyam_content[i][x][y]);
else
- fputc(level->yam_content[i][x][y], file);
+ fputc(level->yamyam_content[i][x][y], file);
}
#endif
if (element == EL_YAMYAM)
{
- num_contents = level->num_yam_contents;
+ num_contents = level->num_yamyam_contents;
content_xsize = 3;
content_ysize = 3;
for(i=0; i<MAX_ELEMENT_CONTENTS; i++)
for(y=0; y<3; y++)
for(x=0; x<3; x++)
- content_array[i][x][y] = level->yam_content[i][x][y];
+ content_array[i][x][y] = level->yamyam_content[i][x][y];
}
else if (element == EL_BD_AMOEBA)
{
{
int element = EL_CUSTOM_START + i;
- if (level->custom_element_successor[i] != EL_EMPTY_SPACE)
+ if (level->custom_element[i].change.successor != EL_EMPTY_SPACE)
{
if (check < num_changed_custom_elements)
{
putFile16BitBE(file, element);
- putFile16BitBE(file, level->custom_element_successor[i]);
+ putFile16BitBE(file, level->custom_element[i].change.successor);
}
check++;
/* check yamyam content for 16-bit elements */
level.encoding_16bit_yamyam = FALSE;
- for(i=0; i<level.num_yam_contents; i++)
+ for(i=0; i<level.num_yamyam_contents; i++)
for(y=0; y<3; y++)
for(x=0; x<3; x++)
- if (level.yam_content[i][x][y] > 255)
+ if (level.yamyam_content[i][x][y] > 255)
level.encoding_16bit_yamyam = TRUE;
/* check amoeba content for 16-bit elements */
/* check for non-standard custom elements and calculate "CUS2" chunk size */
for (i=0; i < NUM_CUSTOM_ELEMENTS; i++)
- if (level.custom_element_successor[i] != EL_EMPTY_SPACE)
+ if (level.custom_element[i].change.successor != EL_EMPTY_SPACE)
num_changed_custom_elements2++;
putFileChunkBE(file, "RND1", CHUNK_SIZE_UNDEFINED);
SaveLevel_BODY(file, &level);
if (level.encoding_16bit_yamyam ||
- level.num_yam_contents != STD_ELEMENT_CONTENTS)
+ level.num_yamyam_contents != STD_ELEMENT_CONTENTS)
{
putFileChunkBE(file, "CNT2", LEVEL_CHUNK_CNT2_SIZE);
SaveLevel_CNT2(file, &level, EL_YAMYAM);