equal
deleted
inserted
replaced
13 #include "window.h" |
13 #include "window.h" |
14 #include "viewport.h" |
14 #include "viewport.h" |
15 #include "fileio.h" |
15 #include "fileio.h" |
16 #include "newgrf_sound.h" |
16 #include "newgrf_sound.h" |
17 #include "helpers.hpp" |
17 #include "helpers.hpp" |
|
18 #include "fios.h" |
18 |
19 |
19 static uint _file_count; |
20 static uint _file_count; |
20 static FileEntry *_files; |
21 static FileEntry *_files; |
21 |
22 |
22 #define SOUND_SLOT 63 |
|
23 // Number of levels of panning per side |
23 // Number of levels of panning per side |
24 #define PANNING_LEVELS 16 |
24 #define PANNING_LEVELS 16 |
25 |
25 |
26 |
26 |
27 static void OpenBankFile(const char *filename) |
27 static void OpenBankFile(const char *filename) |
146 if (volume == 0) return; |
146 if (volume == 0) return; |
147 mc = MxAllocateChannel(); |
147 mc = MxAllocateChannel(); |
148 if (mc == NULL) return; |
148 if (mc == NULL) return; |
149 if (!SetBankSource(mc, sound)) return; |
149 if (!SetBankSource(mc, sound)) return; |
150 |
150 |
151 panning = clamp(panning, -PANNING_LEVELS, PANNING_LEVELS); |
151 panning = Clamp(panning, -PANNING_LEVELS, PANNING_LEVELS); |
152 left_vol = (volume * PANNING_LEVELS) - (volume * panning); |
152 left_vol = (volume * PANNING_LEVELS) - (volume * panning); |
153 right_vol = (volume * PANNING_LEVELS) + (volume * panning); |
153 right_vol = (volume * PANNING_LEVELS) + (volume * panning); |
154 MxSetChannelVolume(mc, left_vol * 128 / PANNING_LEVELS, right_vol * 128 / PANNING_LEVELS); |
154 MxSetChannelVolume(mc, left_vol * 128 / PANNING_LEVELS, right_vol * 128 / PANNING_LEVELS); |
155 MxActivateChannel(mc); |
155 MxActivateChannel(mc); |
156 } |
156 } |
207 |
207 |
208 FOR_ALL_WINDOWS(wz) { |
208 FOR_ALL_WINDOWS(wz) { |
209 const ViewPort *vp = (*wz)->viewport; |
209 const ViewPort *vp = (*wz)->viewport; |
210 |
210 |
211 if (vp != NULL && |
211 if (vp != NULL && |
212 IS_INSIDE_1D(x, vp->virtual_left, vp->virtual_width) && |
212 IsInsideBS(x, vp->virtual_left, vp->virtual_width) && |
213 IS_INSIDE_1D(y, vp->virtual_top, vp->virtual_height)) { |
213 IsInsideBS(y, vp->virtual_top, vp->virtual_height)) { |
214 int left = (x - vp->virtual_left); |
214 int left = (x - vp->virtual_left); |
215 |
215 |
216 StartSound( |
216 StartSound( |
217 sound, |
217 sound, |
218 left / max(1, vp->virtual_width / ((PANNING_LEVELS << 1) + 1)) - PANNING_LEVELS, |
218 left / max(1, vp->virtual_width / ((PANNING_LEVELS << 1) + 1)) - PANNING_LEVELS, |