/***********************************************************
* Rocks'n'Diamonds -- McDuffin Strikes Back! *
*----------------------------------------------------------*
-* (c) 1995-2001 Artsoft Entertainment *
+* (c) 1995-2002 Artsoft Entertainment *
* Holger Schemel *
* Detmolder Strasse 189 *
* 33604 Bielefeld *
{ ".burning", SND_ACTION_BURNING, TRUE },
{ ".growing", SND_ACTION_UNKNOWN, TRUE },
{ ".attacking", SND_ACTION_UNKNOWN, TRUE },
+ { ".activated", SND_ACTION_UNKNOWN, TRUE },
/* other (non-loop) sound actions are optional */
{ ".stepping", SND_ACTION_MOVING, FALSE }, /* discrete moving */
{ NULL, 0, 0 },
};
static int element_action_sound[NUM_LEVEL_ELEMENTS][NUM_SND_ACTIONS];
-static boolean is_loop_sound[NUM_SOUND_EFFECTS];
+static boolean is_loop_sound[NUM_SOUND_FILES];
#define IS_LOOP_SOUND(x) (is_loop_sound[x])
void InitGameSound()
{
- int sound_effect_properties[NUM_SOUND_EFFECTS];
+ int sound_effect_properties[NUM_SOUND_FILES];
int i, j;
#if 0
for (j=0; j<NUM_LEVEL_ELEMENTS; j++)
element_action_sound[j][i] = -1;
- for (i=0; i<NUM_SOUND_EFFECTS; i++)
+ for (i=0; i<NUM_SOUND_FILES; i++)
{
- int len_effect_text = strlen(sound_effects[i].text);
+ int len_effect_text = strlen(sound_files[i].token);
sound_effect_properties[i] = SND_ACTION_UNKNOWN;
is_loop_sound[i] = FALSE;
/* determine all loop sounds and identify certain sound classes */
- j = 0;
- while (sound_action_properties[j].text)
+ for (j=0; sound_action_properties[j].text; j++)
{
int len_action_text = strlen(sound_action_properties[j].text);
if (len_action_text < len_effect_text &&
- strcmp(&sound_effects[i].text[len_effect_text - len_action_text],
+ strcmp(&sound_files[i].token[len_effect_text - len_action_text],
sound_action_properties[j].text) == 0)
{
sound_effect_properties[i] = sound_action_properties[j].value;
if (sound_action_properties[j].is_loop)
is_loop_sound[i] = TRUE;
}
-
- j++;
}
/* associate elements and some selected sound actions */
int len_class_text = strlen(element_info[j].sound_class_name);
if (len_class_text + 1 < len_effect_text &&
- strncmp(sound_effects[i].text,
+ strncmp(sound_files[i].token,
element_info[j].sound_class_name, len_class_text) == 0 &&
- sound_effects[i].text[len_class_text] == '.')
+ sound_files[i].token[len_class_text] == '.')
{
int sound_action_value = sound_effect_properties[i];
#if 0
printf("level %d: level version == %06d\n", level_nr, level.game_version);
- printf(" tape version == %06d [%s]\n",
- tape.engine_version, (tape.playing ? "PLAYING" : "RECORDING"));
+ printf(" tape version == %06d [%s] [file: %06d]\n",
+ tape.engine_version, (tape.playing ? "PLAYING" : "RECORDING"),
+ tape.file_version);
printf(" => game.engine_version == %06d\n", game.engine_version);
#endif
else if (element == EL_SHIELD_PASSIVE)
{
DrawGraphicAnimation(x, y, GFX_SHIELD_PASSIVE, 6, 4, ANIM_NORMAL);
+#if 0
if (!(FrameCounter % 4))
PlaySoundLevel(x, y, SND_SHIELD_PASSIVE_ACTIVATED);
+#endif
}
else if (element == EL_SHIELD_ACTIVE)
{
DrawGraphicAnimation(x, y, GFX_SHIELD_ACTIVE, 6, 4, ANIM_NORMAL);
+#if 0
if (!(FrameCounter % 4))
PlaySoundLevel(x, y, SND_SHIELD_ACTIVE_ACTIVATED);
+#endif
}
if (game.magic_wall_active)
CloseAllOpenTimegates();
}
+ for (i=0; i<MAX_PLAYERS; i++)
+ {
+ struct PlayerInfo *player = &stored_player[i];
+
+ if (SHIELD_ON(player))
+ {
+ if (player->shield_active_time_left)
+ PlaySoundLevel(player->jx, player->jy, SND_SHIELD_ACTIVE_ACTIVATED);
+ else if (player->shield_passive_time_left)
+ PlaySoundLevel(player->jx, player->jy, SND_SHIELD_PASSIVE_ACTIVATED);
+ }
+ }
+
if (TimeFrames >= (1000 / GameFrameDelay))
{
TimeFrames = 0;
for (i=0; i<MAX_PLAYERS; i++)
{
- if (SHIELD_ON(&stored_player[i]))
+ struct PlayerInfo *player = &stored_player[i];
+
+ if (SHIELD_ON(player))
{
- stored_player[i].shield_passive_time_left--;
+ player->shield_passive_time_left--;
- if (stored_player[i].shield_active_time_left > 0)
- stored_player[i].shield_active_time_left--;
+ if (player->shield_active_time_left > 0)
+ player->shield_active_time_left--;
}
}
void PlaySoundLevel(int x, int y, int nr)
{
- static int loop_sound_frame[NUM_SOUND_EFFECTS];
- static int loop_sound_volume[NUM_SOUND_EFFECTS];
+ static int loop_sound_frame[NUM_SOUND_FILES];
+ static int loop_sound_volume[NUM_SOUND_FILES];
int sx = SCREENX(x), sy = SCREENY(y);
int volume, stereo_position;
int max_distance = 8;