X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fgame.c;h=06c88af1c1a5f03bede1d87faf811d2b4d3af2c8;hb=91afd13180ad610e2a6cbef32b85677cf8148864;hp=9dca25854cf41ca1b13b79267f3d8323b54acaf4;hpb=0d0e1a63d6b14109b64805bcb1a45ddf469ba35d;p=rocksndiamonds.git diff --git a/src/game.c b/src/game.c index 9dca2585..06c88af1 100644 --- a/src/game.c +++ b/src/game.c @@ -658,6 +658,8 @@ void InitGame() player->is_moving = FALSE; player->is_waiting = FALSE; + player->is_digging = FALSE; + player->is_collecting = FALSE; player->move_delay = game.initial_move_delay; player->move_delay_value = game.initial_move_delay_value; @@ -941,7 +943,7 @@ void InitGame() OpenDoor(DOOR_OPEN_ALL); - PlaySoundStereo(SND_GAME_STARTING, SOUND_MAX_RIGHT); + PlaySoundStereo(SND_GAME_STARTING, SOUND_MIDDLE); if (setup.sound_music) PlayMusic(level_nr); @@ -1097,18 +1099,18 @@ void GameWon() local_player->LevelSolved = FALSE; - PlaySoundStereo(SND_GAME_WINNING, SOUND_MAX_RIGHT); + PlaySoundStereo(SND_GAME_WINNING, SOUND_MIDDLE); if (TimeLeft) { if (!tape.playing && setup.sound_loops) - PlaySoundExt(SND_GAME_LEVELTIME_BONUS, SOUND_MAX_VOLUME, SOUND_MAX_RIGHT, + PlaySoundExt(SND_GAME_LEVELTIME_BONUS, SOUND_MAX_VOLUME, SOUND_MIDDLE, SND_CTRL_PLAY_LOOP); while (TimeLeft > 0) { if (!tape.playing && !setup.sound_loops) - PlaySoundStereo(SND_GAME_LEVELTIME_BONUS, SOUND_MAX_RIGHT); + PlaySoundStereo(SND_GAME_LEVELTIME_BONUS, SOUND_MIDDLE); if (TimeLeft > 0 && !(TimeLeft % 10)) RaiseScore(level.score[SC_ZEITBONUS]); if (TimeLeft > 100 && !(TimeLeft % 10)) @@ -1128,13 +1130,13 @@ void GameWon() else if (level.time == 0) /* level without time limit */ { if (!tape.playing && setup.sound_loops) - PlaySoundExt(SND_GAME_LEVELTIME_BONUS, SOUND_MAX_VOLUME, SOUND_MAX_RIGHT, + PlaySoundExt(SND_GAME_LEVELTIME_BONUS, SOUND_MAX_VOLUME, SOUND_MIDDLE, SND_CTRL_PLAY_LOOP); while (TimePlayed < 999) { if (!tape.playing && !setup.sound_loops) - PlaySoundStereo(SND_GAME_LEVELTIME_BONUS, SOUND_MAX_RIGHT); + PlaySoundStereo(SND_GAME_LEVELTIME_BONUS, SOUND_MIDDLE); if (TimePlayed < 999 && !(TimePlayed % 10)) RaiseScore(level.score[SC_ZEITBONUS]); if (TimePlayed < 900 && !(TimePlayed % 10)) @@ -1382,6 +1384,7 @@ static int MovingOrBlocked2ElementIfNotLeaving(int x, int y) static void RemoveField(int x, int y) { Feld[x][y] = EL_EMPTY; + GfxElement[x][y] = EL_EMPTY; MovPos[x][y] = 0; MovDir[x][y] = 0; MovDelay[x][y] = 0; @@ -1615,6 +1618,7 @@ void Explode(int ex, int ey, int phase, int mode) } Feld[x][y] = EL_EXPLOSION; + GfxElement[x][y] = EL_EMPTY; MovDir[x][y] = MovPos[x][y] = 0; AmoebaNr[x][y] = 0; ExplodePhase[x][y] = 1; @@ -3141,7 +3145,7 @@ void StartMoving(int x, int y) Feld[x][y] = EL_EMPTY; DrawLevelField(x, y); - PlaySoundLevel(newx, newy, SND_CLASS_EXIT_PASSING); + PlaySoundLevel(newx, newy, SND_PENGUIN_PASSING); if (IN_SCR_FIELD(SCREENX(newx), SCREENY(newy))) DrawGraphicThruMask(SCREENX(newx),SCREENY(newy), el2img(element), 0); @@ -4879,7 +4883,7 @@ void GameActions() TimeLeft--; if (TimeLeft <= 10 && setup.time_limit) - PlaySoundStereo(SND_GAME_RUNNING_OUT_OF_TIME, SOUND_MAX_RIGHT); + PlaySoundStereo(SND_GAME_RUNNING_OUT_OF_TIME, SOUND_MIDDLE); DrawText(DX_TIME, DY_TIME, int2str(TimeLeft, 3), FONT_TEXT_2); @@ -5664,7 +5668,10 @@ int DigField(struct PlayerInfo *player, int element; if (player->MovPos == 0) + { player->is_digging = FALSE; + player->is_collecting = FALSE; + } if (player->MovPos == 0) player->Pushing = FALSE; @@ -5721,11 +5728,11 @@ int DigField(struct PlayerInfo *player, case EL_SP_BASE: case EL_SP_BUGGY_BASE: case EL_SP_BUGGY_BASE_ACTIVATING: + RemoveField(x, y); #if 1 if (mode != DF_SNAP && element == EL_SAND) - GfxElement[x][y] = Feld[x][y]; + GfxElement[x][y] = EL_SAND; #endif - RemoveField(x, y); PlaySoundLevelElementAction(x, y, element, ACTION_DIGGING); break; @@ -5768,7 +5775,7 @@ int DigField(struct PlayerInfo *player, TimeLeft += 10; DrawText(DX_TIME, DY_TIME, int2str(TimeLeft, 3), FONT_TEXT_2); } - PlaySoundStereo(SND_EXTRA_TIME_COLLECTING, SOUND_MAX_RIGHT); + PlaySoundStereo(SND_EXTRA_TIME_COLLECTING, SOUND_MIDDLE); break; case EL_SHIELD_NORMAL: @@ -6202,7 +6209,7 @@ int DigField(struct PlayerInfo *player, TimeLeft += 10; DrawText(DX_TIME, DY_TIME, int2str(TimeLeft, 3), FONT_TEXT_2); DrawLevelField(x, y); - PlaySoundStereo(SND_TIME_ORB_FULL_COLLECTING, SOUND_MAX_RIGHT); + PlaySoundStereo(SND_TIME_ORB_FULL_COLLECTING, SOUND_MIDDLE); return MF_ACTION; break; @@ -6368,8 +6375,13 @@ int DigField(struct PlayerInfo *player, player->push_delay = 0; - if (Feld[x][y] != element) /* really digged something */ - player->is_digging = TRUE; + if (Feld[x][y] != element) /* really digged/collected something */ + { + if (GfxElement[x][y] == EL_SAND) + player->is_digging = TRUE; + else + player->is_collecting = TRUE; + } return MF_MOVING; } @@ -6393,7 +6405,10 @@ boolean SnapField(struct PlayerInfo *player, int dx, int dy) player->snapped = FALSE; if (player->MovPos == 0) + { player->is_digging = FALSE; + player->is_collecting = FALSE; + } return FALSE; } @@ -6411,6 +6426,8 @@ boolean SnapField(struct PlayerInfo *player, int dx, int dy) player->snapped = TRUE; player->is_digging = FALSE; + player->is_collecting = FALSE; + DrawLevelField(x, y); BackToFront();