projects
/
rocksndiamonds.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
fixed solving level when playing multi-player games
[rocksndiamonds.git]
/
src
/
game.c
diff --git
a/src/game.c
b/src/game.c
index 5a97b201b510b71676ae0f3a64253e5d8a5098ba..4edcf7e8c16fe8cf0e9f902014b4f35c45a6832a 100644
(file)
--- a/
src/game.c
+++ b/
src/game.c
@@
-1112,6
+1112,7
@@
void TestIfGoodThingGetsHitByBadThing(int, int, int);
void KillPlayer(struct PlayerInfo *);
void BuryPlayer(struct PlayerInfo *);
void RemovePlayer(struct PlayerInfo *);
void KillPlayer(struct PlayerInfo *);
void BuryPlayer(struct PlayerInfo *);
void RemovePlayer(struct PlayerInfo *);
+void RemovePlayerWithCleanup(struct PlayerInfo *);
static int getInvisibleActiveFromInvisibleElement(int);
static int getInvisibleFromInvisibleActiveElement(int);
static int getInvisibleActiveFromInvisibleElement(int);
static int getInvisibleFromInvisibleActiveElement(int);
@@
-4696,22
+4697,33
@@
void GameEnd()
{
level_nr++; /* advance to next level */
TapeErase(); /* start with empty tape */
{
level_nr++; /* advance to next level */
TapeErase(); /* start with empty tape */
+
+ if (setup.auto_play_next_level)
+ {
+ LoadLevel(level_nr);
+
+ SaveLevelSetup_SeriesInfo();
+ }
}
hi_pos = NewHiScore(last_level_nr);
}
hi_pos = NewHiScore(last_level_nr);
- if (hi_pos >= 0)
+ if (hi_pos >= 0
&& !setup.skip_scores_after_game
)
{
SetGameStatus(GAME_MODE_SCORES);
DrawHallOfFame(last_level_nr, hi_pos);
}
{
SetGameStatus(GAME_MODE_SCORES);
DrawHallOfFame(last_level_nr, hi_pos);
}
- else
+ else
if (!setup.auto_play_next_level || !setup.increment_levels)
{
SetGameStatus(GAME_MODE_MAIN);
DrawMainMenu();
}
{
SetGameStatus(GAME_MODE_MAIN);
DrawMainMenu();
}
+ else
+ {
+ StartGameActions(network.enabled, setup.autorecord, level.random_seed);
+ }
}
int NewHiScore(int level_nr)
}
int NewHiScore(int level_nr)
@@
-12630,12
+12642,12
@@
void ScrollPlayer(struct PlayerInfo *player, int mode)
Feld[jx][jy] == EL_SP_EXIT_OPEN ||
Feld[jx][jy] == EL_SP_EXIT_OPENING) /* <-- special case */
{
Feld[jx][jy] == EL_SP_EXIT_OPEN ||
Feld[jx][jy] == EL_SP_EXIT_OPENING) /* <-- special case */
{
- DrawPlayer(player); /* needed here only to cleanup last field */
- RemovePlayer(player);
+ RemovePlayerWithCleanup(player);
- if (local_player->friends_still_needed == 0 ||
- IS_SP_ELEMENT(Feld[jx][jy]))
- PlayerWins(player);
+ if ((local_player->friends_still_needed == 0 ||
+ IS_SP_ELEMENT(Feld[jx][jy])) &&
+ AllPlayersGone)
+ PlayerWins(local_player);
}
/* this breaks one level: "machine", level 000 */
}
/* this breaks one level: "machine", level 000 */
@@
-13391,6
+13403,12
@@
void RemovePlayer(struct PlayerInfo *player)
ExitY = ZY = jy;
}
ExitY = ZY = jy;
}
+void RemovePlayerWithCleanup(struct PlayerInfo *player)
+{
+ DrawPlayer(player); /* needed here only to cleanup last field */
+ RemovePlayer(player);
+}
+
static void setFieldForSnapping(int x, int y, int element, int direction)
{
struct ElementInfo *ei = &element_info[element];
static void setFieldForSnapping(int x, int y, int element, int direction)
{
struct ElementInfo *ei = &element_info[element];