aboutsummaryrefslogtreecommitdiff
path: root/scumm/player_v3a.cpp
diff options
context:
space:
mode:
authorMax Horn2003-09-08 11:29:57 +0000
committerMax Horn2003-09-08 11:29:57 +0000
commitc5a3c1235c75d90c46707f819a13316948410482 (patch)
treeae05111f05837e2e0858058fc314e0c53e95f3cf /scumm/player_v3a.cpp
parent3156f0dd2f1e936d1d0d0e61229cb8efecc184b6 (diff)
downloadscummvm-rg350-c5a3c1235c75d90c46707f819a13316948410482.tar.gz
scummvm-rg350-c5a3c1235c75d90c46707f819a13316948410482.tar.bz2
scummvm-rg350-c5a3c1235c75d90c46707f819a13316948410482.zip
some cleanup
svn-id: r10084
Diffstat (limited to 'scumm/player_v3a.cpp')
-rw-r--r--scumm/player_v3a.cpp103
1 files changed, 44 insertions, 59 deletions
diff --git a/scumm/player_v3a.cpp b/scumm/player_v3a.cpp
index 90fdb70d63..0ceb439786 100644
--- a/scumm/player_v3a.cpp
+++ b/scumm/player_v3a.cpp
@@ -38,12 +38,6 @@ unsigned short _notefreqs[4][12] = {
//
////////////////////////////////////////
-static void playerv3a_handler (void *engine) {
- Scumm *scumm = (Scumm *)engine;
- if (scumm && scumm->_playerV3A)
- scumm->_playerV3A->playMusic();
-}
-
Player_V3A::Player_V3A(Scumm *scumm) {
int i;
_scumm = scumm;
@@ -62,13 +56,13 @@ Player_V3A::Player_V3A(Scumm *scumm) {
_maxvol = 255;
- scumm->_timer->installProcedure(playerv3a_handler,16666);
+ scumm->_timer->installProcedure(timerHandler, 16666);
_isinit = false;
}
Player_V3A::~Player_V3A() {
- _scumm->_timer->releaseProcedure(playerv3a_handler);
+ _scumm->_timer->releaseProcedure(timerHandler);
if (!_isinit)
return;
for (int i = 0; _wavetable[i] != NULL; i++) {
@@ -152,66 +146,51 @@ void Player_V3A::startSound(int nr) {
byte *data = _scumm->getResourceAddress(rtSound, nr);
assert(data);
+ if (_scumm->_gameId != GID_INDY3 && _scumm->_gameId != GID_LOOM)
+ error("player_v3a - unknown game!");
+
if (!_isinit) {
int i;
+ unsigned char *ptr;
+ int offset = 4;
+ int numInstruments;
+
if (_scumm->_gameId == GID_INDY3) {
- unsigned char *ptr = _scumm->getResourceAddress(rtSound,83);
- int offset = 4;
- _wavetable = (instData **)malloc(13 * sizeof(void *));
- for (i = 0; i < 12; i++) {
- _wavetable[i] = (instData *)malloc(sizeof(instData));
- for (int j = 0; j < 6; j++) {
- int off, len;
- off = READ_BE_UINT16(ptr + offset + 0);
- _wavetable[i]->_ilen[j] = len = READ_BE_UINT16(ptr + offset + 2);
- if (len) {
- _wavetable[i]->_idat[j] = (char *)malloc(len);
- memcpy(_wavetable[i]->_idat[j],ptr + off,len);
- } else _wavetable[i]->_idat[j] = NULL;
- off = READ_BE_UINT16(ptr + offset + 4);
- _wavetable[i]->_llen[j] = len = READ_BE_UINT16(ptr + offset + 6);
- if (len) {
- _wavetable[i]->_ldat[j] = (char *)malloc(len);
- memcpy(_wavetable[i]->_ldat[j],ptr + off,len);
- } else _wavetable[i]->_ldat[j] = NULL;
- _wavetable[i]->_oct[j] = READ_BE_UINT16(ptr + offset + 8);
- offset += 10;
- }
+ ptr = _scumm->getResourceAddress(rtSound, 83);
+ numInstruments = 12;
+ } else {
+ ptr = _scumm->getResourceAddress(rtSound, 79);
+ numInstruments = 9;
+ }
+ _wavetable = (instData **)malloc((numInstruments + 1) * sizeof(void *));
+ for (i = 0; i < numInstruments; i++) {
+ _wavetable[i] = (instData *)malloc(sizeof(instData));
+ for (int j = 0; j < 6; j++) {
+ int off, len;
+ off = READ_BE_UINT16(ptr + offset + 0);
+ _wavetable[i]->_ilen[j] = len = READ_BE_UINT16(ptr + offset + 2);
+ if (len) {
+ _wavetable[i]->_idat[j] = (char *)malloc(len);
+ memcpy(_wavetable[i]->_idat[j],ptr + off,len);
+ } else _wavetable[i]->_idat[j] = NULL;
+ off = READ_BE_UINT16(ptr + offset + 4);
+ _wavetable[i]->_llen[j] = len = READ_BE_UINT16(ptr + offset + 6);
+ if (len) {
+ _wavetable[i]->_ldat[j] = (char *)malloc(len);
+ memcpy(_wavetable[i]->_ldat[j],ptr + off,len);
+ } else _wavetable[i]->_ldat[j] = NULL;
+ _wavetable[i]->_oct[j] = READ_BE_UINT16(ptr + offset + 8);
+ offset += 10;
+ }
+ if (_scumm->_gameId == GID_INDY3) {
_wavetable[i]->_pitadjust = 0;
offset += 2;
- }
- _wavetable[i] = NULL;
- }
- else if (_scumm->_gameId == GID_LOOM) {
- unsigned char *ptr = _scumm->getResourceAddress(rtSound,79);
- int offset = 4;
- _wavetable = (instData **)malloc(10 * sizeof(void *));
- for (i = 0; i < 9; i++) {
- _wavetable[i] = (instData *)malloc(sizeof(instData));
- for (int j = 0; j < 6; j++) {
- int off, len;
- off = READ_BE_UINT16(ptr + offset + 0);
- _wavetable[i]->_ilen[j] = len = READ_BE_UINT16(ptr + offset + 2);
- if (len) {
- _wavetable[i]->_idat[j] = (char *)malloc(len);
- memcpy(_wavetable[i]->_idat[j],ptr + off,len);
- } else _wavetable[i]->_idat[j] = NULL;
- off = READ_BE_UINT16(ptr + offset + 4);
- _wavetable[i]->_llen[j] = len = READ_BE_UINT16(ptr + offset + 6);
- if (len) {
- _wavetable[i]->_ldat[j] = (char *)malloc(len);
- memcpy(_wavetable[i]->_ldat[j],ptr + off,len);
- } else _wavetable[i]->_ldat[j] = NULL;
- _wavetable[i]->_oct[j] = READ_BE_UINT16(ptr + offset + 8);
- offset += 10;
- }
+ } else {
_wavetable[i]->_pitadjust = READ_BE_UINT16(ptr + offset + 2);
offset += 4;
}
- _wavetable[i] = NULL;
}
- else
- error("player_v3a - unknown game!");
+ _wavetable[i] = NULL;
_isinit = true;
}
@@ -249,6 +228,12 @@ void Player_V3A::startSound(int nr) {
}
}
+void Player_V3A::timerHandler(void *engine) {
+ Scumm *scumm = (Scumm *)engine;
+ if (scumm && scumm->_playerV3A)
+ scumm->_playerV3A->playMusic();
+}
+
void Player_V3A::playMusic() {
int i;
for (i = 0; i < V3A_MAXCHANS; i++)