/***********************************
updated: 1997-04-09 08:46 TT
updated 20-3-1998 LT Added colour changes on base explosion
updated 02-6-1998 HJB copied from 8080bw and removed unneeded code
*
* Author : Tormod Tjaberg
* Created : 1997-04-09
* Description : Sound routines for the 'astinvad' games
*
* The samples were taken from Michael Strutt's (mstrutt@pixie.co.za)
* excellent space invader emulator and converted to signed samples so
* they would work under SEAL. The port info was also gleaned from
* his emulator. These sounds should also work on all the invader games.
*
*/
#include "driver.h"
#include "sound/samples.h"
#include "includes/astinvad.h"
static const char *astinvad_sample_names[] =
{
"*invaders",
"0.wav",
"1.wav",
"2.wav",
"3.wav",
"4.wav",
"5.wav",
"6.wav",
"7.wav",
"8.wav",
0
};
/* sample sound IDs - must match sample file name table above */
enum
{
SND_UFO = 0,
SND_SHOT,
SND_BASEHIT,
SND_INVADERHIT,
SND_FLEET1,
SND_FLEET2,
SND_FLEET3,
SND_FLEET4,
SND_UFOHIT
};
struct Samplesinterface astinvad_samples_interface =
{
6, /* channels */
astinvad_sample_names
};
WRITE8_HANDLER( astinvad_sound1_w )
{
static int state;
int bitsGoneHi = data & ~state;
sound_global_enable(data & 0x20);
if (!(data & 1))
{
sample_stop(0);
}
if (bitsGoneHi & 0x01) sample_start(0, SND_UFO, 1);
if (bitsGoneHi & 0x02) sample_start(1, SND_SHOT, 0);
if (bitsGoneHi & 0x04) sample_start(2, SND_BASEHIT, 0);
if (bitsGoneHi & 0x08) sample_start(3, SND_INVADERHIT, 0);
astinvad_set_screen_red(data & 0x04);
state = data;
}
WRITE8_HANDLER( astinvad_sound2_w )
{
static int state;
int bitsGoneHi = data & ~state;
if (bitsGoneHi & 0x01) sample_start(5, SND_FLEET1, 0);
if (bitsGoneHi & 0x02) sample_start(5, SND_FLEET2, 0);
if (bitsGoneHi & 0x04) sample_start(5, SND_FLEET3, 0);
if (bitsGoneHi & 0x08) sample_start(5, SND_FLEET4, 0);
if (bitsGoneHi & 0x10) sample_start(4, SND_UFOHIT, 0);
flip_screen_set(readinputport(3) & data & 0x20);
state = data;
}
WRITE8_HANDLER( spaceint_sound1_w )
{
static int state;
int bitsGoneHi = data & ~state;
if (!(data & 0x08))
{
sample_stop(0);
}
if (bitsGoneHi & 0x01) sample_start(1, SND_SHOT, 0);
if (bitsGoneHi & 0x02) sample_start(2, SND_BASEHIT, 0);
if (bitsGoneHi & 0x04) sample_start(4, SND_UFOHIT, 0);
if (bitsGoneHi & 0x08) sample_start(0, SND_UFO, 1);
if (bitsGoneHi & 0x10) sample_start(5, SND_FLEET1, 0);
if (bitsGoneHi & 0x20) sample_start(5, SND_FLEET2, 0);
if (bitsGoneHi & 0x40) sample_start(5, SND_FLEET3, 0);
if (bitsGoneHi & 0x80) sample_start(5, SND_FLEET4, 0);
state = data;
}
WRITE8_HANDLER( spaceint_sound2_w )
{
static int state;
int bitsGoneHi = data & ~state;
sound_global_enable(data & 0x02);
if (bitsGoneHi & 0x04) sample_start(3, SND_INVADERHIT, 0);
flip_screen_set(readinputport(3) & data & 0x80);
state = data;
}