aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMax Horn2005-04-20 23:33:35 +0000
committerMax Horn2005-04-20 23:33:35 +0000
commit7963bb4cb92345948b8f737df8414929f93db527 (patch)
treed89bb97667bb09fb515e3c59a15ecbd37e04f77e
parentc04ad861fe751503c978cd47258baaa57c22b96d (diff)
downloadscummvm-rg350-7963bb4cb92345948b8f737df8414929f93db527.tar.gz
scummvm-rg350-7963bb4cb92345948b8f737df8414929f93db527.tar.bz2
scummvm-rg350-7963bb4cb92345948b8f737df8414929f93db527.zip
Renamed _mouseButStat -> _mouseAndKeyboardStat (that's what it really is); moved _audioNames to class IMuseDigital
svn-id: r17723
-rw-r--r--scumm/imuse_digi/dimuse.cpp4
-rw-r--r--scumm/imuse_digi/dimuse.h5
-rw-r--r--scumm/imuse_digi/dimuse_music.cpp10
-rw-r--r--scumm/input.cpp18
-rw-r--r--scumm/intern.h1
-rw-r--r--scumm/resource.cpp24
-rw-r--r--scumm/scumm.cpp5
-rw-r--r--scumm/scumm.h5
-rw-r--r--scumm/verbs.cpp20
9 files changed, 56 insertions, 36 deletions
diff --git a/scumm/imuse_digi/dimuse.cpp b/scumm/imuse_digi/dimuse.cpp
index d4f2f18c82..3e382b2364 100644
--- a/scumm/imuse_digi/dimuse.cpp
+++ b/scumm/imuse_digi/dimuse.cpp
@@ -54,6 +54,9 @@ IMuseDigital::IMuseDigital(ScummEngine *scumm, int fps)
_track[l]->used = false;
}
_vm->_timer->installTimerProc(timer_handler, 1000000 / _callbackFps, this);
+
+ _audioNames = NULL;
+ _numAudioNames = 0;
}
IMuseDigital::~IMuseDigital() {
@@ -63,6 +66,7 @@ IMuseDigital::~IMuseDigital() {
delete _track[l];
}
delete _sound;
+ free(_audioNames);
}
void IMuseDigital::resetState() {
diff --git a/scumm/imuse_digi/dimuse.h b/scumm/imuse_digi/dimuse.h
index cb8e9892c6..52484ecf64 100644
--- a/scumm/imuse_digi/dimuse.h
+++ b/scumm/imuse_digi/dimuse.h
@@ -90,6 +90,9 @@ private:
ScummEngine *_vm;
ImuseDigiSndMgr *_sound;
+ char *_audioNames;
+ int32 _numAudioNames;
+
bool _pause;
int32 _attributes[188];
@@ -129,6 +132,8 @@ public:
IMuseDigital(ScummEngine *scumm, int fps);
virtual ~IMuseDigital();
+ void setAudioNames(int32 num, char *names);
+
void startVoice(int soundId, AudioStream *input);
void startVoice(int soundId, const char *soundName);
void startMusic(int soundId, int volume);
diff --git a/scumm/imuse_digi/dimuse_music.cpp b/scumm/imuse_digi/dimuse_music.cpp
index da57398353..43490da5e9 100644
--- a/scumm/imuse_digi/dimuse_music.cpp
+++ b/scumm/imuse_digi/dimuse_music.cpp
@@ -394,10 +394,16 @@ void IMuseDigital::setFtMusicCuePoint(int cueId) {
_curMusicCue = cueId;
}
+void IMuseDigital::setAudioNames(int32 num, char *names) {
+ free(_audioNames);
+ _numAudioNames = num;
+ _audioNames = names;
+}
+
int IMuseDigital::getSoundIdByName(const char *soundName) {
if (soundName && soundName[0] != 0) {
- for (int r = 0; r < _vm->_numAudioNames; r++) {
- if (strcmp(soundName, &_vm->_audioNames[r * 9]) == 0) {
+ for (int r = 0; r < _numAudioNames; r++) {
+ if (strcmp(soundName, &_audioNames[r * 9]) == 0) {
return r;
}
}
diff --git a/scumm/input.cpp b/scumm/input.cpp
index b9ac0abb92..dd2f29cafe 100644
--- a/scumm/input.cpp
+++ b/scumm/input.cpp
@@ -210,7 +210,7 @@ void ScummEngine::parseEvents() {
void ScummEngine::clearClickedStatus() {
_keyPressed = 0;
- _mouseButStat = 0;
+ _mouseAndKeyboardStat = 0;
_leftBtnPressed &= ~msClicked;
_rightBtnPressed &= ~msClicked;
}
@@ -251,15 +251,15 @@ void ScummEngine::processKbd(bool smushMode) {
//
// Determine the mouse button state.
//
- _mouseButStat = 0;
+ _mouseAndKeyboardStat = 0;
// Interpret 'return' as left click and 'tab' as right click
if (_lastKeyHit && _cursor.state > 0) {
if (_lastKeyHit == 9) {
- _mouseButStat = MBS_RIGHT_CLICK;
+ _mouseAndKeyboardStat = MBS_RIGHT_CLICK;
_lastKeyHit = 0;
} else if (_lastKeyHit == 13) {
- _mouseButStat = MBS_LEFT_CLICK;
+ _mouseAndKeyboardStat = MBS_LEFT_CLICK;
_lastKeyHit = 0;
}
}
@@ -269,19 +269,19 @@ void ScummEngine::processKbd(bool smushMode) {
// the cutscene exit key (i.e. ESC in most games). That mimicks
// the behaviour of the original engine where pressing both
// mouse buttons also skips the current cutscene.
- _mouseButStat = 0;
+ _mouseAndKeyboardStat = 0;
_lastKeyHit = (uint)VAR(VAR_CUTSCENEEXIT_KEY);
} else if (_rightBtnPressed & msClicked && (_version < 4 && _gameId != GID_LOOM)) {
// Pressing right mouse button is treated as if you pressed
// the cutscene exit key (i.e. ESC in most games). That mimicks
// the behaviour of the original engine where pressing right
// mouse button also skips the current cutscene.
- _mouseButStat = 0;
+ _mouseAndKeyboardStat = 0;
_lastKeyHit = (uint)VAR(VAR_CUTSCENEEXIT_KEY);
} else if (_leftBtnPressed & msClicked) {
- _mouseButStat = MBS_LEFT_CLICK;
+ _mouseAndKeyboardStat = MBS_LEFT_CLICK;
} else if (_rightBtnPressed & msClicked) {
- _mouseButStat = MBS_RIGHT_CLICK;
+ _mouseAndKeyboardStat = MBS_RIGHT_CLICK;
}
if (_version == 8) {
@@ -478,7 +478,7 @@ void ScummEngine::processKbd(bool smushMode) {
}
}
- _mouseButStat = _lastKeyHit;
+ _mouseAndKeyboardStat = _lastKeyHit;
}
} // End of namespace Scumm
diff --git a/scumm/intern.h b/scumm/intern.h
index 60876cdd20..d4cc1402b1 100644
--- a/scumm/intern.h
+++ b/scumm/intern.h
@@ -1231,6 +1231,7 @@ protected:
virtual void readMAXS(int blockSize);
virtual void readGlobalObjects();
+ virtual void readIndexBlock(uint32 blocktype, uint32 itemsize);
virtual void setCameraAt(int pos_x, int pos_y);
virtual void setCameraFollows(Actor *a);
diff --git a/scumm/resource.cpp b/scumm/resource.cpp
index 9b96557b13..060f3f83b8 100644
--- a/scumm/resource.cpp
+++ b/scumm/resource.cpp
@@ -341,6 +341,23 @@ void ScummEngine::readIndexFile() {
closeRoom();
}
+void ScummEngine_v7::readIndexBlock(uint32 blocktype, uint32 itemsize) {
+ int num;
+ char *ptr;
+ switch (blocktype) {
+ case MKID('ANAM'): // Used by: The Dig, FT
+ debug(9, "found ANAM block, reading audio names");
+ num = _fileHandle->readUint16LE();
+ ptr = (char*)malloc(num * 9);
+ _fileHandle->read(ptr, num * 9);
+ _imuseDigital->setAudioNames(num, ptr);
+ break;
+
+ default:
+ ScummEngine::readIndexBlock(blocktype, itemsize);
+ }
+}
+
void ScummEngine_v70he::readIndexBlock(uint32 blocktype, uint32 itemsize) {
int i;
switch (blocktype) {
@@ -421,13 +438,6 @@ void ScummEngine::readIndexBlock(uint32 blocktype, uint32 itemsize) {
readResTypeList(rtRoomImage, MKID('RMIM'), "room image");
break;
- case MKID('ANAM'): // Used by: The Dig, FT
- debug(9, "found ANAM block, reading audio names");
- _numAudioNames = _fileHandle->readUint16LE();
- _audioNames = (char*)malloc(_numAudioNames * 9);
- _fileHandle->read(_audioNames, _numAudioNames * 9);
- break;
-
case MKID('DIRR'):
case MKID('DROO'):
readResTypeList(rtRoom, MKID('ROOM'), "room");
diff --git a/scumm/scumm.cpp b/scumm/scumm.cpp
index afe1964bd6..2ce332b2f2 100644
--- a/scumm/scumm.cpp
+++ b/scumm/scumm.cpp
@@ -755,8 +755,6 @@ ScummEngine::ScummEngine(GameDetector *detector, OSystem *syst, const ScummGameS
_numTalkies = 0;
_numPalettes = 0;
_numUnk = 0;
- _audioNames = NULL;
- _numAudioNames = 0;
_curActor = 0;
_curVerb = 0;
_curVerbSlot = 0;
@@ -765,7 +763,7 @@ ScummEngine::ScummEngine(GameDetector *detector, OSystem *syst, const ScummGameS
_egoPositioned = false;
_keyPressed = 0;
_lastKeyHit = 0;
- _mouseButStat = 0;
+ _mouseAndKeyboardStat = 0;
_leftBtnPressed = 0;
_rightBtnPressed = 0;
_bootParam = 0;
@@ -1173,7 +1171,6 @@ ScummEngine::~ScummEngine() {
delete _sound;
free(_languageBuffer);
- free(_audioNames);
delete _costumeLoader;
delete _costumeRenderer;
diff --git a/scumm/scumm.h b/scumm/scumm.h
index 5eee65969d..e7eb497e3d 100644
--- a/scumm/scumm.h
+++ b/scumm/scumm.h
@@ -524,9 +524,6 @@ public:
int _NESStartStrip;
- char *_audioNames;
- int32 _numAudioNames;
-
protected:
/* Current objects - can go in their respective classes */
byte _curActor;
@@ -550,7 +547,7 @@ protected:
Common::Point _mouse;
Common::Point _virtualMouse;
- uint16 _mouseButStat;
+ uint16 _mouseAndKeyboardStat;
byte _leftBtnPressed, _rightBtnPressed;
/** The bootparam, to be passed to the script 1, the bootscript. */
diff --git a/scumm/verbs.cpp b/scumm/verbs.cpp
index a88a09bee7..d392ed7604 100644
--- a/scumm/verbs.cpp
+++ b/scumm/verbs.cpp
@@ -230,7 +230,7 @@ void ScummEngine::checkV2Inventory(int x, int y) {
y -= virtscr[kVerbVirtScreen].topline;
- if ((y < inventoryArea) || !(_mouseButStat & MBS_LEFT_CLICK))
+ if ((y < inventoryArea) || !(_mouseAndKeyboardStat & MBS_LEFT_CLICK))
return;
if (v2_mouseover_boxes[kInventoryUpArrow].rect.contains(x, y)) {
@@ -356,18 +356,18 @@ void ScummEngine::checkExecVerbs() {
if (VAR_MOUSE_STATE != 0xFF)
VAR(VAR_MOUSE_STATE) = 0;
- if (_userPut <= 0 || _mouseButStat == 0)
+ if (_userPut <= 0 || _mouseAndKeyboardStat == 0)
return;
if (VAR_MOUSE_STATE != 0xFF)
- VAR(VAR_MOUSE_STATE) = _mouseButStat;
+ VAR(VAR_MOUSE_STATE) = _mouseAndKeyboardStat;
- if (_mouseButStat < MBS_MAX_KEY) {
+ if (_mouseAndKeyboardStat < MBS_MAX_KEY) {
/* Check keypresses */
vs = &_verbs[1];
for (i = 1; i < _numVerbs; i++, vs++) {
if (vs->verbid && vs->saveid == 0 && vs->curmode == 1) {
- if (_mouseButStat == vs->key) {
+ if (_mouseAndKeyboardStat == vs->key) {
// Trigger verb as if the user clicked it
runInputScript(1, vs->verbid, 1);
return;
@@ -375,7 +375,7 @@ void ScummEngine::checkExecVerbs() {
}
}
- if ((_gameId == GID_INDY4 || _gameId == GID_PASS) && _mouseButStat >= '0' && _mouseButStat <= '9') {
+ if ((_gameId == GID_INDY4 || _gameId == GID_PASS) && _mouseAndKeyboardStat >= '0' && _mouseAndKeyboardStat <= '9') {
// To support keyboard fighting in FOA, we need to remap the number keys.
// FOA apparently expects PC scancode values (see script 46 if you want
// to know where I got these numbers from). Oddly enough, the The Indy 3
@@ -387,14 +387,14 @@ void ScummEngine::checkExecVerbs() {
331, 332, 333,
327, 328, 329
};
- _mouseButStat = numpad[_mouseButStat - '0'];
+ _mouseAndKeyboardStat = numpad[_mouseAndKeyboardStat - '0'];
}
// Generic keyboard input
- runInputScript(4, _mouseButStat, 1);
- } else if (_mouseButStat & MBS_MOUSE_MASK) {
+ runInputScript(4, _mouseAndKeyboardStat, 1);
+ } else if (_mouseAndKeyboardStat & MBS_MOUSE_MASK) {
VirtScreen *zone = findVirtScreen(_mouse.y);
- byte code = _mouseButStat & MBS_LEFT_CLICK ? 1 : 2;
+ byte code = _mouseAndKeyboardStat & MBS_LEFT_CLICK ? 1 : 2;
int inventoryArea = (_platform == Common::kPlatformNES) ? 48: 32;
if (_version <= 2 && zone->number == 2 && _mouse.y <= zone->topline + 8) {