+ case EL_BELT1_SWITCH_L:
+ case EL_BELT1_SWITCH_M:
+ case EL_BELT1_SWITCH_R:
+ case EL_BELT2_SWITCH_L:
+ case EL_BELT2_SWITCH_M:
+ case EL_BELT2_SWITCH_R:
+ case EL_BELT3_SWITCH_L:
+ case EL_BELT3_SWITCH_M:
+ case EL_BELT3_SWITCH_R:
+ case EL_BELT4_SWITCH_L:
+ case EL_BELT4_SWITCH_M:
+ case EL_BELT4_SWITCH_R:
+ {
+ static int belt_base_element[4] =
+ {
+ EL_BELT1_SWITCH_L,
+ EL_BELT2_SWITCH_L,
+ EL_BELT3_SWITCH_L,
+ EL_BELT4_SWITCH_L
+ };
+ static int belt_move_dir[3] =
+ {
+ MV_LEFT,
+ MV_NO_MOVING,
+ MV_RIGHT
+ };
+
+ int belt_nr = (element < EL_BELT2_SWITCH_L ? 0 :
+ element < EL_BELT3_SWITCH_L ? 1 :
+ element < EL_BELT4_SWITCH_L ? 2 : 3);
+ int belt_dir_nr = element - belt_base_element[belt_nr];
+ int belt_dir_nr_next = (belt_dir_nr + 1) % 3;
+ int belt_dir_next = belt_move_dir[belt_dir_nr_next];
+ int xx, yy;
+
+ if (player->Switching)
+ return MF_ACTION;
+
+ game.belt_dir[belt_nr] = belt_dir_next;
+
+ for (yy=0; yy<lev_fieldy; yy++)
+ {
+ for (xx=0; xx<lev_fieldx; xx++)
+ {
+ if (IS_BELT_SWITCH(Feld[xx][yy]))
+ {
+ int e = Feld[xx][yy];
+ int e_belt_nr = (e < EL_BELT2_SWITCH_L ? 0 :
+ e < EL_BELT3_SWITCH_L ? 1 :
+ e < EL_BELT4_SWITCH_L ? 2 : 3);
+
+ if (e_belt_nr == belt_nr)
+ {
+ Feld[xx][yy] = belt_base_element[belt_nr] + belt_dir_nr_next;
+ DrawLevelField(xx, yy);
+ }
+ }
+ }
+ }
+
+ player->Switching = TRUE;
+
+ return MF_ACTION;
+ }
+ break;
+