- /* --- game actions --- */
-
- if (tape.pausing)
- {
- /* don't use 100% CPU while in pause mode -- this should better be solved
- like in the R'n'D game engine! */
-
- Delay(10);
-
- return;
- }
-
- recorded_player_action = (tape.playing ? TapePlayAction() : NULL);
-
- for (i = 0; i < MAX_PLAYERS; i++)
- {
- summarized_player_action |= stored_player[i].action;
-
- if (!network_playing)
- stored_player[i].effective_action = stored_player[i].action;
- }
-
- if (!options.network && !setup.team_mode)
- local_player->effective_action = summarized_player_action;
-
- if (recorded_player_action != NULL)
- for (i = 0; i < MAX_PLAYERS; i++)
- stored_player[i].effective_action = recorded_player_action[i];
-
- for (i = 0; i < MAX_PLAYERS; i++)
- {
- tape_action[i] = stored_player[i].effective_action;
-
- /* !!! (this does not happen in the EM engine) !!! */
- if (tape.recording && tape_action[i] && !tape.player_participates[i])
- tape.player_participates[i] = TRUE; /* player just appeared from CE */
- }
-
- /* only save actions from input devices, but not programmed actions */
- if (tape.recording)
- TapeRecordAction(tape_action);
-
- GameActions_EM(local_player->effective_action);
-
- if (TimeFrames >= FRAMES_PER_SECOND)
- {
- TimeFrames = 0;
- TapeTime++;
-
- if (tape.recording || tape.playing)
- DrawVideoDisplay(VIDEO_STATE_TIME_ON, TapeTime);
- }
-
- FrameCounter++;
- TimeFrames++;
-
- BackToFront();
- }
- else
- {
- if (local_player->LevelSolved)
- GameWon();
-
- if (AllPlayersGone && !TAPE_IS_STOPPED(tape))
- TapeStop();
-
- GameActions();
- BackToFront();
-
- if (tape.auto_play && !tape.playing)
- AutoPlayTape(); /* continue automatically playing next tape */
- }