#define DX_TIME (DX + XX_TIME)
#define DY_TIME (DY + YY_TIME)
+#if 0
#define IS_LOOP_SOUND(s) ((s) == SND_BD_MAGIC_WALL_RUNNING || \
(s) == SND_BD_BUTTERFLY_MOVING || \
(s) == SND_BD_FIREFLY_MOVING || \
(s) == SND_PIG_MOVING || \
(s) == SND_DRAGON_MOVING || \
(s) == SND_DRAGON_BREATHING_FIRE)
+#endif
/* values for player movement speed (which is in fact a delay value) */
#define MOVE_DELAY_NORMAL_SPEED 8
static struct GadgetInfo *game_gadget[NUM_GAME_BUTTONS];
+static boolean is_loop_sound[NUM_SOUND_EFFECTS];
+static boolean is_loop_sound_initialized = FALSE;
+static int loop_sounds[] =
+{
+ SND_BD_MAGIC_WALL_RUNNING,
+ SND_BD_BUTTERFLY_MOVING,
+ SND_BD_FIREFLY_MOVING,
+ SND_SP_SNIKSNAK_MOVING,
+ SND_SP_ELECTRON_MOVING,
+ SND_DYNAMITE_BURNING,
+ SND_BUG_MOVING,
+ SND_SPACESHIP_MOVING,
+ SND_YAMYAM_MOVING,
+ SND_YAMYAM_WAITING,
+ SND_ROBOT_WHEEL_RUNNING,
+ SND_MAGIC_WALL_RUNNING,
+ SND_BALLOON_MOVING,
+ SND_MOLE_MOVING,
+ SND_TIMEGATE_WHEEL_RUNNING,
+ SND_CONVEYOR_BELT_RUNNING,
+ SND_DYNABOMB_BURNING,
+ SND_PACMAN_MOVING,
+ SND_PENGUIN_MOVING,
+ SND_PIG_MOVING,
+ SND_DRAGON_MOVING,
+ SND_DRAGON_BREATHING_FIRE
+};
+
+#define IS_LOOP_SOUND(x) (is_loop_sound[x])
+
#ifdef DEBUG
}
}
+ /* initialize sound effect properties */
+ if (!is_loop_sound_initialized)
+ {
+ int i;
+
+ for (i=0; i<NUM_SOUND_EFFECTS; i++)
+ is_loop_sound[i] = FALSE;
+
+ for (i=0; i<SIZEOF_ARRAY_INT(loop_sounds); i++)
+ is_loop_sound[loop_sounds[i]] = TRUE;
+
+ is_loop_sound_initialized = TRUE;
+ }
+
game.version = (tape.playing ? tape.game_version : level.game_version);
game.emulation = (emulate_bd ? EMU_BOULDERDASH :
emulate_sb ? EMU_SOKOBAN :
{
if (!tape.playing && setup.sound_loops)
PlaySoundExt(SND_GAME_LEVELTIME_BONUS, PSND_MAX_VOLUME, PSND_MAX_RIGHT,
- PSND_LOOP);
+ SND_CTRL_PLAY_LOOP);
while (TimeLeft > 0)
{
{
if (!tape.playing && setup.sound_loops)
PlaySoundExt(SND_GAME_LEVELTIME_BONUS, PSND_MAX_VOLUME, PSND_MAX_RIGHT,
- PSND_LOOP);
+ SND_CTRL_PLAY_LOOP);
while (TimePlayed < 999)
{
return TRUE;
}
-void PlaySoundLevel(int x, int y, int sound_nr)
+void PlaySoundLevel(int x, int y, int nr)
{
int sx = SCREENX(x), sy = SCREENY(y);
- int volume, stereo;
+ int volume, stereo_position;
int silence_distance = 8;
+ int type = (IS_LOOP_SOUND(nr) ? SND_CTRL_PLAY_LOOP : SND_CTRL_PLAY_SOUND);
- if ((!setup.sound_simple && !IS_LOOP_SOUND(sound_nr)) ||
- (!setup.sound_loops && IS_LOOP_SOUND(sound_nr)))
+ if ((!setup.sound_simple && !IS_LOOP_SOUND(nr)) ||
+ (!setup.sound_loops && IS_LOOP_SOUND(nr)))
return;
if (!IN_LEV_FIELD(x, y) ||
- sx < -silence_distance || sx >= SCR_FIELDX+silence_distance ||
- sy < -silence_distance || sy >= SCR_FIELDY+silence_distance)
+ sx < -silence_distance || sx >= SCR_FIELDX + silence_distance ||
+ sy < -silence_distance || sy >= SCR_FIELDY + silence_distance)
return;
volume = PSND_MAX_VOLUME;
#if !defined(PLATFORM_MSDOS)
- stereo = (sx - SCR_FIELDX/2) * 12;
+ stereo_position = (sx - SCR_FIELDX / 2) * 12;
#else
- stereo = PSND_MIDDLE + (2 * sx - (SCR_FIELDX - 1)) * 5;
- if (stereo > PSND_MAX_RIGHT)
- stereo = PSND_MAX_RIGHT;
- if (stereo < PSND_MAX_LEFT)
- stereo = PSND_MAX_LEFT;
+ stereo_position = PSND_MIDDLE + (2 * sx - (SCR_FIELDX - 1)) * 5;
+ if (stereo_position > PSND_MAX_RIGHT)
+ stereo_position = PSND_MAX_RIGHT;
+ if (stereo_position < PSND_MAX_LEFT)
+ stereo_position = PSND_MAX_LEFT;
#endif
if (!IN_SCR_FIELD(sx, sy))
volume -= volume * (dx > dy ? dx : dy) / silence_distance;
}
- PlaySoundExt(sound_nr, volume, stereo, PSND_NO_LOOP);
+ PlaySoundExt(nr, volume, stereo_position, type);
}
void RaiseScore(int value)