GADGET_ID_DF_LASER_GREEN,
GADGET_ID_DF_LASER_BLUE,
GADGET_ID_ROTATE_MM_BALL_CONTENT,
+ GADGET_ID_EXPLODE_MM_BALL,
GADGET_ID_CUSTOM_INDESTRUCTIBLE,
GADGET_ID_CUSTOM_CAN_EXPLODE,
GADGET_ID_CUSTOM_EXPLODE_FIRE,
ED_CHECKBUTTON_ID_DF_LASER_GREEN,
ED_CHECKBUTTON_ID_DF_LASER_BLUE,
ED_CHECKBUTTON_ID_ROTATE_MM_BALL_CONTENT,
+ ED_CHECKBUTTON_ID_EXPLODE_MM_BALL,
ED_CHECKBUTTON_ID_CUSTOM_USE_GRAPHIC,
ED_CHECKBUTTON_ID_CUSTOM_USE_TEMPLATE_1,
ED_CHECKBUTTON_ID_CUSTOM_ACCESSIBLE,
NULL, NULL,
"randomly rotate created content", "randomly rotate newly created content"
},
+ {
+ ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(6),
+ GADGET_ID_EXPLODE_MM_BALL, GADGET_ID_NONE,
+ &level.explode_mm_ball,
+ NULL, NULL,
+ "explode ball instead of melting", "use explosion to release ball content"
+ },
// ---------- element settings: configure 1 (custom elements) ---------------
MapCounterButtons(ED_COUNTER_ID_MM_BALL_CONTENT);
MapSelectboxGadget(ED_SELECTBOX_ID_MM_BALL_CHOICE_MODE);
MapCheckbuttonGadget(ED_CHECKBUTTON_ID_ROTATE_MM_BALL_CONTENT);
+ MapCheckbuttonGadget(ED_CHECKBUTTON_ID_EXPLODE_MM_BALL);
DrawMMBallContentArea();
}
TYPE_BOOLEAN, CONF_VALUE_8_BIT(1),
&li.rotate_mm_ball_content, TRUE
},
+ {
+ EL_MM_GRAY_BALL, -1,
+ TYPE_BOOLEAN, CONF_VALUE_8_BIT(2),
+ &li.explode_mm_ball, FALSE
+ },
{
EL_MM_STEEL_BLOCK, -1,
level_mm->num_ball_contents = level->num_mm_ball_contents;
level_mm->ball_choice_mode = level->mm_ball_choice_mode;
level_mm->rotate_ball_content = level->rotate_mm_ball_content;
+ level_mm->explode_ball = level->explode_mm_ball;
for (i = 0; i < level->num_mm_ball_contents; i++)
level_mm->ball_content[i] =
level->num_mm_ball_contents = level_mm->num_ball_contents;
level->mm_ball_choice_mode = level_mm->ball_choice_mode;
level->rotate_mm_ball_content = level_mm->rotate_ball_content;
+ level->explode_mm_ball = level_mm->explode_ball;
for (i = 0; i < level->num_mm_ball_contents; i++)
level->mm_ball_content[i] =
int ball_choice_mode;
int ball_content[MM_MAX_BALL_CONTENTS];
boolean rotate_ball_content;
+ boolean explode_ball;
short field[MAX_PLAYFIELD_WIDTH][MAX_PLAYFIELD_HEIGHT];
};
Tile[x][y] = center_element;
}
- Store[x][y] = EL_EMPTY;
+ if (center_element != EL_GRAY_BALL_ACTIVE)
+ Store[x][y] = EL_EMPTY;
Store2[x][y] = center_element;
Tile[x][y] = EL_EXPLODING_OPAQUE;
GfxElement[x][y] = (center_element == EL_BOMB_ACTIVE ? EL_BOMB :
+ center_element == EL_GRAY_BALL_ACTIVE ? EL_GRAY_BALL :
IS_MCDUFFIN(center_element) ? EL_MCDUFFIN :
center_element);
InitField(x, y, FALSE);
DrawField_MM(x, y);
+
+ if (center_element == EL_GRAY_BALL_ACTIVE)
+ ScanLaser_FromLastMirror();
}
else if (!(phase % delay) && IN_SCR_FIELD(SCREENX(x), SCREENY(y)))
{
Store2[ELX][ELY] = TRUE;
}
- Tile[ELX][ELY] = EL_GRAY_BALL_OPENING;
+ if (native_mm_level.explode_ball)
+ Bang_MM(ELX, ELY);
+ else
+ Tile[ELX][ELY] = EL_GRAY_BALL_OPENING;
- laser.dest_element_last = Tile[ELX][ELY];
+ laser.dest_element = laser.dest_element_last = Tile[ELX][ELY];
return;
}
int mm_ball_choice_mode;
int mm_ball_content[MAX_MM_BALL_CONTENTS];
boolean rotate_mm_ball_content;
+ boolean explode_mm_ball;
// ('int' instead of 'boolean' because used as selectbox value in editor)
int use_step_counter; // count steps instead of seconds for level