#define CHUNK_SIZE_NONE -1 /* do not write chunk size */
#define FILE_VERS_CHUNK_SIZE 8 /* size of file version chunk */
#define LEVEL_HEADER_SIZE 80 /* size of level file header */
-#define LEVEL_HEADER_UNUSED 10 /* unused level header bytes */
+#define LEVEL_HEADER_UNUSED 8 /* unused level header bytes */
#define LEVEL_CHUNK_CNT2_SIZE 160 /* size of level CNT2 chunk */
#define LEVEL_CHUNK_CNT2_UNUSED 11 /* unused CNT2 chunk bytes */
#define LEVEL_CHUNK_CNT3_HEADER 16 /* size of level CNT3 header */
change->post_change_function = NULL;
}
-static void setMoveIntoAcid(struct LevelInfo *level, int element)
-{
- int bit_nr = get_special_property_bit(element, EP_CAN_MOVE_INTO_ACID);
-
- if (bit_nr > -1)
- level->can_move_into_acid |= (1 << bit_nr);
-}
-
static void setLevelInfoToDefaults(struct LevelInfo *level)
{
int i, j, x, y;
level->em_slippery_gems = FALSE;
level->block_last_field = FALSE;
level->sp_block_last_field = TRUE;
+
level->use_spring_bug = FALSE;
level->can_move_into_acid = ~0; /* everything can move into acid */
for (j = 0; j < NUM_EP_BITFIELDS; j++)
Properties[element][j] = EP_BITMASK_DEFAULT;
+ /* now set default properties */
+ SET_PROPERTY(element, EP_CAN_MOVE_INTO_ACID, TRUE);
+
element_info[element].modified_settings = FALSE;
}
else if (IS_GROUP_ELEMENT(element) || element == EL_INTERNAL_EDITOR)
level->use_spring_bug = (getFile8Bit(file) == 1 ? TRUE : FALSE);
+ level->can_move_into_acid = getFile16BitBE(file);
+
ReadUnusedBytesFromFile(file, LEVEL_HEADER_UNUSED);
return chunk_size;
if (level->game_version < VERSION_IDENT(3,0,9,0))
{
+ int i;
+
level->can_move_into_acid = 0; /* nothing can move into acid */
- setMoveIntoAcid(level, EL_ROBOT);
- setMoveIntoAcid(level, EL_SATELLITE);
- setMoveIntoAcid(level, EL_PENGUIN);
- setMoveIntoAcid(level, EL_BALLOON);
+ setMoveIntoAcidProperty(level, EL_ROBOT, TRUE);
+ setMoveIntoAcidProperty(level, EL_SATELLITE, TRUE);
+ setMoveIntoAcidProperty(level, EL_PENGUIN, TRUE);
+ setMoveIntoAcidProperty(level, EL_BALLOON, TRUE);
+
+ for (i = 0; i < NUM_CUSTOM_ELEMENTS; i++)
+ SET_PROPERTY(EL_CUSTOM_START + i, EP_CAN_MOVE_INTO_ACID, TRUE);
}
}
else
}
}
+ /* correct field access direction (for old levels without this option) */
+ for (i = 0; i < NUM_CUSTOM_ELEMENTS; i++)
+ {
+ int element = EL_CUSTOM_START + i;
+
+ if (element_info[element].access_direction == MV_NO_MOVING)
+ element_info[element].access_direction = MV_ALL_DIRECTIONS;
+ }
+
#if 0
/* set default push delay values (corrected since version 3.0.7-1) */
if (level->game_version < VERSION_IDENT(3,0,7,1))
putFile8Bit(file, (level->use_spring_bug ? 1 : 0));
+ putFile16BitBE(file, level->can_move_into_acid);
+
WriteUnusedBytesToFile(file, LEVEL_HEADER_UNUSED);
}