return element;
}
-static void IncrementPlayerSokobanFieldsNeeded(struct PlayerInfo *player)
+static void IncrementSokobanFieldsNeeded(void)
{
if (level.sb_fields_needed)
- player->sokoban_fields_still_needed++;
+ local_player->sokoban_fields_still_needed++;
}
-static void IncrementPlayerSokobanObjectsNeeded(struct PlayerInfo *player)
+static void IncrementSokobanObjectsNeeded(void)
{
if (level.sb_objects_needed)
- player->sokoban_objects_still_needed++;
+ local_player->sokoban_objects_still_needed++;
}
-static void DecrementPlayerSokobanFieldsNeeded(struct PlayerInfo *player)
+static void DecrementSokobanFieldsNeeded(void)
{
- if (player->sokoban_fields_still_needed > 0)
- player->sokoban_fields_still_needed--;
+ if (local_player->sokoban_fields_still_needed > 0)
+ local_player->sokoban_fields_still_needed--;
}
-static void DecrementPlayerSokobanObjectsNeeded(struct PlayerInfo *player)
+static void DecrementSokobanObjectsNeeded(void)
{
- if (player->sokoban_objects_still_needed > 0)
- player->sokoban_objects_still_needed--;
+ if (local_player->sokoban_objects_still_needed > 0)
+ local_player->sokoban_objects_still_needed--;
}
static void InitPlayerField(int x, int y, int element, boolean init_game)
break;
case EL_SOKOBAN_FIELD_EMPTY:
- IncrementPlayerSokobanFieldsNeeded(local_player);
+ IncrementSokobanFieldsNeeded();
break;
case EL_SOKOBAN_OBJECT:
- IncrementPlayerSokobanObjectsNeeded(local_player);
+ IncrementSokobanObjectsNeeded();
break;
case EL_STONEBLOCK:
AmoebaCnt2[group_nr]++;
}
-static void PlayerWins(struct PlayerInfo *player)
+static void LevelSolved(void)
{
if (level.game_engine_type == GAME_ENGINE_TYPE_RND &&
local_player->players_still_needed > 0)
game.LevelSolved = TRUE;
- player->GameOver = TRUE;
+ local_player->GameOver = TRUE;
- player->score_final = (level.game_engine_type == GAME_ENGINE_TYPE_EM ?
- level.native_em_level->lev->score :
- level.game_engine_type == GAME_ENGINE_TYPE_MM ?
- game_mm.score :
- player->score);
- player->health_final = (level.game_engine_type == GAME_ENGINE_TYPE_MM ?
- MM_HEALTH(game_mm.laser_overload_value) :
- player->health);
+ local_player->score_final = (level.game_engine_type == GAME_ENGINE_TYPE_EM ?
+ level.native_em_level->lev->score :
+ level.game_engine_type == GAME_ENGINE_TYPE_MM ?
+ game_mm.score :
+ local_player->score);
+ local_player->health_final = (level.game_engine_type == GAME_ENGINE_TYPE_MM ?
+ MM_HEALTH(game_mm.laser_overload_value) :
+ local_player->health);
game.LevelSolved_CountingTime = (game.no_time_limit ? TimePlayed : TimeLeft);
- game.LevelSolved_CountingScore = player->score_final;
- game.LevelSolved_CountingHealth = player->health_final;
+ game.LevelSolved_CountingScore = local_player->score_final;
+ game.LevelSolved_CountingHealth = local_player->health_final;
}
void GameWon(void)
local_player->friends_still_needed--;
if (!local_player->friends_still_needed &&
!local_player->GameOver && AllPlayersGone)
- PlayerWins(local_player);
+ LevelSolved();
return;
}
ExitPlayer(&stored_player[i]);
if (AllPlayersGone)
- PlayerWins(local_player);
+ LevelSolved();
break;
}
if (game_em.level_solved &&
!game_em.game_over) // game won
{
- PlayerWins(local_player);
+ LevelSolved();
game_em.game_over = TRUE;
if (game_sp.level_solved &&
!game_sp.game_over) // game won
{
- PlayerWins(local_player);
+ LevelSolved();
game_sp.game_over = TRUE;
if (game_mm.level_solved &&
!game_mm.game_over) // game won
{
- PlayerWins(local_player);
+ LevelSolved();
game_mm.game_over = TRUE;
if ((local_player->friends_still_needed == 0 ||
IS_SP_ELEMENT(Feld[jx][jy])) &&
AllPlayersGone)
- PlayerWins(local_player);
+ LevelSolved();
}
// this breaks one level: "machine", level 000
{
Back[x][y] = EL_SOKOBAN_FIELD_EMPTY;
- IncrementPlayerSokobanFieldsNeeded(local_player);
- IncrementPlayerSokobanObjectsNeeded(local_player);
+ IncrementSokobanFieldsNeeded();
+ IncrementSokobanObjectsNeeded();
}
if (Feld[nextx][nexty] == EL_SOKOBAN_FIELD_EMPTY)
{
Back[nextx][nexty] = EL_SOKOBAN_FIELD_EMPTY;
- DecrementPlayerSokobanFieldsNeeded(local_player);
- DecrementPlayerSokobanObjectsNeeded(local_player);
+ DecrementSokobanFieldsNeeded();
+ DecrementSokobanObjectsNeeded();
// sokoban object was pushed from empty field to sokoban field
if (Back[x][y] == EL_EMPTY)
{
local_player->players_still_needed = 0;
- PlayerWins(local_player);
+ LevelSolved();
PlayLevelSound(x, y, SND_GAME_SOKOBAN_SOLVING);
}