DrawText(mSX + level_width + 5 * 32, mSY + 3*32, int2str(level_nr,3),
FONT_VALUE_1);
- DrawMicroLevel(MICROLEV_XPOS, MICROLEV_YPOS, TRUE);
+ DrawMicroLevel(MICROLEVEL_XPOS, MICROLEVEL_YPOS, TRUE);
DrawTextF(mSX + 32 + level_width - 2, mSY + 3*32 + 1, FONT_TEXT_3, "%d-%d",
leveldir_current->first_level, leveldir_current->last_level);
FONT_VALUE_1);
LoadLevel(level_nr);
- DrawMicroLevel(MICROLEV_XPOS, MICROLEV_YPOS, TRUE);
+ DrawMicroLevel(MICROLEVEL_XPOS, MICROLEVEL_YPOS, TRUE);
TapeErase();
LoadTape(level_nr);
if (game_status == GAME_MODE_MAIN)
{
- DrawMicroLevel(MICROLEV_XPOS, MICROLEV_YPOS, FALSE);
+ DrawMicroLevel(MICROLEVEL_XPOS, MICROLEVEL_YPOS, FALSE);
DoAnimation();
}
}
int num_entries = numTreeInfoInGroup(ti);
int num_page_entries;
int last_game_status = game_status; /* save current game status */
+ boolean position_set_by_scrollbar = (dx == 999);
/* force LEVELS draw offset on choose level and artwork setup screen */
game_status = GAME_MODE_LEVELS;
ti->cl_cursor = entry_pos - ti->cl_first;
}
- if (dx == 999) /* first entry is set by scrollbar position */
+ if (position_set_by_scrollbar)
ti->cl_first = dy;
else
AdjustChooseTreeScrollbar(SCREEN_CTRL_ID_SCROLL_VERTICAL,
return;
}
- if (IN_VIS_FIELD(x, y) &&
+ if (!anyScrollbarGadgetActive() &&
+ IN_VIS_FIELD(x, y) &&
mx < screen_gadget[SCREEN_CTRL_ID_SCROLL_VERTICAL]->x &&
y >= 0 && y < num_page_entries)
{
#endif
{ TYPE_SWITCH, &setup.editor.el_boulderdash, "BoulderDash:" },
{ TYPE_SWITCH, &setup.editor.el_emerald_mine, "Emerald Mine:" },
+ { TYPE_SWITCH, &setup.editor.el_emerald_mine_club,"E.M. Club:" },
{ TYPE_SWITCH, &setup.editor.el_more, "More:" },
{ TYPE_SWITCH, &setup.editor.el_sokoban, "Sokoban:" },
{ TYPE_SWITCH, &setup.editor.el_supaplex, "Supaplex:" },
byte tape_action[MAX_PLAYERS];
int i;
+ if (level.native_em_level->lev->home == 0) /* all players at home */
+ {
+ GameWon();
+
+ if (!TAPE_IS_STOPPED(tape))
+ TapeStop();
+
+ if (game_status != GAME_MODE_PLAYING)
+ return;
+ }
+
+ if (level.native_em_level->ply1->alive == 0 &&
+ level.native_em_level->ply2->alive == 0) /* all dead */
+ AllPlayersGone = TRUE;
+
+ if (AllPlayersGone && !TAPE_IS_STOPPED(tape))
+ TapeStop();
+
+ /* --- 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);
+#if 1
+ /* !!! CHECK THIS (tape.pausing is always FALSE here!) !!! */
+ if (recorded_player_action == NULL && tape.pausing)
+ return;
+#endif
+
for (i = 0; i < MAX_PLAYERS; i++)
{
summarized_player_action |= stored_player[i].action;
DrawVideoDisplay(VIDEO_STATE_TIME_ON, TapeTime);
}
+ FrameCounter++;
TimeFrames++;
BackToFront();