[Scummvm-cvs-logs] scummvm master -> d6bfbdd60eb89ac56991efb851cbde4225a56c5c
fuzzie
fuzzie at fuzzie.org
Sat Nov 5 16:01:37 CET 2011
This automated email contains information about 2 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
81785c6090 COMPOSER: Fix non-pipe audio buffers.
d6bfbdd60e COMPOSER: Implement V1 random events.
Commit: 81785c60909b4a051afdd2f8050dbfc23d071b17
https://github.com/scummvm/scummvm/commit/81785c60909b4a051afdd2f8050dbfc23d071b17
Author: Alyssa Milburn (fuzzie at fuzzie.org)
Date: 2011-11-05T07:59:40-07:00
Commit Message:
COMPOSER: Fix non-pipe audio buffers.
Changed paths:
engines/composer/graphics.cpp
diff --git a/engines/composer/graphics.cpp b/engines/composer/graphics.cpp
index bd3cc3a..42d0a20 100644
--- a/engines/composer/graphics.cpp
+++ b/engines/composer/graphics.cpp
@@ -188,8 +188,10 @@ void ComposerEngine::playWaveForAnim(uint16 id, uint16 priority, bool bufferingO
}
}
Common::SeekableReadStream *stream = NULL;
+ bool fromPipe = true;
if (!bufferingOnly && hasResource(ID_WAVE, id)) {
stream = getResource(ID_WAVE, id);
+ fromPipe = false;
} else {
for (Common::List<Pipe *>::iterator k = _pipes.begin(); k != _pipes.end(); k++) {
Pipe *pipe = *k;
@@ -201,12 +203,18 @@ void ComposerEngine::playWaveForAnim(uint16 id, uint16 priority, bool bufferingO
}
if (!stream)
return;
- // FIXME: non-pipe buffers have fixed wav header (data at +44, size at +40)
- byte *buffer = (byte *)malloc(stream->size());
- stream->read(buffer, stream->size());
+
+ uint32 size = stream->size();
+ if (!fromPipe) {
+ // non-pipe buffers have fixed wav header (data at +44, size at +40)
+ stream->skip(40);
+ size = stream->readUint32LE();
+ }
+ byte *buffer = (byte *)malloc(size);
+ stream->read(buffer, size);
if (!_audioStream)
_audioStream = Audio::makeQueuingAudioStream(22050, false);
- _audioStream->queueBuffer(buffer, stream->size(), DisposeAfterUse::YES, Audio::FLAG_UNSIGNED);
+ _audioStream->queueBuffer(buffer, size, DisposeAfterUse::YES, Audio::FLAG_UNSIGNED);
_currSoundPriority = priority;
delete stream;
if (!_mixer->isSoundHandleActive(_soundHandle))
Commit: d6bfbdd60eb89ac56991efb851cbde4225a56c5c
https://github.com/scummvm/scummvm/commit/d6bfbdd60eb89ac56991efb851cbde4225a56c5c
Author: Alyssa Milburn (fuzzie at fuzzie.org)
Date: 2011-11-05T08:00:02-07:00
Commit Message:
COMPOSER: Implement V1 random events.
Changed paths:
engines/composer/composer.cpp
engines/composer/composer.h
engines/composer/resource.h
engines/composer/scripting.cpp
diff --git a/engines/composer/composer.cpp b/engines/composer/composer.cpp
index 17c14dd..556dad7 100644
--- a/engines/composer/composer.cpp
+++ b/engines/composer/composer.cpp
@@ -443,6 +443,20 @@ void ComposerEngine::loadLibrary(uint id) {
newLib._keyboardHandlers.push_back(handler);
}
+ Common::Array<uint16> randResources = library._archive->getResourceIDList(ID_RAND);
+ for (uint i = 0; i < randResources.size(); i++) {
+ Common::SeekableReadStream *stream = library._archive->getResource(ID_RAND, randResources[i]);
+ Common::Array<RandomEvent> &events = _randomEvents[randResources[i]];
+ uint16 count = stream->readUint16LE();
+ for (uint j = 0; j < count; j++) {
+ RandomEvent random;
+ random.scriptId = stream->readUint16LE();
+ random.weight = stream->readUint16LE();
+ events.push_back(random);
+ }
+ delete stream;
+ }
+
// add background sprite, if it exists
if (hasResource(ID_BMAP, 1000))
setBackground(1000);
@@ -470,6 +484,8 @@ void ComposerEngine::unloadLibrary(uint id) {
_anims.clear();
stopPipes();
+ _randomEvents.clear();
+
for (Common::List<Sprite>::iterator j = _sprites.begin(); j != _sprites.end(); j++) {
j->_surface.free();
}
diff --git a/engines/composer/composer.h b/engines/composer/composer.h
index 02dbca5..cebe977 100644
--- a/engines/composer/composer.h
+++ b/engines/composer/composer.h
@@ -101,6 +101,11 @@ struct KeyboardHandler {
uint16 scriptId;
};
+struct RandomEvent {
+ uint16 weight;
+ uint16 scriptId;
+};
+
struct Library {
uint _id;
Archive *_archive;
@@ -182,6 +187,8 @@ private:
Common::List<Animation *> _anims;
Common::List<Pipe *> _pipes;
+ Common::HashMap<uint16, Common::Array<RandomEvent> > _randomEvents;
+
void onMouseDown(const Common::Point &pos);
void onMouseMove(const Common::Point &pos);
void onKeyDown(uint16 keyCode);
diff --git a/engines/composer/resource.h b/engines/composer/resource.h
index cc1985e..e0052cd 100644
--- a/engines/composer/resource.h
+++ b/engines/composer/resource.h
@@ -43,6 +43,7 @@ struct Animation;
#define ID_CTBL MKTAG('C','T','B','L') // Color Table
#define ID_EVNT MKTAG('E','V','N','T') // Event
#define ID_PIPE MKTAG('P','I','P','E') // Pipe
+#define ID_RAND MKTAG('R','A','N','D') // Random Object
#define ID_SCRP MKTAG('S','C','R','P') // Script
#define ID_VARI MKTAG('V','A','R','I') // Variables
#define ID_WAVE MKTAG('W','A','V','E') // Wave
diff --git a/engines/composer/scripting.cpp b/engines/composer/scripting.cpp
index a4c78c3..3a201c8 100644
--- a/engines/composer/scripting.cpp
+++ b/engines/composer/scripting.cpp
@@ -922,7 +922,21 @@ bool ComposerEngine::tickOldScript(OldScript *script) {
uint16 randomId;
randomId = script->_stream->readUint16LE();
debug(3, "kOldOpRunRandom(%d)", randomId);
- warning("V1 random not yet implemented"); // FIXME
+ if (!_randomEvents.contains(randomId)) {
+ warning("kOldOpRunRandom found no entries for id %d", randomId);
+ } else {
+ uint32 randValue = _rnd->getRandomNumberRng(0, 32767);
+ const Common::Array<RandomEvent> &events = _randomEvents[randomId];
+ uint i = 0;
+ for (i = 0; i < events.size(); i++) {
+ if ((i + 1 == events.size()) || (randValue <= events[i].weight)) {
+ runScript(events[i].scriptId);
+ break;
+ } else {
+ randValue -= events[i].weight;
+ }
+ }
+ }
break;
default:
error("unknown oldScript op %d", op);
More information about the Scummvm-git-logs
mailing list