[Scummvm-cvs-logs] SF.net SVN: scummvm: [26989] scummvm/trunk/engines/agos

Kirben at users.sourceforge.net Kirben at users.sourceforge.net
Mon May 28 13:22:54 CEST 2007


Revision: 26989
          http://scummvm.svn.sourceforge.net/scummvm/?rev=26989&view=rev
Author:   Kirben
Date:     2007-05-28 04:22:53 -0700 (Mon, 28 May 2007)

Log Message:
-----------
Add sound effects code for Amiga and AtariST versions of Elvira 2.

Modified Paths:
--------------
    scummvm/trunk/engines/agos/agos.h
    scummvm/trunk/engines/agos/res_snd.cpp
    scummvm/trunk/engines/agos/script_e2.cpp
    scummvm/trunk/engines/agos/vga.cpp
    scummvm/trunk/engines/agos/vga_e2.cpp
    scummvm/trunk/engines/agos/zones.cpp

Modified: scummvm/trunk/engines/agos/agos.h
===================================================================
--- scummvm/trunk/engines/agos/agos.h	2007-05-28 08:54:13 UTC (rev 26988)
+++ scummvm/trunk/engines/agos/agos.h	2007-05-28 11:22:53 UTC (rev 26989)
@@ -571,6 +571,7 @@
 	void readGamePcFile(Common::SeekableReadStream *in);
 	void decompressData(const char *srcName, byte *dst, uint32 offset, uint32 srcSize, uint32 dstSize);
 	void loadOffsets(const char *filename, int number, uint32 &file, uint32 &offset, uint32 &compressedSize, uint32 &size);
+	void loadSound(uint sound);
 	void loadSound(uint sound, int pan, int vol, uint type);
 	void loadVoice(uint speechId);
 

Modified: scummvm/trunk/engines/agos/res_snd.cpp
===================================================================
--- scummvm/trunk/engines/agos/res_snd.cpp	2007-05-28 08:54:13 UTC (rev 26988)
+++ scummvm/trunk/engines/agos/res_snd.cpp	2007-05-28 11:22:53 UTC (rev 26989)
@@ -397,6 +397,38 @@
 	_sound->playSfxData(dst, 0, 0, 0);
 }
 
+void AGOSEngine::loadSound(uint sound) {
+	byte *dst;
+	uint32 offs, size;
+
+	if (_curSfxFile == NULL)
+		return;
+
+	dst = _curSfxFile;
+	if (getGameType() == GType_WW) {
+		uint tmp = sound;
+		while (tmp--)
+			dst += READ_LE_UINT16(dst) + 4;
+
+		size = READ_LE_UINT16(dst);
+		offs = 4;
+	} else if (getGameType() == GType_ELVIRA2) {
+		while (READ_BE_UINT32(dst + 4) != sound)
+			dst += 12;
+
+		size = READ_BE_UINT32(dst);
+		offs = READ_BE_UINT32(dst + 8);
+	} else {
+		while (READ_BE_UINT16(dst + 6) != sound)
+			dst += 12;
+
+		size = READ_BE_UINT16(dst + 2);
+		offs = READ_BE_UINT32(dst + 8);
+	}
+
+	_sound->playRawData(dst + offs, sound, size);
+}
+
 void AGOSEngine::loadSound(uint sound, int pan, int vol, uint type) {
 	byte *dst;
 

Modified: scummvm/trunk/engines/agos/script_e2.cpp
===================================================================
--- scummvm/trunk/engines/agos/script_e2.cpp	2007-05-28 08:54:13 UTC (rev 26988)
+++ scummvm/trunk/engines/agos/script_e2.cpp	2007-05-28 11:22:53 UTC (rev 26989)
@@ -599,9 +599,11 @@
 }
 
 void AGOSEngine_Elvira2::oe2_playEffect() {
-	// 174:
-	uint a = getVarOrWord();
-	debug(0, "oe2_playEffect: stub (%d)", a);
+	// 174: play sound
+	uint soundId = getVarOrWord();
+	loadSound(soundId);
+
+	debug(0, "oe2_playEffect: stub (%d)", soundId);
 }
 
 void AGOSEngine_Elvira2::oe2_getDollar2() {

Modified: scummvm/trunk/engines/agos/vga.cpp
===================================================================
--- scummvm/trunk/engines/agos/vga.cpp	2007-05-28 08:54:13 UTC (rev 26988)
+++ scummvm/trunk/engines/agos/vga.cpp	2007-05-28 11:22:53 UTC (rev 26989)
@@ -1072,37 +1072,14 @@
 }
 
 void AGOSEngine::vc28_playSFX() {
-	byte *dst;
-	uint sound, channels, frequency, flags;
-	uint offs, size;
+	uint16 sound = vcReadNextWord();
+	uint16 channels = vcReadNextWord();
+	uint16 frequency = vcReadNextWord();
+	uint16 flags = vcReadNextWord();
 
-	sound = vcReadNextWord();
-	channels = vcReadNextWord();
-	frequency = vcReadNextWord();
-	flags = vcReadNextWord();
+	loadSound(sound);
 
 	debug(0, "vc28_playSFX: (%d, %d, %d, %d)", sound, channels, frequency, flags);
-
-	if (_curSfxFile == NULL)
-		return;
-
-	dst = _curSfxFile;
-	if (getGameType() == GType_WW) {
-		uint tmp = sound;
-		while (tmp--)
-			dst += READ_LE_UINT16(dst) + 4;
-
-		size = READ_LE_UINT16(dst);
-		offs = 4;
-	} else {
-		while (READ_BE_UINT16(dst + 6) != sound)
-			dst += 12;
-
-		size = READ_BE_UINT16(dst + 2);
-		offs = READ_BE_UINT32(dst + 8);
-	}
-
-	_sound->playRawData(dst + offs, sound, size);
 }
 
 void AGOSEngine::vc29_stopAllSounds() {

Modified: scummvm/trunk/engines/agos/vga_e2.cpp
===================================================================
--- scummvm/trunk/engines/agos/vga_e2.cpp	2007-05-28 08:54:13 UTC (rev 26988)
+++ scummvm/trunk/engines/agos/vga_e2.cpp	2007-05-28 11:22:53 UTC (rev 26989)
@@ -186,6 +186,8 @@
 		_sound->playEffects(sound);
 	} else if (getGameId() == GID_SIMON1DOS) {
 		playSting(sound);
+	} else {
+		loadSound(sound);
 	}
 }
 

Modified: scummvm/trunk/engines/agos/zones.cpp
===================================================================
--- scummvm/trunk/engines/agos/zones.cpp	2007-05-28 08:54:13 UTC (rev 26988)
+++ scummvm/trunk/engines/agos/zones.cpp	2007-05-28 11:22:53 UTC (rev 26989)
@@ -63,7 +63,15 @@
 	vpe->vgaFile1End = _blockEnd;
 
 	vpe->sfxFile = NULL;
-	if (!(getFeatures() & GF_ZLIBCOMP)) {
+
+	if ((getPlatform() == Common::kPlatformAmiga || getPlatform() == Common::kPlatformAtariST) &&
+		getGameType() == GType_ELVIRA2) {
+		// A singe sound file is used for Amiga and AtariST versions
+		if (loadVGASoundFile(1, 3)) {
+			vpe->sfxFile = _block;
+			vpe->sfxFileEnd = _blockEnd;
+		}
+	} else if (!(getFeatures() & GF_ZLIBCOMP)) {
 		if (loadVGASoundFile(zoneNum, 3)) {
 			vpe->sfxFile = _block;
 			vpe->sfxFileEnd = _blockEnd;


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.




More information about the Scummvm-git-logs mailing list