{
int i, x, y;
- /* set global editor control values */
- editor.draw_walls_masked = FALSE;
-
/* set global game control values */
game_mm.num_cycle = 0;
game_mm.num_pacman = 0;
game_mm.game_over = FALSE;
game_mm.game_over_cause = 0;
+ game_mm.laser_overload_value = 0;
+
/* set global laser control values (must be set before "InitLaser()") */
laser.start_edge.x = 0;
laser.start_edge.y = 0;
DrawLevel_MM();
}
-void InitGameEngine_MM_AfterFadingIn()
+void InitGameActions_MM()
{
InitCycleElements();
InitLaser();
int element;
int end = 0, rf = laser.num_edges;
+ /* do not scan laser again after the game was lost for whatever reason */
+ if (game_mm.game_over)
+ return;
+
laser.overloaded = FALSE;
laser.stops_inside_element = FALSE;
int element;
int x = (mx - SX) / TILEX, y = (my - SY) / TILEY;
+ /* do not rotate objects hit by the laser after the game was solved */
+ if (game_mm.level_solved && Hit[x][y])
+ return;
+
if (button == MB_RELEASED)
{
new_button = TRUE;
{
int element = Feld[x][y];
+ /* do not rotate objects hit by the laser after the game was solved */
+ if (game_mm.level_solved && Hit[x][y])
+ continue;
+
if (IS_DF_MIRROR_AUTO(element) ||
IS_GRID_WOOD_AUTO(element) ||
IS_GRID_STEEL_AUTO(element) ||
laser.overload_value = 0;
}
+ game_mm.laser_overload_value = laser.overload_value;
+
if (laser.overload_value < MAX_LASER_OVERLOAD - 8)
{
int color_up = 0xFF * laser.overload_value / MAX_LASER_OVERLOAD;