aboutsummaryrefslogtreecommitdiff
path: root/saga/sfuncs.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'saga/sfuncs.cpp')
-rw-r--r--saga/sfuncs.cpp85
1 files changed, 81 insertions, 4 deletions
diff --git a/saga/sfuncs.cpp b/saga/sfuncs.cpp
index fbf0ce983b..1bbc36b063 100644
--- a/saga/sfuncs.cpp
+++ b/saga/sfuncs.cpp
@@ -31,6 +31,8 @@
#include "saga/console.h"
#include "saga/interface.h"
#include "saga/music.h"
+#include "saga/sound.h"
+#include "saga/sndres.h"
#include "saga/script.h"
#include "saga/sdata.h"
@@ -750,9 +752,7 @@ static int musicTable[] = {
// Script function #63 (0x3F)
int Script::SF_playMusic(R_SCRIPTFUNC_PARAMS) {
- SDataWord_T param;
-
- param = thread->pop();
+ SDataWord_T param = thread->pop();
if (/* param >= 0 && */ param < ARRAYSIZE(musicTable))
_vm->_music->play(musicTable[param]);
@@ -762,9 +762,86 @@ int Script::SF_playMusic(R_SCRIPTFUNC_PARAMS) {
return R_SUCCESS;
}
+static struct {
+ int res;
+ int vol;
+} sfxTable[] = {
+ { FX_DOOR_OPEN, 127 },
+ { FX_DOOR_CLOSE, 127 },
+ { FX_RUSH_WATER, 63 }, // Floppy volume: 127
+ { FX_RUSH_WATER, 26 }, // Floppy volume: 40
+ { FX_CRICKET, 64 },
+ { FX_PORTICULLIS, 84 }, // Floppy volume: 127
+ { FX_CLOCK_1, 64 },
+ { FX_CLOCK_2, 64 },
+ { FX_DAM_MACHINE, 64 },
+ { FX_DAM_MACHINE, 40 },
+ { FX_HUM1, 64 },
+ { FX_HUM2, 64 },
+ { FX_HUM3, 64 },
+ { FX_HUM4, 64 },
+ { FX_WATER_LOOP_S, 32 }, // Floppy volume: 64
+ { FX_SURF, 42 }, // Floppy volume: 127
+ { FX_SURF, 32 }, // Floppy volume: 64
+ { FX_FIRELOOP, 64 }, // Floppy volume: 96
+ { FX_SCRAPING, 84 }, // Floppy volume: 127
+ { FX_BEE_SWARM, 64 }, // Floppy volume: 96
+ { FX_BEE_SWARM, 26 }, // Floppy volume: 40
+ { FX_SQUEAKBOARD, 64 },
+ { FX_KNOCK, 127 },
+ { FX_COINS, 32 }, // Floppy volume: 48
+ { FX_STORM, 84 }, // Floppy volume: 127
+ { FX_DOOR_CLOSE_2, 84 }, // Floppy volume: 127
+ { FX_ARCWELD, 84 }, // Floppy volume: 127
+ { FX_RETRACT_ORB, 127 },
+ { FX_DRAGON, 127 },
+ { FX_SNORES, 127 },
+ { FX_SPLASH, 127 },
+ { FX_LOBBY_DOOR, 127 },
+ { FX_CHIRP_LOOP, 26 }, // Floppy volume: 40
+ { FX_DOOR_CREAK, 96 },
+ { FX_SPOON_DIG, 64 },
+ { FX_CROW, 96 },
+ { FX_COLDWIND, 42 }, // Floppy volume: 64
+ { FX_TOOL_SND_1, 96 },
+ { FX_TOOL_SND_2, 127 },
+ { FX_TOOL_SND_3, 64 },
+ { FX_DOOR_METAL, 96 },
+ { FX_WATER_LOOP_S, 32 },
+ { FX_WATER_LOOP_L, 32 }, // Floppy volume: 64
+ { FX_DOOR_OPEN_2, 127 },
+ { FX_JAIL_DOOR, 64 },
+ { FX_KILN_FIRE, 53 }, // Floppy volume: 80
+
+ // Only in the CD version
+ { FX_CROWD_01, 64 },
+ { FX_CROWD_02, 64 },
+ { FX_CROWD_03, 64 },
+ { FX_CROWD_04, 64 },
+ { FX_CROWD_05, 64 },
+ { FX_CROWD_06, 64 },
+ { FX_CROWD_07, 64 },
+ { FX_CROWD_08, 64 },
+ { FX_CROWD_09, 64 },
+ { FX_CROWD_10, 64 },
+ { FX_CROWD_11, 64 },
+ { FX_CROWD_12, 64 },
+ { FX_CROWD_13, 64 },
+ { FX_CROWD_14, 64 },
+ { FX_CROWD_15, 64 },
+ { FX_CROWD_16, 64 },
+ { FX_CROWD_17, 64 }
+};
+
// Script function #70 (0x46)
int Script::SF_playSound(R_SCRIPTFUNC_PARAMS) {
- thread->pop();
+ SDataWord_T param = thread->pop() - 14;
+
+ if (/* param >= 0 && */ param < ARRAYSIZE(sfxTable))
+ _vm->_sndRes->playSound(sfxTable[param].res, sfxTable[param].vol);
+ else
+ _vm->_sound->stopSound();
+
return R_SUCCESS;
}