summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--aircraft_cmd.c1
-rw-r--r--airport_gui.c1
-rw-r--r--bridge_gui.c1
-rw-r--r--disaster_cmd.c1
-rw-r--r--dock_gui.c1
-rw-r--r--economy.c1
-rw-r--r--functions.h5
-rw-r--r--industry_cmd.c1
-rw-r--r--main_gui.c1
-rw-r--r--misc_gui.c1
-rw-r--r--news_gui.c1
-rw-r--r--players.c1
-rw-r--r--rail_cmd.c1
-rw-r--r--rail_gui.c1
-rw-r--r--road_cmd.c1
-rw-r--r--road_gui.c1
-rw-r--r--roadveh_cmd.c1
-rw-r--r--ship_cmd.c2
-rw-r--r--smallmap_gui.c1
-rw-r--r--sound.c165
-rw-r--r--sound.h80
-rw-r--r--terraform_gui.c1
-rw-r--r--train_cmd.c14
-rw-r--r--tree_cmd.c1
-rw-r--r--tunnelbridge_cmd.c1
-rw-r--r--vehicle.c1
-rw-r--r--water_cmd.c1
27 files changed, 202 insertions, 86 deletions
diff --git a/aircraft_cmd.c b/aircraft_cmd.c
index c0b9a73a8..3e34c6105 100644
--- a/aircraft_cmd.c
+++ b/aircraft_cmd.c
@@ -6,6 +6,7 @@
#include "station.h"
#include "news.h"
#include "gfx.h"
+#include "sound.h"
#include "player.h"
#include "airport.h"
diff --git a/airport_gui.c b/airport_gui.c
index 94fc4eda4..95238f4e2 100644
--- a/airport_gui.c
+++ b/airport_gui.c
@@ -5,6 +5,7 @@
#include "gui.h"
#include "viewport.h"
#include "gfx.h"
+#include "sound.h"
#include "command.h"
#include "vehicle.h"
#include "station.h"
diff --git a/bridge_gui.c b/bridge_gui.c
index a417166bf..dbb9ef642 100644
--- a/bridge_gui.c
+++ b/bridge_gui.c
@@ -6,6 +6,7 @@
#include "viewport.h"
#include "gfx.h"
#include "command.h"
+#include "sound.h"
static struct BridgeData {
int count;
diff --git a/disaster_cmd.c b/disaster_cmd.c
index 8f9d446fc..755099893 100644
--- a/disaster_cmd.c
+++ b/disaster_cmd.c
@@ -9,6 +9,7 @@
#include "industry.h"
#include "player.h"
#include "airport_movement.h"
+#include "sound.h"
static void DisasterClearSquare(uint tile)
{
diff --git a/dock_gui.c b/dock_gui.c
index 2cca3dec2..553ba6edc 100644
--- a/dock_gui.c
+++ b/dock_gui.c
@@ -5,6 +5,7 @@
#include "gui.h"
#include "viewport.h"
#include "gfx.h"
+#include "sound.h"
#include "command.h"
static void ShowBuildDockStationPicker();
diff --git a/economy.c b/economy.c
index de2e4c19b..b8f5e50de 100644
--- a/economy.c
+++ b/economy.c
@@ -12,6 +12,7 @@
#include "industry.h"
#include "town.h"
#include "network.h"
+#include "sound.h"
void UpdatePlayerHouse(Player *p, uint score)
{
diff --git a/functions.h b/functions.h
index 7d729c0ee..b9ed39a32 100644
--- a/functions.h
+++ b/functions.h
@@ -55,11 +55,6 @@ int GetParamInt8();
int GetParamUint16();
-/* sound.c */
-void SndPlayTileFx(int sound, TileIndex tile);
-void SndPlayVehicleFx(int sound, Vehicle *v);
-void SndPlayFx(int sound);
-
/* clear_land.c */
void DrawHillyLandTile(TileInfo *ti);
void DrawClearLandTile(TileInfo *ti, byte set);
diff --git a/industry_cmd.c b/industry_cmd.c
index 6fe5e0c73..c64c92b5a 100644
--- a/industry_cmd.c
+++ b/industry_cmd.c
@@ -8,6 +8,7 @@
#include "news.h"
#include "saveload.h"
#include "economy.h"
+#include "sound.h"
byte _industry_sound_ctr;
TileIndex _industry_sound_tile;
diff --git a/main_gui.c b/main_gui.c
index 5f62fa956..89ef09a59 100644
--- a/main_gui.c
+++ b/main_gui.c
@@ -11,6 +11,7 @@
#include "town.h"
#include "vehicle.h"
#include "console.h"
+#include "sound.h"
#include "table/animcursors.h"
diff --git a/misc_gui.c b/misc_gui.c
index a111ccbe2..89a70790f 100644
--- a/misc_gui.c
+++ b/misc_gui.c
@@ -9,6 +9,7 @@
#include "command.h"
#include "player.h"
#include "town.h"
+#include "sound.h"
#include "hal.h" // Fios items
diff --git a/news_gui.c b/news_gui.c
index 115945a90..67e3244f9 100644
--- a/news_gui.c
+++ b/news_gui.c
@@ -7,6 +7,7 @@
#include "gfx.h"
#include "news.h"
#include "vehicle.h"
+#include "sound.h"
/* News system
News system is realized as a FIFO queue (in an array)
diff --git a/players.c b/players.c
index 3c72f625b..2050969c1 100644
--- a/players.c
+++ b/players.c
@@ -9,6 +9,7 @@
#include "saveload.h"
#include "command.h"
#include "ai.h"
+#include "sound.h"
extern void StartupEconomy();
diff --git a/rail_cmd.c b/rail_cmd.c
index 3965322f9..18194af21 100644
--- a/rail_cmd.c
+++ b/rail_cmd.c
@@ -5,6 +5,7 @@
#include "command.h"
#include "pathfind.h"
#include "town.h"
+#include "sound.h"
void ShowTrainDepotWindow(uint tile);
diff --git a/rail_gui.c b/rail_gui.c
index 83ce76da0..880153d27 100644
--- a/rail_gui.c
+++ b/rail_gui.c
@@ -5,6 +5,7 @@
#include "gui.h"
#include "viewport.h"
#include "gfx.h"
+#include "sound.h"
#include "command.h"
#include "vehicle.h"
diff --git a/road_cmd.c b/road_cmd.c
index 8f283ac4c..fbde98002 100644
--- a/road_cmd.c
+++ b/road_cmd.c
@@ -7,6 +7,7 @@
#include "town.h"
#include "gfx.h"
#include "table/directions.h"
+#include "sound.h"
/* When true, GetTrackStatus for roads will treat roads under reconstruction
* as normal roads instead of impassable. This is used when detecting whether
diff --git a/road_gui.c b/road_gui.c
index 0488e0308..c7779b878 100644
--- a/road_gui.c
+++ b/road_gui.c
@@ -5,6 +5,7 @@
#include "gui.h"
#include "viewport.h"
#include "gfx.h"
+#include "sound.h"
#include "command.h"
static void ShowBusStationPicker();
diff --git a/roadveh_cmd.c b/roadveh_cmd.c
index 6255cafd6..30e897897 100644
--- a/roadveh_cmd.c
+++ b/roadveh_cmd.c
@@ -8,6 +8,7 @@
#include "gfx.h"
#include "pathfind.h"
#include "player.h"
+#include "sound.h"
void ShowRoadVehViewWindow(Vehicle *v);
diff --git a/ship_cmd.c b/ship_cmd.c
index 2877939fb..1cc53d45c 100644
--- a/ship_cmd.c
+++ b/ship_cmd.c
@@ -9,7 +9,7 @@
#include "engine.h"
#include "gui.h"
#include "player.h"
-
+#include "sound.h"
static const uint16 _ship_sprites[] = {0x0E5D, 0x0E55, 0x0E65, 0x0E6D};
static const byte _ship_sometracks[4] = {0x19, 0x16, 0x25, 0x2A};
diff --git a/smallmap_gui.c b/smallmap_gui.c
index 6cdf6b89e..d76805ddf 100644
--- a/smallmap_gui.c
+++ b/smallmap_gui.c
@@ -7,6 +7,7 @@
#include "player.h"
#include "vehicle.h"
#include "town.h"
+#include "sound.h"
static const Widget _smallmap_megabig_widgets[] = {
{ WWT_TEXTBTN, 13, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW},
diff --git a/sound.c b/sound.c
index fe42639ef..6bf6a6884 100644
--- a/sound.c
+++ b/sound.c
@@ -6,13 +6,13 @@
#include "viewport.h"
#include "fileio.h"
-typedef struct {
+typedef struct MixerChannel {
// Mixer
Mixer *mx;
bool active;
// pointer to allocated buffer memory
- void *memory;
+ int8 *memory;
// current position in memory
uint32 pos;
@@ -27,14 +27,13 @@ typedef struct {
uint flags;
} MixerChannel;
-typedef struct FileEntry FileEntry;
-struct FileEntry {
+typedef struct FileEntry {
uint32 file_offset;
uint32 file_size;
uint16 rate;
uint8 bits_per_sample;
uint8 channels;
-};
+} FileEntry;
struct Mixer {
uint32 play_rate;
@@ -53,8 +52,6 @@ enum {
#define SOUND_SLOT 31
-FILE *out;
-
static void mix_int8_to_int16(MixerChannel *sc, int16 *buffer, uint samples)
{
int8 *b;
@@ -67,7 +64,7 @@ static void mix_int8_to_int16(MixerChannel *sc, int16 *buffer, uint samples)
sc->samples_left -= samples;
assert(samples > 0);
- b = (int8*)sc->memory + sc->pos;
+ b = sc->memory + sc->pos;
frac_pos = sc->frac_pos;
frac_speed = sc->frac_speed;
volume_left = sc->volume_left;
@@ -76,11 +73,11 @@ static void mix_int8_to_int16(MixerChannel *sc, int16 *buffer, uint samples)
if (frac_speed == 0x10000) {
// Special case when frac_speed is 0x10000
do {
- buffer[0]+= *b * volume_left >> 8;
- buffer[1]+= *b * volume_right >> 8;
+ buffer[0] += *b * volume_left >> 8;
+ buffer[1] += *b * volume_right >> 8;
b++;
buffer += 2;
- } while (--samples);
+ } while (--samples > 0);
} else {
do {
buffer[0] += *b * volume_left >> 8;
@@ -89,52 +86,50 @@ static void mix_int8_to_int16(MixerChannel *sc, int16 *buffer, uint samples)
frac_pos += frac_speed;
b += frac_pos >> 16;
frac_pos &= 0xffff;
- } while (--samples);
+ } while (--samples > 0);
}
sc->frac_pos = frac_pos;
- sc->pos = b - (int8*)sc->memory;
+ sc->pos = b - sc->memory;
}
static void MxCloseChannel(MixerChannel *mc)
{
- void *mem = mc->memory;
+ if (mc->flags & MX_AUTOFREE) free(mc->memory);
mc->memory = NULL;
mc->active = false;
-
- if (mc->flags & MX_AUTOFREE)
- free(mem);
}
void MxMixSamples(Mixer *mx, void *buffer, uint samples)
{
- int i;
MixerChannel *mc;
// Clear the buffer
- memset(buffer, 0, sizeof(int16)*2*samples);
+ memset(buffer, 0, sizeof(int16) * 2 * samples);
// Mix each channel
- for(i=0,mc=mx->channels; i!=lengthof(mx->channels); i++,mc++) {
+ for (mc = mx->channels; mc != endof(mx->channels); mc++) {
if (mc->active) {
- mix_int8_to_int16(mc, (int16*)buffer, samples);
- if (mc->samples_left == 0) {
- MxCloseChannel(mc);
- }
+ mix_int8_to_int16(mc, buffer, samples);
+ if (mc->samples_left == 0) MxCloseChannel(mc);
}
}
-// if (out == NULL)
-// out = fopen("d:\\dump.raw", "wb");
-// fwrite(buffer, samples*4, 1, out);
+ #if 0
+ {
+ static FILE *out = NULL;
+ if (out == NULL)
+ out = fopen("d:\\dump.raw", "wb");
+ fwrite(buffer, samples * 4, 1, out);
+ }
+ #endif
}
static MixerChannel *MxAllocateChannel(Mixer *mx)
{
- int i;
MixerChannel *mc;
- for(i=0,mc=mx->channels; i!=lengthof(mx->channels); i++,mc++)
- if (!mc->memory) {
+ for (mc = mx->channels; mc != endof(mx->channels); mc++)
+ if (mc->memory == NULL) {
mc->active = false;
mc->mx = mx;
return mc;
@@ -142,18 +137,20 @@ static MixerChannel *MxAllocateChannel(Mixer *mx)
return NULL;
}
-static void MxSetChannelRawSrc(MixerChannel *mc, void *mem, uint size, uint rate, uint flags)
+static void MxSetChannelRawSrc(MixerChannel *mc, int8 *mem, uint size, uint rate, uint flags)
{
mc->memory = mem;
mc->flags = flags;
mc->frac_pos = 0;
mc->pos = 0;
- mc->frac_speed = (rate<<16) / mc->mx->play_rate;
+ mc->frac_speed = (rate << 16) / mc->mx->play_rate;
// adjust the magnitude to prevent overflow
- while (size & 0xFFFF0000)
- size >>= 1, rate = (rate >> 1) + 1;
+ while (size & 0xFFFF0000) {
+ size >>= 1;
+ rate = (rate >> 1) + 1;
+ }
mc->samples_left = size * mc->mx->play_rate / rate;
}
@@ -176,39 +173,55 @@ static void MxOpenBankFile(Mixer *mx, const char *filename)
FioSeekTo(0, SEEK_SET);
- for(i=0; i!=count; i++,fe++) {
+ for (i = 0; i != count; i++, fe++) {
fe->file_offset = FioReadDword();
fe->file_size = FioReadDword();
}
fe = mx->files;
- for(i=0; i!=count; i++,fe++) {
+ for (i = 0; i != count; i++, fe++) {
+ char name[255];
+
FioSeekTo(fe->file_offset, SEEK_SET);
- // Skip past string and the name.
- FioSeekTo(FioReadByte() + 12, SEEK_CUR);
-
- // Read riff tags
- while(true) {
- tag = FioReadDword();
- size = FioReadDword();
-
- if (tag == ' tmf') {
- FioReadWord(); // wFormatTag
- fe->channels = FioReadWord(); // wChannels
- FioReadDword(); // samples per second
- fe->rate = 11025; // seems like all samples should be played at this rate.
- FioReadDword(); // avg bytes per second
- FioReadWord(); // alignment
- fe->bits_per_sample = FioReadByte(); // bits per sample
- FioSeekTo(size - (2+2+4+4+2+1), SEEK_CUR);
- } else if (tag == 'atad') {
- fe->file_size = size;
- fe->file_offset = FioGetPos() | (SOUND_SLOT << 24);
- break;
- } else {
- fe->file_size = 0;
- break;
+
+ // Check for special case, see else case
+ FioReadBlock(name, FioReadByte()); // Read the name of the sound
+ if (strcmp(name, "Corrupt sound") != 0) {
+ FioSeekTo(12, SEEK_CUR); // Skip past RIFF header
+
+ // Read riff tags
+ for (;;) {
+ tag = FioReadDword();
+ size = FioReadDword();
+
+ if (tag == ' tmf') {
+ FioReadWord(); // wFormatTag
+ fe->channels = FioReadWord(); // wChannels
+ FioReadDword(); // samples per second
+ fe->rate = 11025; // seems like all samples should be played at this rate.
+ FioReadDword(); // avg bytes per second
+ FioReadWord(); // alignment
+ fe->bits_per_sample = FioReadByte(); // bits per sample
+ FioSeekTo(size - (2 + 2 + 4 + 4 + 2 + 1), SEEK_CUR);
+ } else if (tag == 'atad') {
+ fe->file_size = size;
+ fe->file_offset = FioGetPos() | (SOUND_SLOT << 24);
+ break;
+ } else {
+ fe->file_size = 0;
+ break;
+ }
}
+ } else {
+ /*
+ * Special case for the jackhammer sound
+ * (name in sample.cat is "Corrupt sound")
+ * It's no RIFF file, but raw PCM data
+ */
+ fe->channels = 1;
+ fe->rate = 11025;
+ fe->bits_per_sample = 8;
+ fe->file_offset = FioGetPos() | (SOUND_SLOT << 24);
}
}
}
@@ -216,19 +229,18 @@ static void MxOpenBankFile(Mixer *mx, const char *filename)
static bool MxSetBankSource(MixerChannel *mc, uint bank)
{
FileEntry *fe = &mc->mx->files[bank];
- void *mem;
+ int8 *mem;
uint i;
if (fe->file_size == 0)
return false;
- mem = malloc(fe->file_size);
+ mem = malloc(fe->file_size); /* XXX unchecked malloc */
FioSeekToFile(fe->file_offset);
FioReadBlock(mem, fe->file_size);
- for(i=0; i!=fe->file_size; i++) {
- ((byte*)mem)[i] ^= 0x80;
- }
+ for (i = 0; i != fe->file_size; i++)
+ mem[i] -= 128; // Convert unsigned sound data to signed
assert(fe->bits_per_sample == 8 && fe->channels == 1 && fe->file_size != 0 && fe->rate != 0);
@@ -289,7 +301,7 @@ static const byte _sound_idx[] = {
72,
};
-void SndPlayScreenCoordFx(int sound, int x, int y)
+static void SndPlayScreenCoordFx(SoundFx sound, int x, int y)
{
Window *w;
ViewPort *vp;
@@ -298,8 +310,8 @@ void SndPlayScreenCoordFx(int sound, int x, int y)
if (msf.effect_vol == 0)
return;
- for(w=_windows; w!=_last_window; w++) {
- if ((vp=w->viewport) &&
+ for (w = _windows; w != _last_window; w++) {
+ if ((vp = w->viewport) != NULL &&
IS_INSIDE_1D(x, vp->virtual_left, vp->virtual_width) &&
IS_INSIDE_1D(y, vp->virtual_top, vp->virtual_height)) {
@@ -315,23 +327,24 @@ void SndPlayScreenCoordFx(int sound, int x, int y)
}
-void SndPlayTileFx(int sound, TileIndex tile)
+void SndPlayTileFx(SoundFx sound, TileIndex tile)
{
- int x = GET_TILE_X(tile)*16;
- int y = GET_TILE_Y(tile)*16;
- Point pt = RemapCoords(x,y, GetSlopeZ(x+8, y+8));
+ /* emits sound from center (+ 8) of the tile */
+ int x = GET_TILE_X(tile) * 16 + 8;
+ int y = GET_TILE_Y(tile) * 16 + 8;
+ Point pt = RemapCoords(x, y, GetSlopeZ(x, y));
SndPlayScreenCoordFx(sound, pt.x, pt.y);
}
-void SndPlayVehicleFx(int sound, Vehicle *v)
+void SndPlayVehicleFx(SoundFx sound, const Vehicle *v)
{
SndPlayScreenCoordFx(sound,
- (v->left_coord + v->right_coord) >> 1,
- (v->top_coord + v->bottom_coord) >> 1
+ (v->left_coord + v->right_coord) / 2,
+ (v->top_coord + v->bottom_coord) / 2
);
}
-void SndPlayFx(int sound)
+void SndPlayFx(SoundFx sound)
{
StartSound(
_sound_idx[sound],
diff --git a/sound.h b/sound.h
index 989e69cec..10859e63f 100644
--- a/sound.h
+++ b/sound.h
@@ -22,4 +22,84 @@ VARDEF Mixer *_mixer;
bool MxInitialize(uint rate, const char *filename);
void MxMixSamples(Mixer *mx, void *buffer, uint samples);
+typedef enum SoundFx {
+ SND_02_SPLAT, // 0 == 0x00 !
+ SND_03_FACTORY_WHISTLE,
+ SND_04_TRAIN,
+ SND_05_TRAIN_THROUGH_TUNNEL,
+ SND_06_SHIP_HORN,
+ SND_07_FERRY_HORN,
+ SND_08_PLANE_TAKE_OFF,
+ SND_09_JET,
+ SND_0A_TRAIN_HORN,
+ SND_0B_MINING_MACHINERY,
+ SND_0C_ELECTRIC_SPARK,
+ SND_0D_STEAM,
+ SND_0E_LEVEL_CROSSING,
+ SND_0F_VEHICLE_BREAKDOWN,
+ SND_10_TRAIN_BREAKDOWN,
+ SND_11_CRASH,
+ SND_12_EXPLOSION, // 16 == 0x10
+ SND_13_BIG_CRASH,
+ SND_14_CASHTILL,
+ SND_15_BEEP, // 19 == 0x13
+ SND_16_MORSE, // 20 == 0x14
+ SND_17_SKID_PLANE,
+ SND_18_HELICOPTER,
+ SND_19_BUS_START_PULL_AWAY,
+ SND_1A_BUS_START_PULL_AWAY_WITH_HORN,
+ SND_1B_TRUCK_START,
+ SND_1C_TRUCK_START_2,
+ SND_1D_APPLAUSE,
+ SND_1E_OOOOH,
+ SND_1F_SPLAT, // 29 == 0x1D
+ SND_20_SPLAT_2, // 30 == 0x1E
+ SND_21_JACKHAMMER,
+ SND_22_CAR_HORN,
+ SND_23_CAR_HORN_2,
+ SND_24_SHEEP,
+ SND_25_COW,
+ SND_26_HORSE,
+ SND_27_BLACKSMITH_ANVIL,
+ SND_28_SAWMILL, // 38 == 0x26 !
+ SND_00_GOOD_YEAR, // 39 == 0x27 !
+ SND_01_BAD_YEAR, // 40 == 0x28 !
+ SND_29_RIP, // 41 == 0x29 !
+ SND_2A_EXTRACT_AND_POP,
+ SND_2B_COMEDY_HIT,
+ SND_2C_MACHINERY,
+ SND_2D_RIP_2,
+ SND_2E_EXTRACT_AND_POP,
+ SND_2F_POP,
+ SND_30_CARTOON_SOUND,
+ SND_31_EXTRACT,
+ SND_32_POP_2,
+ SND_33_PLASTIC_MINE,
+ SND_34_WIND,
+ SND_35_COMEDY_BREAKDOWN,
+ SND_36_CARTOON_CRASH,
+ SND_37_BALLOON_SQUEAK,
+ SND_38_CHAINSAW,
+ SND_39_HEAVY_WIND,
+ SND_3A_COMEDY_BREAKDOWN_2,
+ SND_3B_JET_OVERHEAD,
+ SND_3C_COMEDY_CAR,
+ SND_3D_ANOTHER_JET_OVERHEAD,
+ SND_3E_COMEDY_CAR_2,
+ SND_3F_COMEDY_CAR_3,
+ SND_40_COMEDY_CAR_START_AND_PULL_AWAY,
+ SND_41_MAGLEV,
+ SND_42_LOON_BIRD,
+ SND_43_LION,
+ SND_44_MONKEYS,
+ SND_45_PLANE_CRASHING,
+ SND_46_PLANE_ENGINE_SPUTTERING,
+ SND_47_MAGLEV_2,
+ SND_48_DISTANT_BIRD // 72 == 0x48
+} SoundFx;
+
+void SndPlayTileFx(SoundFx sound, TileIndex tile);
+void SndPlayVehicleFx(SoundFx sound, const Vehicle *v);
+void SndPlayFx(SoundFx sound);
+
#endif /* SOUND_H */
diff --git a/terraform_gui.c b/terraform_gui.c
index 8971e978a..2f5ae77ce 100644
--- a/terraform_gui.c
+++ b/terraform_gui.c
@@ -5,6 +5,7 @@
#include "gui.h"
#include "viewport.h"
#include "gfx.h"
+#include "sound.h"
#include "command.h"
#include "vehicle.h"
diff --git a/train_cmd.c b/train_cmd.c
index 973878826..7d6f55151 100644
--- a/train_cmd.c
+++ b/train_cmd.c
@@ -9,7 +9,7 @@
#include "news.h"
#include "engine.h"
#include "player.h"
-
+#include "sound.h"
#define is_firsthead_sprite(spritenum) \
(is_custom_sprite(spritenum) \
@@ -1241,9 +1241,15 @@ static void TrainPlayLeaveStationSound(Vehicle *v)
int engtype = v->engine_type;
switch (_engines[engtype].railtype) {
- case 0: SndPlayVehicleFx(sfx[_rail_vehicle_info[engtype].engclass], v); break;
- case 1: SndPlayVehicleFx(0x41, v); break;
- case 2: SndPlayVehicleFx(0x47, v); break;
+ case 0:
+ SndPlayVehicleFx(sfx[_rail_vehicle_info[engtype].engclass], v);
+ break;
+ case 1:
+ SndPlayVehicleFx(SND_47_MAGLEV_2, v);
+ break;
+ case 2:
+ SndPlayVehicleFx(SND_41_MAGLEV, v);
+ break;
}
}
diff --git a/tree_cmd.c b/tree_cmd.c
index 229941dbe..f2e3db69d 100644
--- a/tree_cmd.c
+++ b/tree_cmd.c
@@ -3,6 +3,7 @@
#include "viewport.h"
#include "command.h"
#include "town.h"
+#include "sound.h"
static int GetRandomTreeType(uint tile, uint seed)
{
diff --git a/tunnelbridge_cmd.c b/tunnelbridge_cmd.c
index 7066003f9..6fcf71d68 100644
--- a/tunnelbridge_cmd.c
+++ b/tunnelbridge_cmd.c
@@ -5,6 +5,7 @@
#include "command.h"
#include "player.h"
#include "town.h"
+#include "sound.h"
extern void DrawCanalWater(uint tile);
diff --git a/vehicle.c b/vehicle.c
index 31e9888bb..8d4ef2fc0 100644
--- a/vehicle.c
+++ b/vehicle.c
@@ -9,6 +9,7 @@
#include "saveload.h"
#include "player.h"
#include "engine.h"
+#include "sound.h"
#define INVALID_COORD (-0x8000)
#define GEN_HASH(x,y) (((x & 0x1F80)>>7) + ((y & 0xFC0)))
diff --git a/water_cmd.c b/water_cmd.c
index 1ac3cba18..d9dfbb550 100644
--- a/water_cmd.c
+++ b/water_cmd.c
@@ -5,6 +5,7 @@
#include "command.h"
#include "town.h"
#include "news.h"
+#include "sound.h"
static void FloodVehicle(Vehicle *v);