[Scummvm-git-logs] scummvm master -> bf4f67da2803bd9348f7cfbff94a3c129f52f162

bluegr noreply at scummvm.org
Wed Jul 6 14:30:07 UTC 2022


This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
bf4f67da28 CHEWY: Fix playing game SFX - bugs #13520, #13633


Commit: bf4f67da2803bd9348f7cfbff94a3c129f52f162
    https://github.com/scummvm/scummvm/commit/bf4f67da2803bd9348f7cfbff94a3c129f52f162
Author: Filippos Karapetis (bluegr at gmail.com)
Date: 2022-07-06T17:29:46+03:00

Commit Message:
CHEWY: Fix playing game SFX - bugs #13520, #13633

Changed paths:
    engines/chewy/defines.h
    engines/chewy/detail.cpp
    engines/chewy/detail.h
    engines/chewy/dialogs/options.cpp
    engines/chewy/inits.cpp
    engines/chewy/main.cpp
    engines/chewy/r_event.cpp
    engines/chewy/room.cpp
    engines/chewy/rooms/room00.cpp
    engines/chewy/rooms/room01.cpp
    engines/chewy/rooms/room04.cpp
    engines/chewy/rooms/room17.cpp
    engines/chewy/rooms/room24.cpp
    engines/chewy/rooms/room25.cpp
    engines/chewy/rooms/room26.cpp
    engines/chewy/rooms/room31.cpp
    engines/chewy/rooms/room37.cpp
    engines/chewy/rooms/room40.cpp
    engines/chewy/rooms/room41.cpp
    engines/chewy/rooms/room42.cpp
    engines/chewy/rooms/room43.cpp
    engines/chewy/rooms/room45.cpp
    engines/chewy/rooms/room47.cpp
    engines/chewy/rooms/room48.cpp
    engines/chewy/rooms/room49.cpp
    engines/chewy/rooms/room51.cpp
    engines/chewy/rooms/room52.cpp
    engines/chewy/rooms/room54.cpp
    engines/chewy/rooms/room56.cpp
    engines/chewy/rooms/room57.cpp
    engines/chewy/rooms/room68.cpp
    engines/chewy/rooms/room69.cpp
    engines/chewy/rooms/room70.cpp
    engines/chewy/rooms/room71.cpp
    engines/chewy/rooms/room72.cpp
    engines/chewy/rooms/room73.cpp
    engines/chewy/rooms/room74.cpp
    engines/chewy/rooms/room75.cpp
    engines/chewy/rooms/room76.cpp
    engines/chewy/rooms/room77.cpp
    engines/chewy/rooms/room78.cpp
    engines/chewy/rooms/room79.cpp
    engines/chewy/rooms/room80.cpp
    engines/chewy/rooms/room81.cpp
    engines/chewy/rooms/room82.cpp
    engines/chewy/rooms/room83.cpp
    engines/chewy/rooms/room84.cpp
    engines/chewy/rooms/room85.cpp
    engines/chewy/rooms/room86.cpp
    engines/chewy/rooms/room90.cpp
    engines/chewy/rooms/room95.cpp
    engines/chewy/rooms/room97.cpp
    engines/chewy/sound.cpp


diff --git a/engines/chewy/defines.h b/engines/chewy/defines.h
index aa502b054a3..69bb2376e72 100644
--- a/engines/chewy/defines.h
+++ b/engines/chewy/defines.h
@@ -290,7 +290,7 @@ enum SetupScreenMode {
 #define PILLOW_INV 0
 #define SLIME_INV 1
 #define RED_CARD_INV 2
-#define KABEL_INV 3
+#define CABLE_INV 3
 #define MONOCLE_INV 4
 #define NOTEBOOK_INV 5
 #define NOTEBOOK_OPEN_INV 6
diff --git a/engines/chewy/detail.cpp b/engines/chewy/detail.cpp
index cf16ce2dfbc..f6062f28a05 100644
--- a/engines/chewy/detail.cpp
+++ b/engines/chewy/detail.cpp
@@ -55,14 +55,15 @@ bool RoomAutoMov::load(Common::SeekableReadStream *src) {
 bool SoundDefBlk::load(Common::SeekableReadStream *src) {
 	int i;
 
-	for (i = 0; i < MAX_SOUNDS; ++i)
-		sound_enable[i] = src->readSint16LE();
-	for (i = 0; i < MAX_SOUNDS; ++i)
+	src->skip(MAX_SOUNDS * 2);	// sound_enable flags
+	for (i = 0; i < MAX_SOUNDS; ++i) {
 		sound_index[i] = src->readSint16LE();
+		debug("Sound %d: %d", i, sound_index[i]);
+	}
 	for (i = 0; i < MAX_SOUNDS; ++i)
 		sound_start[i] = src->readSint16LE();
 	for (i = 0; i < MAX_SOUNDS; ++i)
-		kanal[i] = src->readSint16LE();
+		channel[i] = src->readSint16LE();
 	for (i = 0; i < MAX_SOUNDS; ++i)
 		volume[i] = src->readSint16LE();
 	for (i = 0; i < MAX_SOUNDS; ++i)
@@ -100,7 +101,7 @@ bool StaticDetailInfo::load(Common::SeekableReadStream *src) {
 	y = src->readSint16LE();
 	SprNr = src->readSint16LE();
 	z_ebene = src->readSint16LE();
-	Hide = src->readByte();
+	hide = src->readByte();
 	Dummy = src->readByte();
 
 	return true;
@@ -115,17 +116,17 @@ bool RoomDetailInfo::load(Common::SeekableReadStream *src) {
 	for (i = 0; i < MAXDETAILS; ++i)
 		Ainfo[i].load(src);
 	for (i = 0; i < MAXDETAILS; ++i)
-		Sinfo[i].load(src);
+		staticSprite[i].load(src);
 	for (i = 0; i < MAX_M_ITEMS * 4; ++i)
 		mvect[i] = src->readSint16LE();
 	for (i = 0; i < MAX_M_ITEMS; ++i)
 		mtxt[i] = src->readSint16LE();
 	Ri.load(src);
 	for (i = 0; i < MAX_AUTO_MOV; ++i)
-		AutoMov[i].load(src);
+		autoMove[i].load(src);
 	for (i = 0; i < MAXDETAILS * MAX_SOUNDS; ++i)
-		tvp_index[i] = src->readSint16LE();
-	src->skip(4 * MAXDETAILS * MAX_SOUNDS); // sample
+		detailSfxIndex[i] = src->readSint16LE();
+	src->skip(4 * MAXDETAILS * MAX_SOUNDS); // sample offsets
 
 	return true;
 }
@@ -146,7 +147,7 @@ Detail::Detail() {
 		*tptr++ = 0;
 
 	for (int16 i = 0; i < MAXDETAILS; i++) {
-		_rdi.Sinfo[i].SprNr = -1;
+		_rdi.staticSprite[i].SprNr = -1;
 		_rdi.Ainfo[i].start_ani = -1;
 	}
 
@@ -159,8 +160,7 @@ Detail::Detail() {
 	_rdi.dptr = nullptr;
 	_tafName = "";
 	for (int16 i = 0; i < (MAXDETAILS * MAX_SOUNDS); i++) {
-		_rdi.sample[i] = nullptr;
-		_rdi.tvp_index[i] = -1;
+		_rdi.detailSfxIndex[i] = -1;
 	}
 	_directTafAni = OFF;
 }
@@ -239,8 +239,8 @@ void Detail::load_taf_tbl(TafInfo *fti) {
 
 	if (fti) {
 		for (int16 i = 0; i < MAXDETAILS; i++) {
-			if (_rdi.Sinfo[i].SprNr != -1)
-				load_taf_seq(_rdi.Sinfo[i].SprNr, 1, fti);
+			if (_rdi.staticSprite[i].SprNr != -1)
+				load_taf_seq(_rdi.staticSprite[i].SprNr, 1, fti);
 			if (_rdi.Ainfo[i].start_ani != -1 &&
 					_rdi.Ainfo[i].end_ani != -1 && !_rdi.Ainfo[i].load_flag)
 				load_taf_seq(_rdi.Ainfo[i].start_ani, (_rdi.Ainfo[i].end_ani - _rdi.Ainfo[i].start_ani) + 1, fti);
@@ -273,8 +273,8 @@ void Detail::del_taf_tbl(TafInfo *Tt) {
 	for (int16 i = 0; i < Tt->count; i++) {
 		free(Tt->image[i]);
 	}
-	free((char *) Tt->correction);
-	free((char *) Tt);
+	free(Tt->correction);
+	free(Tt);
 }
 
 void Detail::del_taf_tbl(int16 start, int16 nr, TafInfo *Tt) {
@@ -303,23 +303,23 @@ void Detail::load_taf_seq(int16 sprNr, int16 sprCount, TafInfo *Tt) {
 
 void Detail::hideStaticSpr(int16 nr) {
 	if (nr >= 0 && nr < MAXDETAILS)
-		_rdi.Sinfo[nr].Hide = true;
+		_rdi.staticSprite[nr].hide = true;
 }
 
 void Detail::showStaticSpr(int16 nr) {
 	if (nr >= 0 && nr < MAXDETAILS)
-		_rdi.Sinfo[nr].Hide = false;
+		_rdi.staticSprite[nr].hide = false;
 }
 
 void Detail::setStaticPos(int16 detNr, int16 x, int16 y, bool hideFl, bool correctionFlag) {
 	if (correctionFlag) {
-		int16 *Cxy = &_rdi.dptr->correction[_rdi.Sinfo[detNr].SprNr * 2];
+		int16 *Cxy = &_rdi.dptr->correction[_rdi.staticSprite[detNr].SprNr * 2];
 		x += Cxy[0];
 		y += Cxy[1];
 	}
-	_rdi.Sinfo[detNr].x = x;
-	_rdi.Sinfo[detNr].y = y;
-	_rdi.Sinfo[detNr].Hide = hideFl;
+	_rdi.staticSprite[detNr].x = x;
+	_rdi.staticSprite[detNr].y = y;
+	_rdi.staticSprite[detNr].hide = hideFl;
 }
 
 void Detail::setDetailPos(int16 detNr, int16 x, int16 y) {
@@ -333,8 +333,7 @@ void Detail::getAniValues(int16 aniNr, int16 *start, int16 *end) {
 }
 
 AniDetailInfo *Detail::getAniDetail(int16 aniNr) {
-	AniDetailInfo *ret = &_rdi.Ainfo[aniNr];
-	return ret;
+	return &_rdi.Ainfo[aniNr];
 }
 
 void Detail::init_taf(TafInfo *dptr) {
@@ -342,8 +341,7 @@ void Detail::init_taf(TafInfo *dptr) {
 }
 
 TafInfo *Detail::get_taf_info() {
-	TafInfo *ret = _rdi.dptr;
-	return ret;
+	return _rdi.dptr;
 }
 
 RoomDetailInfo *Detail::getRoomDetailInfo() {
@@ -354,7 +352,7 @@ void Detail::freezeAni() {
 	_aniFreezeflag = true;
 }
 
-void Detail::unfreeze_ani() {
+void Detail::unfreezeAni() {
 	_aniFreezeflag = false;
 }
 
@@ -398,13 +396,13 @@ void Detail::plot_ani_details(int16 scrx, int16 scry, int16 start, int16 end, in
 			Sound *sound = g_engine->_sound;
 
 			for (int16 k = 0; k < MAX_SOUNDS; k++) {
-				int16 soundEffect = adiptr->sfx.sound_index[k];
-				if ((adiptr->sfx.sound_enable[k]) && (soundEffect != -1) &&
-				        (_rdi.sample[soundEffect])) {
-					if ((adiptr->sfx.sound_start[k] == adiptr->ani_count) &&
-					        (!adiptr->delay_count)) {
-						const uint channel = adiptr->sfx.kanal[k] & 7;
-						sound->playSound(soundEffect, channel, adiptr->sfx.repeats[k], adiptr->sfx.volume[k], adiptr->sfx.stereo[k]);
+				const int16 sfxSlot = adiptr->sfx.sound_index[k];
+				if (sfxSlot != -1) {
+					const int16 sfxIndex = _rdi.detailSfxIndex[sfxSlot];
+					if (adiptr->sfx.sound_start[k] == adiptr->ani_count &&
+					        !adiptr->delay_count) {
+						const uint channel = adiptr->sfx.channel[k] & 7;
+						sound->playSound(sfxIndex, channel, false /*adiptr->sfx.repeats[k]*/, adiptr->sfx.volume[k], adiptr->sfx.stereo[k]);
 					}
 				}
 			}
@@ -444,9 +442,9 @@ void Detail::plot_ani_details(int16 scrx, int16 scry, int16 start, int16 end, in
 		} else {
 			adiptr->start_flag = 0;
 			if (adiptr->show_1_phase) {
-				_rdi.Sinfo[adiptr->phase_nr].Hide = false;
+				_rdi.staticSprite[adiptr->phase_nr].hide = false;
 				plot_static_details(scrx, scry, adiptr->phase_nr, adiptr->phase_nr);
-				_rdi.Sinfo[adiptr->phase_nr].Hide = true;
+				_rdi.staticSprite[adiptr->phase_nr].hide = true;
 			}
 		}
 	}
@@ -463,11 +461,11 @@ void Detail::plot_static_details(int16 scrx, int16 scry, int16 start, int16 end)
 		end = MAXDETAILS - 1;
 
 	for (int16 i = start; i <= end; i++) {
-		if (_rdi.Sinfo[i].SprNr != -1 && !_rdi.Sinfo[i].Hide) {
-			int16 x = _rdi.Sinfo[i].x - scrx;
-			int16 y = _rdi.Sinfo[i].y - scry;
-			byte *simage = _rdi.dptr->image[_rdi.Sinfo[i].SprNr];
-			_G(out)->spriteSet(simage, x, y, 0);
+		if (_rdi.staticSprite[i].SprNr != -1 && !_rdi.staticSprite[i].hide) {
+			int16 x = _rdi.staticSprite[i].x - scrx;
+			int16 y = _rdi.staticSprite[i].y - scry;
+			byte *spriteImage = _rdi.dptr->image[_rdi.staticSprite[i].SprNr];
+			_G(out)->spriteSet(spriteImage, x, y, 0);
 		}
 	}
 }
@@ -490,11 +488,22 @@ void Detail::startDetail(int16 nr, int16 rep, int16 reverse) {
 
 void Detail::stop_detail(int16 nr) {
 	if (nr >= 0 && nr < 32) {
-		AniDetailInfo *adiptr = &_rdi.Ainfo[nr];
-		adiptr->start_flag = 0;
+		_rdi.Ainfo[nr].start_flag = 0;
+	}
+}
+
+void Detail::playSound(int16 nr, int16 slot) {
+	const int16 sfxSlot = _rdi.Ainfo[nr].sfx.sound_index[slot];
+	if (sfxSlot != -1) {
+		const int16 sfxIndex = _rdi.detailSfxIndex[sfxSlot];
+		g_engine->_sound->playSound(sfxIndex, slot);
 	}
 }
 
+void Detail::stopSound(int16 slot) {
+	g_engine->_sound->stopSound(slot);
+}
+
 int16 Detail::maus_vector(int16 x, int16 y) {
 	int16 i = -1;
 	for (int16 j = 0; (j < (MAX_M_ITEMS - 1) << 2) && (i == -1); j += 4) {
@@ -509,12 +518,7 @@ int16 Detail::maus_vector(int16 x, int16 y) {
 }
 
 int16 Detail::get_ani_status(int16 det_nr) {
-	int16 ret;
-	if (_rdi.Ainfo[det_nr].start_flag > 0)
-		ret = 1;
-	else
-		ret = 0;
-	return ret;
+	return (_rdi.Ainfo[det_nr].start_flag > 0) ? 1 : 0;
 }
 
 SprInfo Detail::plot_detail_sprite(int16 scrx, int16 scry, int16 det_nr, int16 spr_nr, int16 mode) {
@@ -539,10 +543,9 @@ SprInfo Detail::plot_detail_sprite(int16 scrx, int16 scry, int16 det_nr, int16 s
 
 	for (int16 k = 0; k < MAX_SOUNDS; k++) {
 		int16 soundEffect = adiptr->sfx.sound_index[k];
-		if ((adiptr->sfx.sound_enable[k]) && (soundEffect != -1) &&
-		        (_rdi.sample[soundEffect])) {
+		if (soundEffect != -1) {
 			if (adiptr->sfx.sound_start[k] == spr_nr) {
-				const uint channel = adiptr->sfx.kanal[k] & 7;
+				const uint channel = adiptr->sfx.channel[k] & 7;
 				sound->playSound(soundEffect, channel, adiptr->sfx.repeats[k], adiptr->sfx.volume[k], adiptr->sfx.stereo[k]);
 			}
 		}
@@ -552,8 +555,7 @@ SprInfo Detail::plot_detail_sprite(int16 scrx, int16 scry, int16 det_nr, int16 s
 }
 
 void Detail::set_global_delay(int16 delay) {
-	_globalDelay = delay;
-	_globalDelay -= 2;
+	_globalDelay = delay - 2;
 }
 
 void Detail::calc_zoom_kor(int16 *kx, int16 *ky, int16 xzoom, int16 yzoom) {
@@ -570,92 +572,6 @@ void Detail::calc_zoom_kor(int16 *kx, int16 *ky, int16 xzoom, int16 yzoom) {
 	*ky += (int16)tmpy;
 }
 
-void Detail::disable_detail_sound(int16 nr) {
-	SoundDefBlk *sdb = &_rdi.Ainfo[nr].sfx;
-	for (int16 i = 0; i < MAX_SOUNDS; i++)
-		sdb->sound_enable[i] = false;
-}
-
-void Detail::enable_detail_sound(int16 nr) {
-	SoundDefBlk *sdb = &_rdi.Ainfo[nr].sfx;
-	for (int16 i = 0; i < MAX_SOUNDS; i++)
-		if (sdb->sound_index[i] != -1)
-			sdb->sound_enable[i] = true;
-}
-
-void Detail::play_detail_sound(int16 nr) {
-	SoundDefBlk *sdb = &_rdi.Ainfo[nr].sfx;
-	Sound *sound = g_engine->_sound;
-	for (int16 k = 0; k < MAX_SOUNDS; k++) {
-		if ((sdb->sound_enable[k]) && (sdb->sound_index[k] != -1) &&
-		        (_rdi.sample[sdb->sound_index[k]])) {
-			const uint channel = sdb->kanal[k] & 7;
-			sound->playSound(sdb->sound_index[k], channel, sdb->repeats[k], sdb->volume[k], sdb->stereo[k]);
-		}
-	}
-}
-
-void Detail::clear_detail_sound(int16 nr) {
-	SoundDefBlk *sdb = &_rdi.Ainfo[nr].sfx;
-	for (short i = 0; i < MAX_SOUNDS; i++) {
-		sdb->sound_enable[i] = false;
-		sdb->sound_index[i] = -1;
-		sdb->sound_start[i] = 0;
-		sdb->kanal[i] = 0;
-		sdb->volume[i] = 0;
-		sdb->repeats[i] = 0;
-		sdb->stereo[i] = 0;
-	}
-	removeUnusedSamples();
-}
-
-void Detail::disable_room_sound() {
-	for (int16 i = 0; i < MAXDETAILS; i++)
-		disable_detail_sound(i);
-	g_engine->_sound->stopAllSounds();
-}
-
-void Detail::enable_room_sound() {
-	for (int16 i = 0; i < MAXDETAILS; i++)
-		enable_detail_sound(i);
-}
-
-void Detail::clear_room_sound() {
-	for (int16 j = 0; j < MAXDETAILS; j++) {
-		SoundDefBlk *sdb = &_rdi.Ainfo[j].sfx;
-		for (int16 i = 0; i < MAX_SOUNDS; i++) {
-			sdb->sound_enable[i] = false;
-			sdb->sound_index[i] = -1;
-			sdb->sound_start[i] = 0;
-			sdb->kanal[i] = 0;
-			sdb->volume[i] = 0;
-			sdb->repeats[i] = 0;
-			sdb->stereo[i] = 0;
-		}
-	}
-	for (int16 i = 0; i < MAXDETAILS * MAX_SOUNDS; i++) {
-		_rdi.tvp_index[i] = -1;
-		_rdi.sample[i] = nullptr;
-	}
-}
-
-void Detail::removeUnusedSamples() {
-	for (int16 k = 0; k < MAXDETAILS * MAX_SOUNDS; k++) {
-		if (_rdi.tvp_index[k] != -1) {
-			bool found = false;
-			for (int16 i = 0; (i < MAXDETAILS) && (found == false); i++) {
-				for (int16 j = 0; (j < MAX_SOUNDS) && (found == false); j++)
-					if (_rdi.Ainfo[i].sfx.sound_index[j] == k)
-						found = true;
-			}
-			if (!found) {
-				_rdi.tvp_index[k] = -1;
-				_rdi.sample[k] = nullptr;
-			}
-		}
-	}
-}
-
 int16 Detail::mouse_on_detail(int16 mouse_x, int16 mouse_y, int16 scrx, int16 scry) {
 	int16 ok = false;
 	int16 detail_nr = -1;
diff --git a/engines/chewy/detail.h b/engines/chewy/detail.h
index 6e28792246d..b9ec6e63220 100644
--- a/engines/chewy/detail.h
+++ b/engines/chewy/detail.h
@@ -74,10 +74,10 @@ struct SprInfo {
 };
 
 struct SoundDefBlk {
-	bool sound_enable[MAX_SOUNDS];
+	// 2 * MAX_SOUNDS sound_enable flags
 	int16 sound_index[MAX_SOUNDS];
 	int16 sound_start[MAX_SOUNDS];
-	int16 kanal[MAX_SOUNDS];
+	int16 channel[MAX_SOUNDS];
 	int16 volume[MAX_SOUNDS];
 	int16 repeats[MAX_SOUNDS];
 	int16 stereo[MAX_SOUNDS];
@@ -119,7 +119,7 @@ struct StaticDetailInfo {
 	int16 y;
 	int16 SprNr;
 	int16 z_ebene;
-	bool Hide;
+	bool hide;
 	uint8 Dummy;
 
 	bool load(Common::SeekableReadStream *src);
@@ -133,13 +133,12 @@ struct RoomDetailInfo {
 	int16 _aniDetailNr = 0;
 	TafInfo *dptr = nullptr;
 	AniDetailInfo Ainfo[MAXDETAILS];
-	StaticDetailInfo Sinfo[MAXDETAILS];
+	StaticDetailInfo staticSprite[MAXDETAILS];
 	int16 mvect[MAX_M_ITEMS * 4] = { 0 };
 	int16 mtxt[MAX_M_ITEMS] = { 0 };
 	RoomInfo Ri;
-	RoomAutoMov AutoMov[MAX_AUTO_MOV];
-	int16 tvp_index[MAXDETAILS * MAX_SOUNDS] = { 0 };
-	byte *sample[MAXDETAILS * MAX_SOUNDS] = { 0 };
+	RoomAutoMov autoMove[MAX_AUTO_MOV];
+	int16 detailSfxIndex[MAXDETAILS * MAX_SOUNDS] = { 0 };
 
 	bool load(Common::SeekableReadStream *src);
 	static constexpr int SIZE() {
@@ -176,7 +175,7 @@ public:
 	void hideStaticSpr(int16 detNr);
 	void showStaticSpr(int16 detNr);
 	void freezeAni();
-	void unfreeze_ani();
+	void unfreezeAni();
 	void getAniValues(int16 aniNr, int16 *start, int16 *end);
 	AniDetailInfo *getAniDetail(int16 aniNr);
 	void init_taf(TafInfo *dptr);
@@ -188,6 +187,8 @@ public:
 	void del_static_ani(int16 ani_nr);
 	void startDetail(int16 nr, int16 rep, int16 reverse);
 	void stop_detail(int16 nr);
+	void playSound(int16 nr, int16 slot);
+	void stopSound(int16 slot);
 	void plot_ani_details(int16 scrx, int16 scry, int16 start, int16 end,
 	                      int16 zoomx, int16 zoomy);
 	void plot_static_details(int16 scrx, int16 scry, int16 start, int16 end);
@@ -216,19 +217,11 @@ public:
 	int16 mouse_on_detail(int16 mouse_x, int16 mouse_y,
 	                      int16 scrx, int16 scry);
 
-	void disable_detail_sound(int16 nr);
-	void enable_detail_sound(int16 nr);
-	void clear_detail_sound(int16 nr);
-	void play_detail_sound(int16 nr);
-	void disable_room_sound();
-	void enable_room_sound();
-	void clear_room_sound();
 	void set_taf_ani_mem(byte *load_area);
 
 private:
 	void load_taf_ani_sprite(int16 nr);
 
-	void removeUnusedSamples();
 	RoomDetailInfo _rdi;
 	RdiDataHeader _rdiDataHeader;
 	SprInfo _sprInfo;
diff --git a/engines/chewy/dialogs/options.cpp b/engines/chewy/dialogs/options.cpp
index e93df89cebb..13f64314d09 100644
--- a/engines/chewy/dialogs/options.cpp
+++ b/engines/chewy/dialogs/options.cpp
@@ -172,10 +172,8 @@ void Options::execute(TafInfo *ti) {
 			case 4: // Speaker (sound)
 				if (g_engine->_sound->soundEnabled()) {
 					g_engine->_sound->toggleSound(false);
-					_G(det)->disable_room_sound();
 				} else {
 					g_engine->_sound->toggleSound(true);
-					_G(det)->enable_room_sound();
 				}
 				g_engine->syncSoundSettings();
 				break;
diff --git a/engines/chewy/inits.cpp b/engines/chewy/inits.cpp
index c94270feba1..86cbb9bc587 100644
--- a/engines/chewy/inits.cpp
+++ b/engines/chewy/inits.cpp
@@ -78,7 +78,7 @@ void standard_init() {
 
 void var_init() {
 	_G(Rdi) = _G(det)->getRoomDetailInfo();
-	_G(Sdi) = &_G(Rdi)->Sinfo[0];
+	_G(Sdi) = &_G(Rdi)->staticSprite[0];
 	_G(Adi) = &_G(Rdi)->Ainfo[0];
 
 	_G(auto_p_nr) = 0;
diff --git a/engines/chewy/main.cpp b/engines/chewy/main.cpp
index 8a4cdc56df7..57b24491670 100644
--- a/engines/chewy/main.cpp
+++ b/engines/chewy/main.cpp
@@ -183,7 +183,7 @@ void menuEntry() {
 }
 
 void menuExit() {
-	_G(det)->unfreeze_ani();
+	_G(det)->unfreezeAni();
 	_G(uhr)->setAllStatus(TIMER_UNFREEZE);
 	_G(uhr)->resetTimer(0, 0);
 	_G(FrameSpeed) = 0;
@@ -455,7 +455,7 @@ void setupScreen(SetupScreenMode mode) {
 			plotMainMenu();
 	} else {
 		kb_mov(1);
-		_G(det)->unfreeze_ani();
+		_G(det)->unfreezeAni();
 		check_mouse_ausgang(g_events->_mousePos.x + _G(gameState).scrollx, g_events->_mousePos.y + _G(gameState).scrolly);
 
 		if (!_G(flags).SaveMenu)
@@ -1106,9 +1106,9 @@ bool autoMove(int16 movNr, int16 playerNum) {
 			_G(auto_p_nr) = playerNum;
 			int16 tmp = _G(mouseLeftClick);
 			_G(mouseLeftClick) = false;
-			_G(gpkt).Dx = _G(Rdi)->AutoMov[movNr]._x -
+			_G(gpkt).Dx = _G(Rdi)->autoMove[movNr]._x -
 						  _G(spieler_mi)[playerNum].HotMovX + _G(spieler_mi)[playerNum].HotX;
-			_G(gpkt).Dy = _G(Rdi)->AutoMov[movNr]._y -
+			_G(gpkt).Dy = _G(Rdi)->autoMove[movNr]._y -
 						  _G(spieler_mi)[playerNum].HotMovY + _G(spieler_mi)[playerNum].HotY;
 			_G(gpkt).Sx = _G(moveState)[playerNum].Xypos[0] + _G(spieler_mi)[playerNum].HotX;
 			_G(gpkt).Sy = _G(moveState)[playerNum].Xypos[1] + _G(spieler_mi)[playerNum].HotY;
@@ -1159,7 +1159,7 @@ bool autoMove(int16 movNr, int16 playerNum) {
 
 								setPersonPos(_G(spieler_mi)[playerNum].XyzEnd[0],
 								               _G(spieler_mi)[playerNum].XyzEnd[1],
-								               playerNum, _G(Rdi)->AutoMov[movNr]._sprNr);
+								               playerNum, _G(Rdi)->autoMove[movNr]._sprNr);
 							}
 						}
 						endLoopFl = true;
@@ -1648,9 +1648,9 @@ void calc_ausgang(int16 x, int16 y) {
 				exit_room(nr);
 				_G(gameState)._personRoomNr[P_CHEWY] = _G(gameState).room_e_obj[nr].Exit;
 				_G(room)->loadRoom(&_G(room_blk), _G(gameState)._personRoomNr[P_CHEWY], &_G(gameState));
-				setPersonPos(_G(Rdi)->AutoMov[_G(gameState).room_e_obj[nr].ExitMov]._x -
+				setPersonPos(_G(Rdi)->autoMove[_G(gameState).room_e_obj[nr].ExitMov]._x -
 				               _G(spieler_mi)[_G(auto_p_nr)].HotMovX,
-				               _G(Rdi)->AutoMov[_G(gameState).room_e_obj[nr].ExitMov]._y - _G(spieler_mi)[_G(auto_p_nr)].HotMovY
+				               _G(Rdi)->autoMove[_G(gameState).room_e_obj[nr].ExitMov]._y - _G(spieler_mi)[_G(auto_p_nr)].HotMovY
 				               , P_CHEWY, -1);
 				int16 *ScrXy = (int16 *)_G(ablage)[_G(room_blk).AkAblage];
 				get_scroll_off(_G(moveState)[P_CHEWY].Xypos[0] + _G(spieler_mi)[P_CHEWY].HotX,
@@ -1661,7 +1661,7 @@ void calc_ausgang(int16 x, int16 y) {
 				const int16 paletteId = _G(barriers)->getBarrierId(_G(moveState)[P_CHEWY].Xypos[0] + _G(spieler_mi)[P_CHEWY].HotX,
 				                                              _G(moveState)[P_CHEWY].Xypos[1] + _G(spieler_mi)[P_CHEWY].HotY);
 				setShadowPalette(paletteId, false);
-				setPersonSpr(_G(Rdi)->AutoMov[_G(gameState).room_e_obj[nr].ExitMov]._sprNr, P_CHEWY);
+				setPersonSpr(_G(Rdi)->autoMove[_G(gameState).room_e_obj[nr].ExitMov]._sprNr, P_CHEWY);
 				_G(moveState)[P_CHEWY]._delayCount = 0;
 				_G(fx_blend) = BLEND1;
 				_G(auto_obj) = 0;
diff --git a/engines/chewy/r_event.cpp b/engines/chewy/r_event.cpp
index ecacd2e0f46..f8f704618e4 100644
--- a/engines/chewy/r_event.cpp
+++ b/engines/chewy/r_event.cpp
@@ -218,7 +218,7 @@ void enter_room(int16 eib_nr) {
 		Room17::entry();
 		if (g_engine->_sound->soundEnabled()) {
 			if (!_G(gameState).R17EnergieOut)
-				g_engine->_sound->playSound(15);
+				_G(det)->playSound(15, 0);
 		}
 		break;
 
@@ -231,7 +231,7 @@ void enter_room(int16 eib_nr) {
 	case 24:
 		Room24::entry();
 		if (g_engine->_sound->soundEnabled())
-			g_engine->_sound->playSound(17);
+			_G(det)->playSound(17, 0);
 		break;
 
 	ENTRY(25);
@@ -317,7 +317,7 @@ void enter_room(int16 eib_nr) {
 
 void exit_room(int16 eib_nr) {
 	bool no_exit = false;
-	_G(det)->disable_room_sound();
+	g_engine->_sound->stopAllSounds();
 
 	switch (_G(gameState)._personRoomNr[P_CHEWY]) {
 	case 6:
@@ -709,7 +709,6 @@ void flic_cut(int16 nr) {
 	bool keepPlaying = true;
 
 	_G(out)->setPointer(nullptr);
-	_G(det)->disable_room_sound();
 	g_engine->_sound->stopAllSounds();
 	g_events->delay(50);
 
@@ -783,7 +782,7 @@ void flic_cut(int16 nr) {
 		break;
 	}
 
-	g_engine->_sound->stopSound();
+	_G(det)->stopSound(0);
 	SHOULD_QUIT_RETURN;
 
 	g_events->delay(50);
@@ -791,7 +790,6 @@ void flic_cut(int16 nr) {
 	if (nr != FCUT_135) {
 		g_engine->_sound->playRoomMusic(_G(gameState)._personRoomNr[0]);
 
-		_G(det)->enable_room_sound();
 		_G(uhr)->resetTimer(0, 0);
 	}
 
@@ -1028,11 +1026,11 @@ int16 sib_event_no_inv(int16 sib_nr) {
 
 	case SIB_DOORKNOB_R18:
 		if (_G(gameState).R18DoorBruecke) {
-			g_engine->_sound->stopSound(0);
-			g_engine->_sound->playSound(19, 1);
+			_G(det)->stopSound(0);
+			_G(det)->playSound(19, 1);
 		} else {
-			g_engine->_sound->playSound(19, 0);
-			g_engine->_sound->stopSound(1);
+			_G(det)->playSound(19, 0);
+			_G(det)->stopSound(1);
 		}
 
 		if (!_G(gameState).R6DoorLeftF) {
diff --git a/engines/chewy/room.cpp b/engines/chewy/room.cpp
index b5ed4bd7ef3..f34358d44e8 100644
--- a/engines/chewy/room.cpp
+++ b/engines/chewy/room.cpp
@@ -164,8 +164,6 @@ void Room::loadRoom(RaumBlk *Rb, int16 room_nr, GameState *player) {
 	clear_prog_ani();
 	_G(det)->load_rdi(Rb->DetFile, room_nr);
 
-	if (!g_engine->_sound->soundEnabled())
-		_G(det)->disable_room_sound();
 	RoomDetailInfo *Rdi_ = _G(det)->getRoomDetailInfo();
 	_roomInfo = &Rdi_->Ri;
 	if (_roomInfo->_tafLoad != 255) {
diff --git a/engines/chewy/rooms/room00.cpp b/engines/chewy/rooms/room00.cpp
index e0ede5e1336..f146f357f62 100644
--- a/engines/chewy/rooms/room00.cpp
+++ b/engines/chewy/rooms/room00.cpp
@@ -202,15 +202,15 @@ void Room0::eyeStart(EyeMode mode) {
 	_G(flags).AniUserAction = true;
 
 	if (mode == EYE_START) {
-		g_engine->_sound->playSound(FLAP_DETAIL, 0);
-		g_engine->_sound->stopSound(1);
-		g_engine->_sound->playSound(HOSE_DETAIL, 0);
-		g_engine->_sound->stopSound(2);
+		_G(det)->playSound(FLAP_DETAIL, 0);
+		_G(det)->stopSound(1);
+		_G(det)->playSound(HOSE_DETAIL, 0);
+		_G(det)->stopSound(2);
 	} else {
-		g_engine->_sound->stopSound(0);
-		g_engine->_sound->playSound(FLAP_DETAIL, 1);
-		g_engine->_sound->stopSound(0);
-		g_engine->_sound->playSound(HOSE_DETAIL, 2);
+		_G(det)->stopSound(0);
+		_G(det)->playSound(FLAP_DETAIL, 1);
+		_G(det)->stopSound(0);
+		_G(det)->playSound(HOSE_DETAIL, 2);
 	}
 
 	while (!ende) {
@@ -457,15 +457,15 @@ void Room0::feederStart(int16 mode) {
 
 	if (!mode) {
 		trapDoorOpen();
-		g_engine->_sound->playSound(FLAP_DETAIL, 0);
-		g_engine->_sound->stopSound(1);
-		g_engine->_sound->playSound(FEEDER_HOSE, 0);
-		g_engine->_sound->stopSound(2);
+		_G(det)->playSound(FLAP_DETAIL, 0);
+		_G(det)->stopSound(1);
+		_G(det)->playSound(FEEDER_HOSE, 0);
+		_G(det)->stopSound(2);
 	} else {
-		g_engine->_sound->stopSound(0);
-		g_engine->_sound->playSound(FLAP_DETAIL, 1);
-		g_engine->_sound->stopSound(0);
-		g_engine->_sound->playSound(FEEDER_HOSE, 2);
+		_G(det)->stopSound(0);
+		_G(det)->playSound(FLAP_DETAIL, 1);
+		_G(det)->stopSound(0);
+		_G(det)->playSound(FEEDER_HOSE, 2);
 	}
 
 	bool endLoopFl = false;
@@ -747,8 +747,8 @@ void Room0::feederAni() {
 
 			_G(gameState)._personRoomNr[P_CHEWY] = 1;
 			_G(room)->loadRoom(&_G(room_blk), _G(gameState)._personRoomNr[P_CHEWY], &_G(gameState));
-			setPersonPos(_G(Rdi)->AutoMov[4]._x - CH_HOT_MOV_X,
-			               _G(Rdi)->AutoMov[4]._y - CH_HOT_MOV_Y, P_CHEWY, P_RIGHT);
+			setPersonPos(_G(Rdi)->autoMove[4]._x - CH_HOT_MOV_X,
+			               _G(Rdi)->autoMove[4]._y - CH_HOT_MOV_Y, P_CHEWY, P_RIGHT);
 			_G(moveState)[P_CHEWY]._delayCount = 0;
 
 			setShadowPalette(4, false);
diff --git a/engines/chewy/rooms/room01.cpp b/engines/chewy/rooms/room01.cpp
index cf2f1621649..68254f5c21f 100644
--- a/engines/chewy/rooms/room01.cpp
+++ b/engines/chewy/rooms/room01.cpp
@@ -37,24 +37,24 @@ void Room1::gottenCard() {
 }
 
 void Room1::gedAction(int index) {
-	#define KABELABDECKUNG 1
+	#define CABLEBOX 1
 
 	if (index == 0 && !_G(gameState).R2ElectrocutedBork) {
-		bool flag = false;
-		if (_G(cur)->getInventoryCursor() == KABEL_INV) {
-			flag = true;
+		bool pickedUpCable = false;
+		if (_G(cur)->getInventoryCursor() == CABLE_INV) {
+			pickedUpCable = true;
 			delInventory(_G(cur)->getInventoryCursor());
-		} else if (_G(obj)->checkInventory(KABEL_INV)) {
-			flag = true;
-			_G(obj)->del_obj_use(KABEL_INV);
-			remove_inventory(KABEL_INV);
+		} else if (_G(obj)->checkInventory(CABLE_INV)) {
+			pickedUpCable = true;
+			_G(obj)->del_obj_use(CABLE_INV);
+			remove_inventory(CABLE_INV);
 		}
 
-		if (flag) {
+		if (pickedUpCable) {
 			startAadWait(54);
 			_G(atds)->set_ats_str(8, TXT_MARK_LOOK, 0, ATS_DATA);
-			_G(gameState).room_s_obj[KABELABDECKUNG].ZustandFlipFlop = 2;
-			_G(obj)->calc_rsi_flip_flop(KABELABDECKUNG);
+			_G(gameState).room_s_obj[CABLEBOX].ZustandFlipFlop = 2;
+			_G(obj)->calc_rsi_flip_flop(CABLEBOX);
 			_G(obj)->calc_all_static_detail();
 		}
 	}
diff --git a/engines/chewy/rooms/room04.cpp b/engines/chewy/rooms/room04.cpp
index 83cb97b48b0..adddb3a621d 100644
--- a/engines/chewy/rooms/room04.cpp
+++ b/engines/chewy/rooms/room04.cpp
@@ -90,13 +90,13 @@ int16 Room4::comp_probe() {
 					--curX;
 				else
 					curX = 2;
-				g_engine->_sound->playSound(0, 1);
+				_G(det)->playSound(0, 1);
 				break;
 
 			case 1:
 				endLoop = true;
 				sprNr = YELLOW_FRAME;
-				g_engine->_sound->playSound(0, 0);
+				_G(det)->playSound(0, 0);
 				break;
 
 			case 2:
@@ -104,7 +104,7 @@ int16 Room4::comp_probe() {
 					++curX;
 				else
 					curX = 0;
-				g_engine->_sound->playSound(0, 2);
+				_G(det)->playSound(0, 2);
 				break;
 
 			default:
diff --git a/engines/chewy/rooms/room17.cpp b/engines/chewy/rooms/room17.cpp
index 9cd46ac53e7..f194e61c16e 100644
--- a/engines/chewy/rooms/room17.cpp
+++ b/engines/chewy/rooms/room17.cpp
@@ -300,12 +300,12 @@ int16 Room17::energie_hebel() {
 
 		_G(atds)->set_ats_str(142, _G(gameState).R17EnergieOut ? 1 : 0, ATS_DATA);
 		_G(atds)->set_ats_str(140, _G(gameState).R17EnergieOut ? 1 : 0, ATS_DATA);
-		g_engine->_sound->playSound(12);
+		_G(det)->playSound(12, 0);
 
 		if (_G(gameState).R17EnergieOut) {
-			g_engine->_sound->stopSound(0);
+			_G(det)->stopSound(0);
 		} else {
-			g_engine->_sound->playSound(15, 0);
+			_G(det)->playSound(15, 0);
 		}
 	}
 
diff --git a/engines/chewy/rooms/room24.cpp b/engines/chewy/rooms/room24.cpp
index b5f72547bfa..879fcc62a9c 100644
--- a/engines/chewy/rooms/room24.cpp
+++ b/engines/chewy/rooms/room24.cpp
@@ -92,16 +92,16 @@ void Room24::use_hebel(int16 txt_nr) {
 
 	if (_G(gameState).R24Hebel[0] == 1 && _G(gameState).R24Hebel[1] == 0 && _G(gameState).R24Hebel[2] == 2) {
 		_G(gameState).R16F5Exit = true;
-		g_engine->_sound->playSound(1, 0);
-		g_engine->_sound->stopSound(1);
+		_G(det)->playSound(1, 0);
+		_G(det)->stopSound(1);
 		_G(det)->startDetail(1, 1, ANI_FRONT);
 		_G(det)->showStaticSpr(10);
 		_G(atds)->set_ats_str(164, TXT_MARK_NAME, 1, ATS_DATA);
 
 	} else if (_G(gameState).R16F5Exit) {
 		_G(det)->hideStaticSpr(10);
-		g_engine->_sound->playSound(1, 1);
-		g_engine->_sound->stopSound(0);
+		_G(det)->playSound(1, 1);
+		_G(det)->stopSound(0);
 		_G(det)->startDetail(1, 1, ANI_BACK);
 		_G(gameState).R16F5Exit = false;
 		_G(atds)->set_ats_str(164, TXT_MARK_NAME, 0, ATS_DATA);
@@ -134,8 +134,8 @@ void Room24::calc_animation(int16 kristall_nr) {
 
 		if (KRISTALL_SPR[kristall_nr][_G(gameState).R24Hebel[kristall_nr]] == 20) {
 			int16 ani_nr = _G(gameState).R24KristallLast[kristall_nr] == 13 ? 7 : 8;
-			g_engine->_sound->playSound(ani_nr + kristall_nr * 4, 0);
-			g_engine->_sound->stopSound(0);
+			_G(det)->playSound(ani_nr + kristall_nr * 4, 0);
+			_G(det)->stopSound(0);
 			_G(det)->hideStaticSpr(_G(gameState).R24KristallLast[kristall_nr] + kristall_nr * 2);
 			startSetAILWait(ani_nr + kristall_nr * 4, 1, ANI_BACK);
 			startSetAILWait(6 + kristall_nr * 4, 1, ANI_BACK);
@@ -143,8 +143,8 @@ void Room24::calc_animation(int16 kristall_nr) {
 
 		} else if (_G(gameState).R24KristallLast[kristall_nr] == 20) {
 			int16 ani_nr = KRISTALL_SPR[kristall_nr][_G(gameState).R24Hebel[kristall_nr]] == 13 ? 7 : 8;
-			g_engine->_sound->stopSound(0);
-			g_engine->_sound->playSound(5 + ani_nr + kristall_nr * 4, 0);
+			_G(det)->stopSound(0);
+			_G(det)->playSound(5 + ani_nr + kristall_nr * 4, 0);
 			_G(det)->stop_detail(5 + kristall_nr * 4);
 			startSetAILWait(6 + kristall_nr * 4, 1, ANI_FRONT);
 			startSetAILWait(ani_nr + kristall_nr * 4, 1, ANI_FRONT);
diff --git a/engines/chewy/rooms/room25.cpp b/engines/chewy/rooms/room25.cpp
index 00edbc2c09b..e3d6c4f2d05 100644
--- a/engines/chewy/rooms/room25.cpp
+++ b/engines/chewy/rooms/room25.cpp
@@ -47,7 +47,7 @@ static const MovLine SURIMY_MPKT[2] = {
 
 void Room25::entry() {
 	if (!_G(gameState).R25GleiteLoesch) {
-		g_engine->_sound->playSound(0, 0);
+		_G(det)->playSound(0, 0);
 
 		for (int i = 0; i < 9; ++i)
 			_G(det)->startDetail(i, 255, ANI_FRONT);
@@ -75,7 +75,7 @@ void Room25::entry() {
 		_G(gameState).R25FirstEntry = true;
 		_G(gameState)._personHide[P_CHEWY] = true;
 		flic_cut(FCUT_029);
-		g_engine->_sound->playSound(0, 0);
+		_G(det)->playSound(0, 0);
 		_G(fx_blend) = BLEND_NONE;
 		setPersonPos(219, 141, P_CHEWY, P_RIGHT);
 		_G(gameState)._personHide[P_CHEWY] = false;
@@ -108,7 +108,7 @@ int16 Room25::gleiter_loesch() {
 			_G(obj)->calc_rsi_flip_flop(SIB_SCHLAUCH_R25);
 			_G(atds)->set_ats_str(219, 1, ATS_DATA);
 			_G(atds)->set_ats_str(187, 1, ATS_DATA);
-			g_engine->_sound->stopSound(0);
+			_G(det)->stopSound(0);
 
 			for (int i = 0; i < 9; ++i)
 				_G(det)->stop_detail(i);
diff --git a/engines/chewy/rooms/room26.cpp b/engines/chewy/rooms/room26.cpp
index b7192ef5442..a4eb47ea382 100644
--- a/engines/chewy/rooms/room26.cpp
+++ b/engines/chewy/rooms/room26.cpp
@@ -30,9 +30,9 @@ namespace Rooms {
 
 void Room26::entry() {
 	if (_G(gameState).R25GleiteLoesch)
-		g_engine->_sound->stopSound(0);
+		_G(det)->stopSound(0);
 	else
-		g_engine->_sound->playSound(0, 0);
+		_G(det)->playSound(0, 0);
 }
 
 } // namespace Rooms
diff --git a/engines/chewy/rooms/room31.cpp b/engines/chewy/rooms/room31.cpp
index faa5fed4de0..3f158681cb2 100644
--- a/engines/chewy/rooms/room31.cpp
+++ b/engines/chewy/rooms/room31.cpp
@@ -101,7 +101,7 @@ int16 Room31::open_luke() {
 		autoMove(2, P_CHEWY);
 		start_spz_wait(CH_LGET_U, 1, false, P_CHEWY);
 		_G(gameState).R31KlappeZu = false;
-		g_engine->_sound->playSound(3);
+		_G(det)->playSound(3, 0);
 		calc_luke();
 		showCur();
 	}
@@ -118,7 +118,7 @@ int16 Room31::close_luke_proc1() {
 		autoMove(2, P_CHEWY);
 		start_spz_wait(CH_LGET_O, 1, false, P_CHEWY);
 		_G(gameState).R31KlappeZu = true;
-		g_engine->_sound->playSound(3);
+		_G(det)->playSound(3, 0);
 		calc_luke();
 		showCur();
 	}
@@ -132,8 +132,8 @@ void Room31::close_luke_proc3() {
 		autoMove(2, P_CHEWY);
 		start_spz_wait(13, 1, false, P_CHEWY);
 		_G(gameState).R31KlappeZu = true;
-		g_engine->_sound->playSound(3);
-		g_engine->_sound->playSound(3, 1, false);
+		_G(det)->playSound(3, 0);
+		_G(det)->playSound(3, 1);
 		calc_luke();
 		showCur();
 	}
diff --git a/engines/chewy/rooms/room37.cpp b/engines/chewy/rooms/room37.cpp
index 5b4eef10626..e0ba788caea 100644
--- a/engines/chewy/rooms/room37.cpp
+++ b/engines/chewy/rooms/room37.cpp
@@ -58,7 +58,7 @@ void Room37::entry() {
 		if (!_G(gameState).R37HundScham) {
 			_G(timer_nr)[0] = _G(room)->set_timer(3, 4);
 			_G(det)->set_static_ani(3, -1);
-			g_engine->_sound->playSound(3, 0);
+			_G(det)->playSound(3, 0);
 		}
 	}
 
@@ -158,7 +158,7 @@ int16 Room37::use_glas() {
 			startAadWait(146);
 			showCur();
 			_G(flags).NoScroll = false;
-			g_engine->_sound->playSound(3);
+			_G(det)->playSound(3, 0);
 		} else {
 			autoMove(4, P_CHEWY);
 		}
@@ -174,7 +174,7 @@ void Room37::dog_bell() {
 
 	if (!_G(flags).AutoAniPlay) {
 		_G(flags).AutoAniPlay = true;
-		g_engine->_sound->stopSound(0); // nr 3, sslot 0
+		_G(det)->stopSound(0); // nr 3, sslot 0
 
 		if (!_G(gameState).R37Gebiss) {
 			stopPerson(P_CHEWY);
@@ -198,8 +198,8 @@ void Room37::dog_bell() {
 			_G(det)->showStaticSpr(9);
 			startAniBlock(3, ABLOCK31);
 			_G(det)->set_static_ani(3, -1);
-			g_engine->_sound->playSound(3, 0);
-//			g_engine->_sound->playSound(3);
+			_G(det)->playSound(3, 0);
+//			_G(det)->playSound(3);
 			enable_timer();
 			dia_nr = 149;
 			ani_nr = CH_TALK12;
diff --git a/engines/chewy/rooms/room40.cpp b/engines/chewy/rooms/room40.cpp
index 8e0218b35a0..fcd5af1d964 100644
--- a/engines/chewy/rooms/room40.cpp
+++ b/engines/chewy/rooms/room40.cpp
@@ -178,7 +178,7 @@ void Room40::move_train(int16 mode) {
 	if (mode && _G(gameState).ChewyAni == CHEWY_PUMPKIN)
 		_G(det)->showStaticSpr(12);
 
-	g_engine->_sound->playSound(7, 0);
+	_G(det)->playSound(7, 0);
 	int16 delay = 0;
 
 	while (ax < 560) {
diff --git a/engines/chewy/rooms/room41.cpp b/engines/chewy/rooms/room41.cpp
index ae2bfbc21a4..d0fe44b354b 100644
--- a/engines/chewy/rooms/room41.cpp
+++ b/engines/chewy/rooms/room41.cpp
@@ -40,7 +40,7 @@ void Room41::entry() {
 	hideCur();
 
 	if (!_G(gameState).R41LolaOk) {
-		g_engine->_sound->playSound(6);
+		_G(det)->playSound(6, 0);
 
 		if (!_G(flags).LoadGame) {
 			_G(room)->set_timer_status(0, TIMER_STOP);
@@ -196,7 +196,7 @@ int16 Room41::use_lola() {
 		action_flag = true;
 		_G(gameState).R41LolaOk = true;
 		autoMove(4, P_CHEWY);
-		g_engine->_sound->stopSound(0);
+		_G(det)->stopSound(0);
 		flic_cut(FCUT_057);
 		setPersonPos(127, 112, P_CHEWY, P_LEFT);
 		_G(det)->stop_detail(6);
diff --git a/engines/chewy/rooms/room42.cpp b/engines/chewy/rooms/room42.cpp
index 27e4d290c3f..490db76a87f 100644
--- a/engines/chewy/rooms/room42.cpp
+++ b/engines/chewy/rooms/room42.cpp
@@ -33,7 +33,7 @@ namespace Rooms {
 
 void Room42::entry() {
 	if (!_G(gameState).R42BeamterWach) {
-		g_engine->_sound->playSound(0);
+		_G(det)->playSound(0, 0);
 		_G(det)->startDetail(0, 255, ANI_FRONT);
 	}
 
@@ -45,7 +45,7 @@ void Room42::entry() {
 			_G(timer_nr)[0] = _G(room)->set_timer(8, 5);
 			_G(det)->set_static_ani(8, -1);
 			_G(gameState).R42BeamterWach = true;
-			g_engine->_sound->stopSound(0);
+			_G(det)->stopSound(0);
 
 			_G(SetUpScreenFunc) = setup_func;
 
@@ -194,7 +194,7 @@ void Room42::dialogWithStationEmployee(int16 str_end_nr) {
 			break;
 
 		case 2:
-			g_engine->_sound->playSound(4);
+			_G(det)->playSound(4, 0);
 			startSetAILWait(4, 13, ANI_FRONT);
 			break;
 
@@ -212,7 +212,7 @@ void Room42::dialogWithStationEmployee(int16 str_end_nr) {
 		}
 
 		_G(det)->stop_detail(0);
-		g_engine->_sound->stopSound(0);
+		_G(det)->stopSound(0);
 		startSetAILWait(1, 1, ANI_FRONT);
 		_G(det)->startDetail(2, 255, ANI_FRONT);
 
@@ -223,8 +223,8 @@ void Room42::dialogWithStationEmployee(int16 str_end_nr) {
 
 		_G(det)->stop_detail(2);
 		_G(det)->startDetail(0, 255, ANI_FRONT);
-		g_engine->_sound->playSound(0, 0);
-		g_engine->_sound->playSound(0);
+		_G(det)->playSound(0, 0);
+		_G(det)->playSound(0, 0);
 	}
 
 	_G(gameState)._personHide[P_CHEWY] = true;
diff --git a/engines/chewy/rooms/room43.cpp b/engines/chewy/rooms/room43.cpp
index 01273d777dc..012f26b4dd5 100644
--- a/engines/chewy/rooms/room43.cpp
+++ b/engines/chewy/rooms/room43.cpp
@@ -35,7 +35,7 @@ void Room43::night_small() {
 	_G(gameState).scrolly = 0;
 	switchRoom(43);
 	g_engine->_sound->stopMusic();
-	g_engine->_sound->playSound(0);
+	_G(det)->playSound(0, 0);
 	hideCur();
 	_G(flags).NoScroll = true;
 	_G(gameState).ScrollxStep = 1;
@@ -57,7 +57,7 @@ void Room43::night_small() {
 	_G(gameState).scrollx = 194;
 	startAadWait(191);
 	flic_cut(FCUT_058);
-	g_engine->_sound->stopSound(0);
+	_G(det)->stopSound(0);
 	_G(flags).NoScroll = false;
 	_G(gameState).ScrollxStep = 1;
 	_G(gameState).scrollx = 0;
@@ -72,7 +72,7 @@ void Room43::catch_pg() {
 	_G(gameState).scrolly = 0;
 	switchRoom(43);
 	g_engine->_sound->stopMusic();
-	g_engine->_sound->playSound(0);
+	_G(det)->playSound(0, 0);
 	hideCur();
 	_G(flags).NoScroll = true;
 	_G(gameState).ScrollxStep = 1;
@@ -82,7 +82,7 @@ void Room43::catch_pg() {
 	_G(gameState).R43GetPgLady = true;
 	flic_cut(FCUT_058);
 
-	g_engine->_sound->stopSound(0);
+	_G(det)->stopSound(0);
 	register_cutscene(14);
 	
 	_G(flags).NoScroll = false;
diff --git a/engines/chewy/rooms/room45.cpp b/engines/chewy/rooms/room45.cpp
index 5bd01c989a4..d6afae361cf 100644
--- a/engines/chewy/rooms/room45.cpp
+++ b/engines/chewy/rooms/room45.cpp
@@ -213,7 +213,7 @@ void Room45::taxi_mov() {
 	_G(HowardMov) = 2;
 	_G(room)->set_timer_status(12, TIMER_STOP);
 	_G(det)->del_static_ani(12);
-	g_engine->_sound->playSound(15, 1);
+	_G(det)->playSound(15, 1);
 	_G(det)->showStaticSpr(11);
 	autoMove(3, P_CHEWY);
 	_G(gameState)._personHide[P_CHEWY] = true;
@@ -227,11 +227,10 @@ void Room45::taxi_mov() {
 	}
 
 	_G(det)->hideStaticSpr(11);
-	g_engine->_sound->playSound(15, 2);
-	g_engine->_sound->playSound(15, 2, false);
-	g_engine->_sound->playSound(15, 0);
+	_G(det)->playSound(15, 2);
+	_G(det)->playSound(15, 0);
 	startSetAILWait(15, 1, ANI_FRONT);
-	g_engine->_sound->stopSound(0);
+	_G(det)->stopSound(0);
 	switchRoom(48);
 }
 
diff --git a/engines/chewy/rooms/room47.cpp b/engines/chewy/rooms/room47.cpp
index f0e16282f76..297ebc32a3d 100644
--- a/engines/chewy/rooms/room47.cpp
+++ b/engines/chewy/rooms/room47.cpp
@@ -67,8 +67,7 @@ int16 Room47::use_button(int16 txt_nr) {
 			break;
 		}
 
-		g_engine->_sound->playSound(0, 0);
-		g_engine->_sound->playSound(0);
+		_G(det)->playSound(0, 0);
 		++_G(gameState).R47Schloss[k_nr];
 
 		if (_G(gameState).R47Schloss[k_nr] > 9)
diff --git a/engines/chewy/rooms/room48.cpp b/engines/chewy/rooms/room48.cpp
index e4ca69eb146..d114a5becb3 100644
--- a/engines/chewy/rooms/room48.cpp
+++ b/engines/chewy/rooms/room48.cpp
@@ -137,7 +137,7 @@ void Room48::setup_func() {
 							_G(det)->stop_detail(0);
 							_G(det)->del_static_ani(0);
 							startSetAILWait(2, 1, ANI_FRONT);
-							g_engine->_sound->stopSound(0);
+							_G(det)->stopSound(0);
 							_G(menu_item) = CUR_WALK;
 							cursorChoice(_G(menu_item));
 							showCur();
diff --git a/engines/chewy/rooms/room49.cpp b/engines/chewy/rooms/room49.cpp
index 0e1487bf415..3de0cd4d306 100644
--- a/engines/chewy/rooms/room49.cpp
+++ b/engines/chewy/rooms/room49.cpp
@@ -261,7 +261,7 @@ int16 Room49::use_taxi() {
 
 		_G(det)->hideStaticSpr(7);
 		startSetAILWait(5, 1, ANI_FRONT);
-		g_engine->_sound->stopSound(0);
+		_G(det)->stopSound(0);
 		switchRoom(48);
 	}
 
diff --git a/engines/chewy/rooms/room51.cpp b/engines/chewy/rooms/room51.cpp
index 8bd50e5fe61..2981e756ee5 100644
--- a/engines/chewy/rooms/room51.cpp
+++ b/engines/chewy/rooms/room51.cpp
@@ -237,8 +237,7 @@ int16 Room51::use_door(int16 txt_nr) {
 			autoMove(9, P_CHEWY);
 
 			if (!_G(gameState).R51KillerWeg) {
-				g_engine->_sound->playSound(2, 0);
-				g_engine->_sound->playSound(2);
+				_G(det)->playSound(2, 0);
 				_G(det)->showStaticSpr(1);
 				startSetAILWait(2, 1, ANI_FRONT);
 				_G(det)->startDetail(5, 255, ANI_FRONT);
@@ -249,12 +248,12 @@ int16 Room51::use_door(int16 txt_nr) {
 					_G(det)->stop_detail(5);
 					startAniBlock(5, ABLOCK37);
 					_G(det)->hideStaticSpr(1);
-					g_engine->_sound->stopSound(0);
+					_G(det)->stopSound(0);
 					startAadWait(284);
 				} else {
 					_G(gameState).R51KillerWeg = true;
 					startAadWait(290);
-					g_engine->_sound->stopSound(0);
+					_G(det)->stopSound(0);
 					_G(out)->fadeOut();
 					_G(out)->setPointer(nullptr);
 					_G(out)->cls();
diff --git a/engines/chewy/rooms/room52.cpp b/engines/chewy/rooms/room52.cpp
index 82f6586bdcd..33216f137d6 100644
--- a/engines/chewy/rooms/room52.cpp
+++ b/engines/chewy/rooms/room52.cpp
@@ -36,10 +36,9 @@ void Room52::entry() {
 
 	if (_G(gameState).R52HotDogOk && !_G(gameState).R52KakerWeg) {
 		plot_armee(0);
-		g_engine->_sound->playSound(0, 0);
-		g_engine->_sound->playSound(0);
+		_G(det)->playSound(0, 0);
 	} else {
-		g_engine->_sound->stopSound(0);
+		_G(det)->stopSound(0);
 	}
 
 	if (_G(gameState).R52KakerWeg)
@@ -82,8 +81,7 @@ int16 Room52::use_hot_dog() {
 		autoMove(4, P_CHEWY);
 		_G(gameState).R52HotDogOk = true;
 		plot_armee(20);
-		g_engine->_sound->playSound(0, 0);
-		g_engine->_sound->playSound(0);
+		_G(det)->playSound(0, 0);
 		_G(atds)->set_ats_str(341, 1, ATS_DATA);
 		autoMove(2, P_CHEWY);
 		setPersonSpr(P_LEFT, P_CHEWY);
@@ -94,8 +92,7 @@ int16 Room52::use_hot_dog() {
 		autoMove(5, P_CHEWY);
 		_G(gameState)._personHide[P_CHEWY] = true;
 		startSetAILWait(7, 1, ANI_FRONT);
-		g_engine->_sound->playSound(7, 0);
-		g_engine->_sound->playSound(7);
+		_G(det)->playSound(7, 0);
 		_G(det)->startDetail(8, 255, ANI_FRONT);
 
 		for (int16 i = 0; i < 5; i++) {
@@ -103,11 +100,11 @@ int16 Room52::use_hot_dog() {
 			_G(det)->stop_detail(2 + i);
 		}
 
-		g_engine->_sound->stopSound(0);
+		_G(det)->stopSound(0);
 		_G(det)->stop_detail(0);
 		_G(det)->stop_detail(8);
 		startSetAILWait(7, 1, ANI_BACK);
-		g_engine->_sound->stopSound(0);
+		_G(det)->stopSound(0);
 		_G(gameState)._personHide[P_CHEWY] = false;
 		_G(atds)->setControlBit(341, ATS_ACTIVE_BIT);
 		startAadWait(303);
diff --git a/engines/chewy/rooms/room54.cpp b/engines/chewy/rooms/room54.cpp
index d5106d73fe5..41cc9b4e8c2 100644
--- a/engines/chewy/rooms/room54.cpp
+++ b/engines/chewy/rooms/room54.cpp
@@ -138,9 +138,9 @@ int16 Room54::use_schalter() {
 			start_spz_wait(CH_ROCK_GET2, 1, false, P_CHEWY);
 			_G(det)->showStaticSpr(0);
 			autoMove(2, P_CHEWY);
-			g_engine->_sound->playSound(1, 0);
-			g_engine->_sound->playSound(0, 1);
-			g_engine->_sound->stopSound(2);
+			_G(det)->playSound(1, 0);
+			_G(det)->playSound(0, 1);
+			_G(det)->stopSound(2);
 
 			startSetAILWait(1, 1, ANI_FRONT);
 			_G(det)->startDetail(3, 255, ANI_FRONT);
@@ -152,11 +152,11 @@ int16 Room54::use_schalter() {
 			if (_G(gameState).R54LiftCount < 3) {
 				startSetAILWait(2, 1, ANI_FRONT);
 				_G(det)->hideStaticSpr(0);
-				g_engine->_sound->stopSound(0);
-				g_engine->_sound->stopSound(1);
-				g_engine->_sound->playSound(1, 2);
+				_G(det)->stopSound(0);
+				_G(det)->stopSound(1);
+				_G(det)->playSound(1, 2);
 				startSetAILWait(1, 1, ANI_BACK);
-				g_engine->_sound->stopSound(2);
+				_G(det)->stopSound(2);
 				aad_nr = 295;
 
 			} else {
@@ -285,8 +285,7 @@ int16 Room54::use_azug() {
 				_G(gameState).R55Location = true;
 				_G(SetUpScreenFunc) = nullptr;
 				goAutoXy(91, 62, P_HOWARD, ANI_WAIT);
-				g_engine->_sound->playSound(1, 0);
-				g_engine->_sound->playSound(1);
+				_G(det)->playSound(1, 0);
 
 				int16 ch_y = 68;
 				int16 ay = 0;
@@ -326,8 +325,7 @@ void Room54::aufzug_ab() {
 	_G(gameState).scrollx = 0;
 	_G(SetUpScreenFunc) = setup_func;
 	_G(det)->showStaticSpr(12);
-	g_engine->_sound->playSound(1, 0);
-	g_engine->_sound->playSound(1);
+	_G(det)->playSound(1, 0);
 
 	int16 ch_y = -40;
 	int16 ay = -108;
@@ -349,7 +347,7 @@ void Room54::aufzug_ab() {
 		SHOULD_QUIT_RETURN;
 	}
 
-	g_engine->_sound->stopSound(0);
+	_G(det)->stopSound(0);
 	_G(det)->hideStaticSpr(12);
 	setPersonPos(99, 82, P_CHEWY, P_RIGHT);
 	_G(gameState)._personHide[P_CHEWY] = false;
diff --git a/engines/chewy/rooms/room56.cpp b/engines/chewy/rooms/room56.cpp
index 5240db78118..66543fcb957 100644
--- a/engines/chewy/rooms/room56.cpp
+++ b/engines/chewy/rooms/room56.cpp
@@ -57,12 +57,12 @@ void Room56::entry() {
 			_G(zoom_horizont) = 0;
 			setPersonPos(-6, 16, P_HOWARD, P_RIGHT);
 			setPersonPos(3, 42, P_CHEWY, P_RIGHT);
-			g_engine->_sound->stopSound(0);
-			g_engine->_sound->playSound(7, 1);
+			_G(det)->stopSound(0);
+			_G(det)->playSound(7, 1);
 			startSetAILWait(7, 1, ANI_BACK);
 			startSetAILWait(8, 1, ANI_FRONT);
-			g_engine->_sound->stopSound(1);
-			g_engine->_sound->playSound(7, 0);
+			_G(det)->stopSound(1);
+			_G(det)->playSound(7, 0);
 			startSetAILWait(7, 1, ANI_FRONT);
 			setupScreen(DO_SETUP);
 
@@ -188,8 +188,7 @@ void Room56::entry() {
 		break;
 	}
 
-	g_engine->_sound->playSound(9, 0);
-	g_engine->_sound->playSound(9);
+	_G(det)->playSound(9, 0);
 }
 
 void Room56::xit() {
@@ -212,8 +211,8 @@ int16 Room56::use_taxi() {
 		action_ret = true;
 		hideCur();
 		autoMove(1, P_CHEWY);
-		g_engine->_sound->stopSound(0);
-		g_engine->_sound->playSound(7, 1);
+		_G(det)->stopSound(0);
+		_G(det)->playSound(7, 1);
 		startSetAILWait(7, 1, ANI_BACK);
 		_G(det)->startDetail(8, 1, ANI_FRONT);
 		_G(zoom_horizont) = 0;
@@ -302,12 +301,12 @@ int16 Room56::use_kneipe() {
 				auto_scroll(0, 0);
 				startSetAILWait(12, 3, ANI_FRONT);
 				flic_cut(FCUT_075);
-				g_engine->_sound->stopSound(0);
-				g_engine->_sound->playSound(9);
+				_G(det)->stopSound(0);
+				_G(det)->playSound(9, 0);
 				_G(det)->startDetail(10, 6, ANI_FRONT);
 				startAadWait(307);
 				_G(det)->stop_detail(10);
-				g_engine->_sound->playSound(10, 0);
+				_G(det)->playSound(10, 0);
 				_G(out)->fadeOut();
 				setupScreen(DO_SETUP);
 				_G(gameState)._personHide[P_CHEWY] = false;
@@ -361,8 +360,7 @@ int16 Room56::use_kneipe() {
 		setupScreen(NO_SETUP);
 		_G(fx_blend) = BLEND3;
 		showCur();
-		g_engine->_sound->playSound(9, 0);
-		g_engine->_sound->playSound(9);
+		_G(det)->playSound(9, 0);
 	}
 	return action_ret;
 }
diff --git a/engines/chewy/rooms/room57.cpp b/engines/chewy/rooms/room57.cpp
index bd6d9a60cb8..7c3d1b047b7 100644
--- a/engines/chewy/rooms/room57.cpp
+++ b/engines/chewy/rooms/room57.cpp
@@ -84,8 +84,7 @@ int16 Room57::use_taxi() {
 		action_ret = true;
 		hideCur();
 		autoMove(3, P_CHEWY);
-		g_engine->_sound->playSound(3, 0);
-		g_engine->_sound->playSound(3);
+		_G(det)->playSound(3, 0);
 		_G(det)->showStaticSpr(7);
 		goAutoXy(16, 160, P_CHEWY, ANI_WAIT);
 		_G(gameState)._personHide[P_CHEWY] = true;
@@ -98,12 +97,12 @@ int16 Room57::use_taxi() {
 			_G(gameState)._personRoomNr[P_HOWARD] = 48;
 		}
 		_G(det)->hideStaticSpr(7);
-		g_engine->_sound->playSound(3, 1);
-		g_engine->_sound->playSound(3);
+		_G(det)->playSound(3, 1);
+		_G(det)->playSound(3, 0);
 		_G(room)->set_timer_status(3, TIMER_STOP);
 		_G(det)->del_static_ani(3);
 		startSetAILWait(5, 1, ANI_FRONT);
-		g_engine->_sound->stopSound(0);
+		_G(det)->stopSound(0);
 		switchRoom(48);
 	}
 	return action_ret;
@@ -140,7 +139,7 @@ int16 Room57::use_pfoertner() {
 			_G(gameState).room_e_obj[91].Attribut = EXIT_TOP;
 			_G(det)->hideStaticSpr(4);
 			startSetAILWait(6, 1, ANI_WAIT);
-			g_engine->_sound->stopSound(0);
+			_G(det)->stopSound(0);
 			_G(atds)->setControlBit(358, ATS_ACTIVE_BIT);
 		} else {
 			startAadWait(349);
diff --git a/engines/chewy/rooms/room68.cpp b/engines/chewy/rooms/room68.cpp
index c0b797cadec..48057029a03 100644
--- a/engines/chewy/rooms/room68.cpp
+++ b/engines/chewy/rooms/room68.cpp
@@ -102,8 +102,8 @@ void Room68::setup_func() {
 		if (_G(det)->get_ani_status(_G(r68HohesC)) == false) {
 			_G(r68HohesC) = 2;
 			if (g_engine->_sound->speechEnabled()) {
-				g_engine->_sound->playSound(2, 0);
-				g_engine->_sound->playSound(_G(r68HohesC));
+				_G(det)->playSound(2, 0);
+				_G(det)->playSound(_G(r68HohesC), 0);
 				_G(det)->startDetail(_G(r68HohesC), 255, ANI_FRONT);
 
 				// TODO
@@ -360,7 +360,7 @@ void Room68::kostuem_aad(int16 aad_nr) {
 			startSetAILWait(23, 3, ANI_FRONT);
 		else {
 			_G(det)->startDetail(23, 255, ANI_FRONT);
-			g_engine->_sound->playSound(109, 1, false);
+			_G(det)->playSound(109, 1);
 			waitShowScreen(2);
 
 			g_engine->_sound->waitForSpeechToFinish();
@@ -368,7 +368,7 @@ void Room68::kostuem_aad(int16 aad_nr) {
 			_G(det)->stop_detail(23);
 		}
 
-		g_engine->_sound->playSound(108, 1, false);
+		_G(det)->playSound(108, 1);
 		
 		_G(det)->startDetail(24, 255, ANI_FRONT);
 		setPersonPos(26, 40, P_NICHELLE, P_RIGHT);
diff --git a/engines/chewy/rooms/room69.cpp b/engines/chewy/rooms/room69.cpp
index 4bd1dc5e783..6249f2cc0ee 100644
--- a/engines/chewy/rooms/room69.cpp
+++ b/engines/chewy/rooms/room69.cpp
@@ -31,8 +31,7 @@ namespace Chewy {
 namespace Rooms {
 
 void Room69::entry(int16 eib_nr) {
-	g_engine->_sound->playSound(0, 0);
-	g_engine->_sound->playSound(0);
+	_G(det)->playSound(0, 0);
 	
 	_G(gameState).ScrollxStep = 2;
 	_G(gameState).ZoomXy[P_HOWARD][0] = 46;
diff --git a/engines/chewy/rooms/room70.cpp b/engines/chewy/rooms/room70.cpp
index 256e1797724..1acb1816c69 100644
--- a/engines/chewy/rooms/room70.cpp
+++ b/engines/chewy/rooms/room70.cpp
@@ -30,8 +30,7 @@ namespace Chewy {
 namespace Rooms {
 
 void Room70::entry(int16 eib_nr) {
-	g_engine->_sound->playSound(0, 0);
-	g_engine->_sound->playSound(0);
+	_G(det)->playSound(0, 0);
 	_G(gameState).ScrollxStep = 2;
 	_G(gameState).ZoomXy[P_HOWARD][0] = 70;
 	_G(gameState).ZoomXy[P_HOWARD][1] = 100;
diff --git a/engines/chewy/rooms/room71.cpp b/engines/chewy/rooms/room71.cpp
index caa3e3100fd..4df1509a874 100644
--- a/engines/chewy/rooms/room71.cpp
+++ b/engines/chewy/rooms/room71.cpp
@@ -34,10 +34,8 @@ int Room71::_state;
 int Room71::_delay;
 
 void Room71::entry(int16 eib_nr) {
-	g_engine->_sound->playSound(0, 0);
-	g_engine->_sound->playSound(0, 1);
-	g_engine->_sound->playSound(0);
-	g_engine->_sound->playSound(0, 1, false);
+	_G(det)->playSound(0, 0);
+	_G(det)->playSound(0, 1);
 	_G(gameState).ScrollxStep = 2;
 	_G(spieler_mi)[P_HOWARD].Mode = true;
 	_G(spieler_mi)[P_NICHELLE].Mode = true;
diff --git a/engines/chewy/rooms/room72.cpp b/engines/chewy/rooms/room72.cpp
index e933e8f17be..104bb56749a 100644
--- a/engines/chewy/rooms/room72.cpp
+++ b/engines/chewy/rooms/room72.cpp
@@ -30,8 +30,7 @@ namespace Chewy {
 namespace Rooms {
 
 void Room72::entry(int16 eib_nr) {
-	g_engine->_sound->playSound(0, 0);
-	g_engine->_sound->playSound(0);
+	_G(det)->playSound(0, 0);
 	_G(spieler_mi)[P_HOWARD].Mode = true;
 	_G(spieler_mi)[P_NICHELLE].Mode = true;
 	
diff --git a/engines/chewy/rooms/room73.cpp b/engines/chewy/rooms/room73.cpp
index 0d0685ce0d3..64f5762cdcc 100644
--- a/engines/chewy/rooms/room73.cpp
+++ b/engines/chewy/rooms/room73.cpp
@@ -30,8 +30,7 @@ namespace Chewy {
 namespace Rooms {
 
 void Room73::entry(int16 eib_nr) {
-	g_engine->_sound->playSound(0, 0);
-	g_engine->_sound->playSound(0);
+	_G(det)->playSound(0, 0);
 	_G(gameState).ScrollxStep = 2;
 	_G(gameState).ZoomXy[P_HOWARD][0] = 70;
 	_G(gameState).ZoomXy[P_HOWARD][1] = 100;
diff --git a/engines/chewy/rooms/room74.cpp b/engines/chewy/rooms/room74.cpp
index b474dbd0186..2508441c664 100644
--- a/engines/chewy/rooms/room74.cpp
+++ b/engines/chewy/rooms/room74.cpp
@@ -31,8 +31,7 @@ namespace Chewy {
 namespace Rooms {
 
 void Room74::entry(int16 eib_nr) {
-	g_engine->_sound->playSound(0, 0);
-	g_engine->_sound->playSound(0);
+	_G(det)->playSound(0, 0);
 	_G(gameState).ScrollxStep = 2;
 	_G(gameState).ZoomXy[P_HOWARD][0] = 70;
 	_G(gameState).ZoomXy[P_HOWARD][1] = 100;
diff --git a/engines/chewy/rooms/room75.cpp b/engines/chewy/rooms/room75.cpp
index 16fdf9e072a..371c762577f 100644
--- a/engines/chewy/rooms/room75.cpp
+++ b/engines/chewy/rooms/room75.cpp
@@ -29,8 +29,7 @@ namespace Chewy {
 namespace Rooms {
 
 void Room75::entry(int16 eib_nr) {
-	g_engine->_sound->playSound(0, 0);
-	g_engine->_sound->playSound(0);
+	_G(det)->playSound(0, 0);
 	_G(gameState).ScrollxStep = 2;
 	_G(gameState).ZoomXy[P_HOWARD][0] = 70;
 	_G(gameState).ZoomXy[P_HOWARD][1] = 100;
diff --git a/engines/chewy/rooms/room76.cpp b/engines/chewy/rooms/room76.cpp
index d483ca1f5f8..3d8788bf1b4 100644
--- a/engines/chewy/rooms/room76.cpp
+++ b/engines/chewy/rooms/room76.cpp
@@ -34,10 +34,8 @@ int Room76::_state;
 
 
 void Room76::entry() {
-	g_engine->_sound->playSound(0,0);
-	g_engine->_sound->playSound(0, 1);
-	g_engine->_sound->playSound(0);
-	g_engine->_sound->playSound(0, 1, false);
+	_G(det)->playSound(0,0);
+	_G(det)->playSound(0, 1);
 	_G(gameState).ScrollxStep = 2;
 	_G(SetUpScreenFunc) = setup_func;
 	_state = 0;
diff --git a/engines/chewy/rooms/room77.cpp b/engines/chewy/rooms/room77.cpp
index 8a47badca69..b3a2b88b775 100644
--- a/engines/chewy/rooms/room77.cpp
+++ b/engines/chewy/rooms/room77.cpp
@@ -30,10 +30,8 @@ namespace Chewy {
 namespace Rooms {
 
 void Room77::entry() {
-	g_engine->_sound->playSound(0, 0);
-	g_engine->_sound->playSound(0, 1);
-	g_engine->_sound->playSound(0);
-	g_engine->_sound->playSound(0, 1, false);
+	_G(det)->playSound(0, 0);
+	_G(det)->playSound(0, 1);
 	_G(gameState).ScrollxStep = 2;
 	if (_G(gameState).r76State == 1) {
 		_G(gameState).flags29_4 = true;
diff --git a/engines/chewy/rooms/room78.cpp b/engines/chewy/rooms/room78.cpp
index 06b8cd88976..5b8677a3e15 100644
--- a/engines/chewy/rooms/room78.cpp
+++ b/engines/chewy/rooms/room78.cpp
@@ -31,8 +31,7 @@ namespace Rooms {
 
 void Room78::entry() {
 	_G(gameState).r76State = -1;
-	g_engine->_sound->playSound(0, 1);
-	g_engine->_sound->playSound(0, 1, false);
+	_G(det)->playSound(0, 1);
 	hideCur();
 	_G(gameState).ScrollxStep = 1;
 	_G(gameState)._personHide[P_CHEWY] = true;
diff --git a/engines/chewy/rooms/room79.cpp b/engines/chewy/rooms/room79.cpp
index ef3d78b14d6..76c3ad8b184 100644
--- a/engines/chewy/rooms/room79.cpp
+++ b/engines/chewy/rooms/room79.cpp
@@ -30,8 +30,7 @@ namespace Chewy {
 namespace Rooms {
 
 void Room79::entry() {
-	g_engine->_sound->playSound(0, 0);
-	g_engine->_sound->playSound(0);
+	_G(det)->playSound(0, 0);
 	_G(gameState).ScrollxStep = 2;
 	_G(spieler_mi)[P_HOWARD].Mode = true;
 	_G(spieler_mi)[P_NICHELLE].Mode = true;
diff --git a/engines/chewy/rooms/room80.cpp b/engines/chewy/rooms/room80.cpp
index dedaa32eda2..dee93f52860 100644
--- a/engines/chewy/rooms/room80.cpp
+++ b/engines/chewy/rooms/room80.cpp
@@ -32,12 +32,9 @@ void Room80::entry() {
 	_G(mouseLeftClick) = false;
 	_G(gameState).scrollx = 0;
 	_G(gameState).scrolly = 0;
-	g_engine->_sound->playSound(0, 0);
-	g_engine->_sound->playSound(0, 1);
-	g_engine->_sound->playSound(0, 2);
-	g_engine->_sound->playSound(0);
-	g_engine->_sound->playSound(0, 1, false);
-	g_engine->_sound->playSound(0, 2, false);
+	_G(det)->playSound(0, 0);
+	_G(det)->playSound(0, 1);
+	_G(det)->playSound(0, 2);
 
 	if (_G(gameState).gottenDiary) {
 		_G(atds)->delControlBit(476, ATS_ACTIVE_BIT);
diff --git a/engines/chewy/rooms/room81.cpp b/engines/chewy/rooms/room81.cpp
index c0471cdf66c..453dbb13312 100644
--- a/engines/chewy/rooms/room81.cpp
+++ b/engines/chewy/rooms/room81.cpp
@@ -30,8 +30,7 @@ namespace Chewy {
 namespace Rooms {
 
 void Room81::entry() {
-	g_engine->_sound->playSound(0, 0);
-	g_engine->_sound->playSound(0);
+	_G(det)->playSound(0, 0);
 	_G(spieler_mi)[P_HOWARD].Mode = true;
 	_G(spieler_mi)[P_NICHELLE].Mode = true;
 	_G(zoom_horizont) = 140;
diff --git a/engines/chewy/rooms/room82.cpp b/engines/chewy/rooms/room82.cpp
index 5830c6a3be4..fc9432a0ee8 100644
--- a/engines/chewy/rooms/room82.cpp
+++ b/engines/chewy/rooms/room82.cpp
@@ -34,8 +34,7 @@ namespace Chewy {
 namespace Rooms {
 
 void Room82::entry() {
-	g_engine->_sound->playSound(0, 0);
-	g_engine->_sound->playSound(0);
+	_G(det)->playSound(0, 0);
 	_G(gameState).ScrollxStep = 2;
 	_G(spieler_mi)[P_HOWARD].Mode = true;
 	_G(spieler_mi)[P_NICHELLE].Mode = true;
diff --git a/engines/chewy/rooms/room83.cpp b/engines/chewy/rooms/room83.cpp
index 51fb27ef194..56b87fdb791 100644
--- a/engines/chewy/rooms/room83.cpp
+++ b/engines/chewy/rooms/room83.cpp
@@ -27,8 +27,7 @@ namespace Chewy {
 namespace Rooms {
 
 void Room83::entry() {
-	g_engine->_sound->playSound(0, 0);
-	g_engine->_sound->playSound(0);
+	_G(det)->playSound(0, 0);
 }
 
 } // namespace Rooms
diff --git a/engines/chewy/rooms/room84.cpp b/engines/chewy/rooms/room84.cpp
index 0246e354cf3..3d86395e58b 100644
--- a/engines/chewy/rooms/room84.cpp
+++ b/engines/chewy/rooms/room84.cpp
@@ -41,7 +41,7 @@ void Room84::entry() {
 	_G(spieler_mi)[P_NICHELLE].Mode = true;
 	_G(gameState).R84GoonsPresent = !_G(gameState).R88UsedMonkey;
 	_flag = false;
-	g_engine->_sound->playSound(0, 0);
+	_G(det)->playSound(0, 0);
 
 	if (_G(gameState).R88UsedMonkey) {
 		_G(det)->del_static_ani(3);
diff --git a/engines/chewy/rooms/room85.cpp b/engines/chewy/rooms/room85.cpp
index c375c3f80a3..01062ea76cd 100644
--- a/engines/chewy/rooms/room85.cpp
+++ b/engines/chewy/rooms/room85.cpp
@@ -32,10 +32,8 @@ namespace Chewy {
 namespace Rooms {
 
 void Room85::entry(int16 eib_nr) {
-	g_engine->_sound->playSound(0, 0);
-	g_engine->_sound->playSound(0);
-	g_engine->_sound->playSound(0, 1);
-	g_engine->_sound->playSound(0, 1, false);
+	_G(det)->playSound(0, 0);
+	_G(det)->playSound(0, 1);
 	_G(gameState).ScrollxStep = 2;
 	_G(SetUpScreenFunc) = setup_func;
 	_G(spieler_mi)[P_HOWARD].Mode = true;
diff --git a/engines/chewy/rooms/room86.cpp b/engines/chewy/rooms/room86.cpp
index 9e186e0f1f8..28e6ab9d005 100644
--- a/engines/chewy/rooms/room86.cpp
+++ b/engines/chewy/rooms/room86.cpp
@@ -151,8 +151,7 @@ int Room86::proc2() {
 	autoMove(2, P_CHEWY);
 	start_spz_wait(13, 1, false, P_CHEWY);
 	_G(det)->startDetail(0, 255, false);
-	g_engine->_sound->playSound(0, 0);
-	g_engine->_sound->playSound(0);
+	_G(det)->playSound(0, 0);
 	delInventory(_G(cur)->getInventoryCursor());
 	autoMove(3, P_CHEWY);
 	proc3(true);
@@ -184,10 +183,8 @@ void Room86::proc3(bool cond) {
 
 	_G(det)->setStaticPos(0, 352, destY, false, false);
 	_G(det)->showStaticSpr(0);
-	g_engine->_sound->playSound(0, 1);
-	g_engine->_sound->playSound(0, 2);
-	g_engine->_sound->playSound(0, 1, false);
-	g_engine->_sound->playSound(0, 2, false);
+	_G(det)->playSound(0, 1);
+	_G(det)->playSound(0, 2);
 
 	for (int i = 0; i < 48; ++i) {
 		setupScreen(NO_SETUP);
@@ -197,8 +194,8 @@ void Room86::proc3(bool cond) {
 		_G(out)->copyToScreen();
 	}
 
-	g_engine->_sound->stopSound(1);
-	g_engine->_sound->stopSound(2);
+	_G(det)->stopSound(1);
+	_G(det)->stopSound(2);
 	_G(flags).NoScroll = false;
 }
 
diff --git a/engines/chewy/rooms/room90.cpp b/engines/chewy/rooms/room90.cpp
index fc2b62f9b2e..23b206e14e2 100644
--- a/engines/chewy/rooms/room90.cpp
+++ b/engines/chewy/rooms/room90.cpp
@@ -68,8 +68,7 @@ void Room90::entry(int16 eib_nr) {
 	if (_G(gameState).flags34_40 && !_G(gameState).flags33_40) {
 		_G(det)->setDetailPos(12, 329, 15);
 		_G(det)->startDetail(12, 255, false);
-		g_engine->_sound->playSound(12, 0);
-		g_engine->_sound->playSound(12);
+		_G(det)->playSound(12, 0);
 	}
 
 	if (_G(gameState).flags33_40 && !_G(gameState).flags34_10) {
@@ -259,8 +258,7 @@ int Room90::getHubcaps() {
 	auto_scroll(176, 0);
 	_G(det)->setDetailPos(12, 495, 15);
 	_G(det)->startDetail(12, 255, false);
-	g_engine->_sound->playSound(12, 0);
-	g_engine->_sound->playSound(12);
+	_G(det)->playSound(12, 0);
 
 	int destX = 495;
 
diff --git a/engines/chewy/rooms/room95.cpp b/engines/chewy/rooms/room95.cpp
index 5c45252a924..4aa4b93f34d 100644
--- a/engines/chewy/rooms/room95.cpp
+++ b/engines/chewy/rooms/room95.cpp
@@ -31,8 +31,7 @@ namespace Chewy {
 namespace Rooms {
 
 void Room95::entry(int16 eib_nr) {
-	g_engine->_sound->playSound(0, 0);
-	g_engine->_sound->playSound(0);
+	_G(det)->playSound(0, 0);
 	_G(SetUpScreenFunc) = setup_func;	
 	_G(zoom_horizont) = 140;
 	_G(gameState).ScrollxStep = 2;
diff --git a/engines/chewy/rooms/room97.cpp b/engines/chewy/rooms/room97.cpp
index 399c628978e..90e0e2b1f34 100644
--- a/engines/chewy/rooms/room97.cpp
+++ b/engines/chewy/rooms/room97.cpp
@@ -40,8 +40,7 @@ int Room97::_word18DB38;
 bool Room97::_bool18DB3A;
 
 void Room97::entry() {
-	g_engine->_sound->playSound(0, 0);
-	g_engine->_sound->playSound(0);
+	_G(det)->playSound(0, 0);
 	_G(SetUpScreenFunc) = setup_func;
 	_G(zoom_horizont) = 0;
 
@@ -87,9 +86,9 @@ void Room97::entry() {
 			_G(det)->stop_detail(23 + i);
 			_G(det)->startDetail(27 + i, 255, ANI_FRONT);
 		}
-		g_engine->_sound->stopSound(0);
-		g_engine->_sound->stopSound(0);
-		g_engine->_sound->stopSound(0);
+		_G(det)->stopSound(0);
+		_G(det)->stopSound(0);
+		_G(det)->stopSound(0);
 	}
 
 	if (_G(gameState).flags37_1)
@@ -339,8 +338,8 @@ void Room97::proc4() {
 		hideCur();
 		_G(spieler_mi)[P_CHEWY].Mode = true;
 		stopPerson(P_CHEWY);
-		g_engine->_sound->playSound(9, 0);
-		g_engine->_sound->stopSound(1);
+		_G(det)->playSound(9, 0);
+		_G(det)->stopSound(1);
 		startSetAILWait(9, 1, ANI_FRONT);
 		_G(det)->showStaticSpr(21);
 
@@ -361,8 +360,8 @@ void Room97::proc4() {
 
 		startSetAILWait(29, 1, ANI_FRONT);
 		_G(det)->hideStaticSpr(21);
-		g_engine->_sound->playSound(9, 1);
-		g_engine->_sound->stopSound(0);
+		_G(det)->playSound(9, 1);
+		_G(det)->stopSound(0);
 		startSetAILWait(9, 0, ANI_BACK);
 
 		goAutoXy(1008, 93, P_CHEWY, ANI_WAIT);
@@ -395,8 +394,7 @@ int Room97::proc5() {
 	flic_cut(FCUT_122);
 	register_cutscene(34);
 
-	g_engine->_sound->playSound(0, 0);
-	g_engine->_sound->playSound(0);
+	_G(det)->playSound(0, 0);
 	_G(gameState).scrollx = 720;
 	setPersonPos(822, 98, P_CHEWY, P_LEFT);
 	setPersonPos(861, 81, P_HOWARD, P_LEFT);
@@ -405,8 +403,8 @@ int Room97::proc5() {
 	_G(gameState).flags35_80 = true;
 	startAadWait(546);
 	_G(det)->hideStaticSpr(21);
-	g_engine->_sound->playSound(9, 1);
-	g_engine->_sound->stopSound(0);
+	_G(det)->playSound(9, 1);
+	_G(det)->stopSound(0);
 	startSetAILWait(9, 0, ANI_GO);
 	
 	showCur();
@@ -497,8 +495,7 @@ int Room97::proc8() {
 		auto_scroll(406, 0);
 		waitShowScreen(40);
 		_G(det)->stop_detail(24);
-		g_engine->_sound->playSound(26, 0);
-		g_engine->_sound->playSound(26);
+		_G(det)->playSound(26, 0);
 		startSetAILWait(25, 1, ANI_FRONT);
 		_G(det)->startDetail(26, 255, false);
 		_G(det)->stop_detail(23);
@@ -563,8 +560,8 @@ int Room97::proc10() {
 	hideCur();
 	autoMove(8, P_CHEWY);
 	start_spz_wait(13, 1, false, P_CHEWY);
-	g_engine->_sound->playSound(7, 0);
-	g_engine->_sound->stopSound(1);
+	_G(det)->playSound(7, 0);
+	_G(det)->stopSound(1);
 	startSetAILWait(7, 1, ANI_FRONT);
 	_G(det)->showStaticSpr(19);
 	_G(gameState).flags37_1 = true;
@@ -592,8 +589,7 @@ int Room97::proc11() {
 		autoMove(7, P_CHEWY);
 		start_spz(CH_TALK6, 255, false, P_CHEWY);
 		startAadWait(571);
-		g_engine->_sound->playSound(4, 0);
-		g_engine->_sound->playSound(4);
+		_G(det)->playSound(4, 0);
 		_G(det)->startDetail(4, 1, false);
 		autoMove(12, P_CHEWY);
 		start_spz_wait(64, 1, false, P_CHEWY);
@@ -713,8 +709,8 @@ void Room97::sensorAnim() {
 		_G(det)->hideStaticSpr(27);
 		startSetAILWait(18, 1, ANI_FRONT);
 
-		g_engine->_sound->playSound(8, 0);
-		g_engine->_sound->stopSound(1);
+		_G(det)->playSound(8, 0);
+		_G(det)->stopSound(1);
 		startSetAILWait(8, 1, ANI_FRONT);
 		_G(det)->showStaticSpr(20);
 		autoMove(10, P_CHEWY);
diff --git a/engines/chewy/sound.cpp b/engines/chewy/sound.cpp
index 6674b4f40d7..86344cdaae1 100644
--- a/engines/chewy/sound.cpp
+++ b/engines/chewy/sound.cpp
@@ -47,6 +47,9 @@ Sound::~Sound() {
 }
 
 void Sound::playSound(int num, uint channel, bool loop, uint16 volume, uint16 balance) {
+	if (num < 0)
+		return;
+
 	SoundChunk *sound = _soundRes->getSound(num);
 	uint8 *data = (uint8 *)MALLOC(sound->size);
 	memcpy(data, sound->data, sound->size);




More information about the Scummvm-git-logs mailing list