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

bluegr bluegr at gmail.com
Sun Jul 14 14:14:21 CEST 2019


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

Summary:
b5b136b177 AGOS: Silence GCC memset() warnings
4eef7a42e3 FULLPIPE: Silence GCC memset() warnings
1e23d43006 SCUMM: Silence GCC memset() warnings
da15a38b66 BACKENDS: Initialize more TimerSlot fields when resetting it


Commit: b5b136b1770dd3ed4b750b9df9c10881dded1aba
    https://github.com/scummvm/scummvm/commit/b5b136b1770dd3ed4b750b9df9c10881dded1aba
Author: Torbjörn Andersson (eriktorbjorn at users.sourceforge.net)
Date: 2019-07-14T14:58:18+03:00

Commit Message:
AGOS: Silence GCC memset() warnings

Recent GCC versions complain if you memset() a class or struct that
contain non-POD data types. Get around that by either initializing
the object when created, or by adding a reset() method.

Changed paths:
    engines/agos/agos.h
    engines/agos/vga.cpp


diff --git a/engines/agos/agos.h b/engines/agos/agos.h
index 551df6e..2874c33 100644
--- a/engines/agos/agos.h
+++ b/engines/agos/agos.h
@@ -132,7 +132,18 @@ struct VgaSprite {
 	uint16 priority;
 	uint16 windowNum;
 	uint16 zoneNum;
-	VgaSprite() { memset(this, 0, sizeof(*this)); }
+	VgaSprite() { reset(); }
+
+	void reset() {
+		id = 0;
+		image = 0;
+		palette = 0;
+		x = y = 0;
+		flags = 0;
+		priority = 0;
+		windowNum = 0;
+		zoneNum = 0;
+	}
 };
 
 struct VgaSleepStruct {
diff --git a/engines/agos/vga.cpp b/engines/agos/vga.cpp
index 2a675bf..7926f7f 100644
--- a/engines/agos/vga.cpp
+++ b/engines/agos/vga.cpp
@@ -1083,7 +1083,7 @@ void AGOSEngine::vc27_resetSprite() {
 
 	_lastVgaWaitFor = 0;
 
-	memset(&bak, 0, sizeof(bak));
+	bak.reset();
 
 	vsp = _vgaSprites;
 	while (vsp->id) {


Commit: 4eef7a42e3f45a18a57674898f5fb5409f6daf5d
    https://github.com/scummvm/scummvm/commit/4eef7a42e3f45a18a57674898f5fb5409f6daf5d
Author: Torbjörn Andersson (eriktorbjorn at users.sourceforge.net)
Date: 2019-07-14T14:58:19+03:00

Commit Message:
FULLPIPE: Silence GCC memset() warnings

Recent GCC versions complain if you memset() a class or struct that
contain non-POD data types. Get around that by either initializing
the object when created, or by adding a reset() method.

Changed paths:
    engines/fullpipe/anihandler.cpp
    engines/fullpipe/anihandler.h
    engines/fullpipe/motion.cpp
    engines/fullpipe/scenes/scene04.cpp


diff --git a/engines/fullpipe/anihandler.cpp b/engines/fullpipe/anihandler.cpp
index 4ae870b..05cde75 100644
--- a/engines/fullpipe/anihandler.cpp
+++ b/engines/fullpipe/anihandler.cpp
@@ -528,7 +528,7 @@ int AniHandler::seekWay(int idx, int st1idx, int st2idx, bool flip, bool flop) {
 	debugC(2, kDebugPathfinding, "AniHandler::seekWay(%d, %d, %d, %d, %d)", idx, st1idx, st2idx, flip, flop);
 
 	if (st1idx == st2idx) {
-		memset(&item.subItems[subIdx], 0, sizeof(item.subItems[subIdx]));
+		item.subItems[subIdx].reset();
 		return 0;
 	}
 
diff --git a/engines/fullpipe/anihandler.h b/engines/fullpipe/anihandler.h
index f73d755..ed4e382 100644
--- a/engines/fullpipe/anihandler.h
+++ b/engines/fullpipe/anihandler.h
@@ -38,6 +38,15 @@ struct MGMSubItem {
 	int y;
 
 	MGMSubItem();
+
+	void reset() {
+		movement = nullptr;
+		staticsIndex = 0;
+		field_8 = 0;
+		field_C = 0;
+		x = 0;
+		y = 0;
+	}
 };
 
 struct MGMItem {
@@ -63,7 +72,21 @@ struct MakeQueueStruct {
 	int y2;
 	int flags;
 
-	MakeQueueStruct() { memset(this, 0, sizeof(MakeQueueStruct)); }
+	MakeQueueStruct() { reset(); }
+
+	void reset() {
+		ani = nullptr;
+		staticsId1 = 0;
+		staticsId2 = 0;
+		movementId = 0;
+		field_10 = 0;
+		x1 = 0;
+		y1 = 0;
+		field_1C = 0;
+		x2 = 0;
+		y2 = 0;
+		flags = 0;
+	}
 };
 
 class AniHandler : public CObject {
diff --git a/engines/fullpipe/motion.cpp b/engines/fullpipe/motion.cpp
index d907c3d..c667ac2 100644
--- a/engines/fullpipe/motion.cpp
+++ b/engines/fullpipe/motion.cpp
@@ -1230,7 +1230,7 @@ MessageQueue *MovGraph::makeWholeQueue(StaticANIObject *ani, MovArr *movarr, int
 
 		MakeQueueStruct mkQueue;
 
-		memset(&mkQueue, 0, sizeof(mkQueue));
+		mkQueue.reset();
 		mkQueue.ani = ani;
 		mkQueue.staticsId2 = id2;
 		mkQueue.staticsId1 = id1;
@@ -1996,7 +1996,7 @@ MessageQueue *MctlGraph::makeWholeQueue(MctlMQ &mctlMQ) {
 			} else {
 				MakeQueueStruct mkQueue;
 
-				memset(&mkQueue, 0, sizeof(mkQueue));
+				mkQueue.reset();
 
 				mkQueue.ani = _items2[mctlMQ.index]._obj;
 				mkQueue.staticsId2 = mg2i->_mov->_staticsObj2->_staticsId;
diff --git a/engines/fullpipe/scenes/scene04.cpp b/engines/fullpipe/scenes/scene04.cpp
index 45ada3e..59adf37 100644
--- a/engines/fullpipe/scenes/scene04.cpp
+++ b/engines/fullpipe/scenes/scene04.cpp
@@ -645,7 +645,7 @@ MessageQueue *sceneHandler04_kozFly5(StaticANIObject *ani, double phase) {
 
 	MessageQueue *mq1 = aniHandler.makeRunQueue(&mkQueue);
 
-	memset(&mkQueue, 0, sizeof(mkQueue));
+	mkQueue.reset();
 	mkQueue.ani = ani;
 	mkQueue.staticsId1 = ST_KZW_JUMPOUT;
 	mkQueue.staticsId2 = ST_KZW_SIT;


Commit: 1e23d43006705a1d25e04d9cc90674044789cb92
    https://github.com/scummvm/scummvm/commit/1e23d43006705a1d25e04d9cc90674044789cb92
Author: Torbjörn Andersson (eriktorbjorn at users.sourceforge.net)
Date: 2019-07-14T14:58:19+03:00

Commit Message:
SCUMM: Silence GCC memset() warnings

Recent GCC versions complain if you memset() a class or struct that
contain non-POD data types. Get around that by either initializing
the object when created, or by adding a reset() method.

Changed paths:
    engines/scumm/actor.cpp
    engines/scumm/actor.h
    engines/scumm/gfx.h
    engines/scumm/he/floodfill_he.h
    engines/scumm/he/script_v100he.cpp
    engines/scumm/he/script_v90he.cpp
    engines/scumm/he/sprite_he.cpp
    engines/scumm/he/sprite_he.h
    engines/scumm/he/wiz_he.cpp
    engines/scumm/he/wiz_he.h
    engines/scumm/imuse/imuse_internal.h
    engines/scumm/imuse/imuse_player.cpp
    engines/scumm/imuse_digi/dimuse.cpp
    engines/scumm/imuse_digi/dimuse_script.cpp
    engines/scumm/imuse_digi/dimuse_track.cpp
    engines/scumm/imuse_digi/dimuse_track.h
    engines/scumm/scumm.cpp


diff --git a/engines/scumm/actor.cpp b/engines/scumm/actor.cpp
index fdc7160..48035b5 100644
--- a/engines/scumm/actor.cpp
+++ b/engines/scumm/actor.cpp
@@ -159,7 +159,7 @@ void Actor::initActor(int mode) {
 		memset(_palette, 0, sizeof(_palette));
 		memset(_sound, 0, sizeof(_sound));
 		memset(&_cost, 0, sizeof(CostumeData));
-		memset(&_walkdata, 0, sizeof(ActorWalkData));
+		_walkdata.reset();
 		_walkdata.point3.x = 32000;
 		_walkScript = 0;
 	}
diff --git a/engines/scumm/actor.h b/engines/scumm/actor.h
index 3556d5b..02929e3 100644
--- a/engines/scumm/actor.h
+++ b/engines/scumm/actor.h
@@ -151,6 +151,20 @@ protected:
 		Common::Point point3;
 		int32 deltaXFactor, deltaYFactor;
 		uint16 xfrac, yfrac;
+
+		void reset() {
+			dest.x = dest.y = 0;
+			destbox = 0;
+			destdir = 0;
+			cur.x = cur.y = 0;
+			curbox = 0;
+			next.x = next.y = 0;
+			point3.x = point3.y = 0;
+			deltaXFactor = 0;
+			deltaYFactor = 0;
+			xfrac = 0;
+			yfrac = 0;
+		}
 	};
 
 
diff --git a/engines/scumm/gfx.h b/engines/scumm/gfx.h
index 86913f9..35be192 100644
--- a/engines/scumm/gfx.h
+++ b/engines/scumm/gfx.h
@@ -53,6 +53,18 @@ struct CameraData {
 	int _leftTrigger, _rightTrigger;
 	byte _follows, _mode;
 	bool _movingToActor;
+
+	void reset() {
+		_cur.x = _cur.y = 0;
+		_dest.x = _dest.y = 0;
+		_accel.x = _accel.y = 0;
+		_last.x = _last.y = 0;
+		_leftTrigger = 0;
+		_rightTrigger = 0;
+		_follows = 0;
+		_mode = 0;
+		_movingToActor = 0;
+	}
 };
 
 /** Virtual screen identifiers */
diff --git a/engines/scumm/he/floodfill_he.h b/engines/scumm/he/floodfill_he.h
index 286bcce..a7f327d 100644
--- a/engines/scumm/he/floodfill_he.h
+++ b/engines/scumm/he/floodfill_he.h
@@ -32,6 +32,13 @@ struct FloodFillParameters {
 	int32 x;
 	int32 y;
 	int32 flags;
+
+	void reset() {
+		box.top = box.left = box.bottom = box.right = 0;
+		x = 0;
+		y = 0;
+		flags = 0;
+	}
 };
 
 struct FloodFillLine {
diff --git a/engines/scumm/he/script_v100he.cpp b/engines/scumm/he/script_v100he.cpp
index 714f431..53ad81a 100644
--- a/engines/scumm/he/script_v100he.cpp
+++ b/engines/scumm/he/script_v100he.cpp
@@ -906,7 +906,7 @@ void ScummEngine_v100he::o100_floodFill() {
 
 	switch (subOp) {
 	case 0:
-		memset(&_floodFillParams, 0, sizeof(_floodFillParams));
+		_floodFillParams.reset();
 		_floodFillParams.box.left = 0;
 		_floodFillParams.box.top = 0;
 		_floodFillParams.box.right = 639;
diff --git a/engines/scumm/he/script_v90he.cpp b/engines/scumm/he/script_v90he.cpp
index f63973e..3c2bece 100644
--- a/engines/scumm/he/script_v90he.cpp
+++ b/engines/scumm/he/script_v90he.cpp
@@ -1486,7 +1486,7 @@ void ScummEngine_v90he::o90_floodFill() {
 		pop();
 		break;
 	case 57:
-		memset(&_floodFillParams, 0, sizeof(_floodFillParams));
+		_floodFillParams.reset();
 		_floodFillParams.box.left = 0;
 		_floodFillParams.box.top = 0;
 		_floodFillParams.box.right = 639;
@@ -1630,7 +1630,7 @@ void ScummEngine_v90he::o90_getPolygonOverlap() {
 				push(0);
 			} else {
 				WizPolygon wp;
-				memset(&wp, 0, sizeof(wp));
+				wp.reset();
 				wp.numVerts = n1;
 				assert(n1 < ARRAYSIZE(wp.vert));
 				for (int i = 0; i < n1; ++i) {
diff --git a/engines/scumm/he/sprite_he.cpp b/engines/scumm/he/sprite_he.cpp
index e210e0b..9e20ab6 100644
--- a/engines/scumm/he/sprite_he.cpp
+++ b/engines/scumm/he/sprite_he.cpp
@@ -1086,8 +1086,13 @@ void Sprite::resetGroup(int spriteGroupId) {
 }
 
 void Sprite::resetTables(bool refreshScreen) {
-	memset(_spriteTable, 0, (_varNumSprites + 1) * sizeof(SpriteInfo));
-	memset(_spriteGroups, 0, (_varNumSpriteGroups + 1) * sizeof(SpriteGroup));
+	for (int i = 0; i < _varNumSprites; i++) {
+		_spriteTable[i].reset();
+	}
+	for (int i = 0; i < _varNumSpriteGroups; i++) {
+		_spriteGroups[i].reset();
+	}
+
 	for (int curGrp = 1; curGrp < _varNumSpriteGroups; ++curGrp)
 		resetGroup(curGrp);
 
diff --git a/engines/scumm/he/sprite_he.h b/engines/scumm/he/sprite_he.h
index 77e527b..bb7f957 100644
--- a/engines/scumm/he/sprite_he.h
+++ b/engines/scumm/he/sprite_he.h
@@ -82,6 +82,43 @@ struct SpriteInfo {
 	int32 classFlags;
 	int32 imgFlags;
 	int32 conditionBits;
+
+	void reset() {
+		id = 0;
+		zorder = 0;
+		flags = 0;
+		image = 0;
+		imageState = 0;
+		group = 0;
+		palette = 0;
+		priority = 0;
+		bbox.top = bbox.left = bbox.bottom = bbox.right = 0;
+		dx = 0;
+		dy = 0;
+		pos.x = pos.y = 0;
+		tx = 0;
+		ty = 0;
+		userValue = 0;
+		curImageState = 0;
+		curImage = 0;
+		imglistNum = 0;
+		shadow = 0;
+		imageStateCount = 0;
+		angle = 0;
+		scale = 0;
+		animProgress = 0;
+		curAngle = 0;
+		curScale = 0;
+		curImgFlags = 0;
+		animIndex = 0;
+		animSpeed = 0;
+		sourceImage = 0;
+		maskImage = 0;
+		zbufferImage = 0;
+		classFlags = 0;
+		imgFlags = 0;
+		conditionBits = 0;
+	}
 };
 
 struct SpriteGroup {
@@ -96,6 +133,20 @@ struct SpriteGroup {
 	int32 scale_x_ratio_div;
 	int32 scale_y_ratio_mul;
 	int32 scale_y_ratio_div;
+
+	void reset() {
+		bbox.top = bbox.left = bbox.bottom = bbox.right = 0;
+		priority = 0;
+		flags = 0;
+		tx = 0;
+		ty = 0;
+		image = 0;
+		scaling = 0;
+		scale_x_ratio_mul = 0;
+		scale_x_ratio_div = 0;
+		scale_y_ratio_mul = 0;
+		scale_y_ratio_div = 0;
+	}
 };
 
 class ScummEngine_v90he;
diff --git a/engines/scumm/he/wiz_he.cpp b/engines/scumm/he/wiz_he.cpp
index 2db5702..c2cefea 100644
--- a/engines/scumm/he/wiz_he.cpp
+++ b/engines/scumm/he/wiz_he.cpp
@@ -50,7 +50,7 @@ void Wiz::clearWizBuffer() {
 void Wiz::polygonClear() {
 	for (int i = 0; i < ARRAYSIZE(_polygons); i++) {
 		if (_polygons[i].flag == 1)
-			memset(&_polygons[i], 0, sizeof(WizPolygon));
+			_polygons[i].reset();
 	}
 }
 
@@ -173,7 +173,7 @@ void Wiz::polygonCalcBoundBox(Common::Point *vert, int numVerts, Common::Rect &b
 void Wiz::polygonErase(int fromId, int toId) {
 	for (int i = 0; i < ARRAYSIZE(_polygons); i++) {
 		if (_polygons[i].id >= fromId && _polygons[i].id <= toId)
-			memset(&_polygons[i], 0, sizeof(WizPolygon));
+			_polygons[i].reset();
 	}
 }
 
diff --git a/engines/scumm/he/wiz_he.h b/engines/scumm/he/wiz_he.h
index 692ad76..a6d99c7 100644
--- a/engines/scumm/he/wiz_he.h
+++ b/engines/scumm/he/wiz_he.h
@@ -33,6 +33,16 @@ struct WizPolygon {
 	int id;
 	int numVerts;
 	bool flag;
+
+	void reset() {
+		for (int i = 0; i < ARRAYSIZE(vert); i++) {
+			vert[i].x = vert[i].y = 0;
+		}
+		bound.top = bound.left = bound.bottom = bound.right = 0;
+		id = 0;
+		numVerts = 0;
+		flag = 0;
+	}
 };
 
 struct WizImage {
@@ -107,6 +117,46 @@ struct WizParameters {
 	int spriteGroup;
 	int conditionBits;
 	WizImage img;
+
+	void reset() {
+		field_0 = 0;
+		memset(filename, 0, sizeof(filename));
+		box.top = box.left = box.bottom = box.right = 0;
+		processFlags = 0;
+		processMode = 0;
+		field_11C = 0;
+		field_120 = 0;
+		field_124 = 0;
+		field_128 = 0;
+		field_12C = 0;
+		field_130 = 0;
+		field_134 = 0;
+		field_138 = 0;
+		compType = 0;
+		fileWriteMode = 0;
+		angle = 0;
+		scale = 0;
+		polygonId1 = 0;
+		polygonId2 = 0;
+		resDefImgW = 0;
+		resDefImgH = 0;
+		sourceImage = 0;
+		params1 = 0;
+		params2 = 0;
+		memset(remapColor, 0, sizeof(remapColor));
+		memset(remapIndex, 0, sizeof(remapIndex));
+		remapNum = 0;
+		dstResNum = 0;
+		fillColor = 0;
+		memset(&fontProperties, 0, sizeof(FontProperties));
+		memset(&ellipseProperties, 0, sizeof(EllipseProperties));
+		box2.left = box2.top = box2.bottom = box2.right = 0;
+		blendFlags = 0;
+		spriteId = 0;
+		spriteGroup = 0;
+		conditionBits = 0;
+		memset(&img, 0, sizeof(WizImage));
+	}
 };
 
 enum WizImageFlags {
diff --git a/engines/scumm/imuse/imuse_internal.h b/engines/scumm/imuse/imuse_internal.h
index 36793b8..7aff68a 100644
--- a/engines/scumm/imuse/imuse_internal.h
+++ b/engines/scumm/imuse/imuse_internal.h
@@ -106,7 +106,15 @@ struct HookDatas {
 
 	int query_param(int param, byte chan);
 	int set(byte cls, byte value, byte chan);
-	HookDatas() { memset(this, 0, sizeof(HookDatas)); }
+	HookDatas() { reset(); }
+	void reset() {
+		_transpose = 0;
+		memset(_jump, 0, sizeof(_jump));
+		memset(_part_onoff, 0, sizeof(_part_onoff));
+		memset(_part_volume, 0, sizeof(_part_volume));
+		memset(_part_program, 0, sizeof(_part_program));
+		memset(_part_transpose, 0, sizeof(_part_transpose));
+	}
 };
 
 struct ParameterFader {
diff --git a/engines/scumm/imuse/imuse_player.cpp b/engines/scumm/imuse/imuse_player.cpp
index b422418..7ec557a 100644
--- a/engines/scumm/imuse/imuse_player.cpp
+++ b/engines/scumm/imuse/imuse_player.cpp
@@ -163,7 +163,7 @@ void Player::clear() {
 }
 
 void Player::hook_clear() {
-	memset(&_hook, 0, sizeof(_hook));
+	_hook.reset();
 }
 
 int Player::start_seq_sound(int sound, bool reset_vars) {
diff --git a/engines/scumm/imuse_digi/dimuse.cpp b/engines/scumm/imuse_digi/dimuse.cpp
index b695521..de5b163 100644
--- a/engines/scumm/imuse_digi/dimuse.cpp
+++ b/engines/scumm/imuse_digi/dimuse.cpp
@@ -55,7 +55,7 @@ IMuseDigital::IMuseDigital(ScummEngine_v7 *scumm, Audio::Mixer *mixer, int fps)
 	for (int l = 0; l < MAX_DIGITAL_TRACKS + MAX_DIGITAL_FADETRACKS; l++) {
 		_track[l] = new Track;
 		assert(_track[l]);
-		memset(_track[l], 0, sizeof(Track));
+		_track[l]->reset();
 		_track[l]->trackId = l;
 	}
 	_vm->getTimerManager()->installTimerProc(timer_handler, 1000000 / _callbackFps, this, "IMuseDigital");
@@ -147,7 +147,7 @@ void IMuseDigital::saveLoadEarly(Common::Serializer &s) {
 	for (int l = 0; l < MAX_DIGITAL_TRACKS + MAX_DIGITAL_FADETRACKS; l++) {
 		Track *track = _track[l];
 		if (s.isLoading()) {
-			memset(track, 0, sizeof(Track));
+			track->reset();
 		}
 		syncWithSerializer(s, *track);
 		if (s.isLoading()) {
@@ -210,7 +210,7 @@ void IMuseDigital::callback() {
 			// mark it as unused.
 			if (!track->stream) {
 				if (!_mixer->isSoundHandleActive(track->mixChanHandle))
-					memset(track, 0, sizeof(Track));
+					track->reset();
 				continue;
 			}
 
diff --git a/engines/scumm/imuse_digi/dimuse_script.cpp b/engines/scumm/imuse_digi/dimuse_script.cpp
index 3913a1a..8d1e7a4 100644
--- a/engines/scumm/imuse_digi/dimuse_script.cpp
+++ b/engines/scumm/imuse_digi/dimuse_script.cpp
@@ -180,7 +180,7 @@ void IMuseDigital::flushTrack(Track *track) {
 	}
 
 	if (!_mixer->isSoundHandleActive(track->mixChanHandle)) {
-		memset(track, 0, sizeof(Track));
+		track->reset();
 	}
 }
 
@@ -191,7 +191,7 @@ void IMuseDigital::flushTracks() {
 		Track *track = _track[l];
 		if (track->used && track->toBeRemoved && !_mixer->isSoundHandleActive(track->mixChanHandle)) {
 			debug(5, "flushTracks() - soundId:%d", track->soundId);
-			memset(track, 0, sizeof(Track));
+			track->reset();
 		}
 	}
 }
@@ -438,7 +438,7 @@ void IMuseDigital::stopAllSounds() {
 			}
 
 			// Mark the track as unused
-			memset(track, 0, sizeof(Track));
+			track->reset();
 		}
 	}
 }
diff --git a/engines/scumm/imuse_digi/dimuse_track.cpp b/engines/scumm/imuse_digi/dimuse_track.cpp
index 28ad646..92ef823 100644
--- a/engines/scumm/imuse_digi/dimuse_track.cpp
+++ b/engines/scumm/imuse_digi/dimuse_track.cpp
@@ -67,7 +67,7 @@ int IMuseDigital::allocSlot(int priority) {
 			}
 
 			// Mark it as unused
-			memset(track, 0, sizeof(Track));
+			track->reset();
 
 			debug(5, "IMuseDigital::allocSlot(): Removed sound %d from track %d", _track[trackId]->soundId, trackId);
 		} else {
@@ -93,7 +93,7 @@ void IMuseDigital::startSound(int soundId, const char *soundName, int soundType,
 	Track *track = _track[l];
 
 	// Reset the track
-	memset(track, 0, sizeof(Track));
+	track->reset();
 
 	track->pan = 64;
 	track->vol = volume * 1000;
diff --git a/engines/scumm/imuse_digi/dimuse_track.h b/engines/scumm/imuse_digi/dimuse_track.h
index ef0a8ad..9f62fe9 100644
--- a/engines/scumm/imuse_digi/dimuse_track.h
+++ b/engines/scumm/imuse_digi/dimuse_track.h
@@ -75,7 +75,34 @@ struct Track {
 	Audio::SoundHandle mixChanHandle;					// sound mixer's channel handle
 	Audio::QueuingAudioStream *stream;		// sound mixer's audio stream handle for *.la1 and *.bun
 
-	Track() : soundId(-1), used(false), stream(NULL) {
+	Track() : soundId(-1), used(false), stream(nullptr) {
+	}
+
+	void reset() {
+		trackId = 0;
+		pan = 0;
+		vol = 0;
+		volFadeDest = 0;
+		volFadeStep = 0;
+		volFadeDelay = 0;
+		volFadeUsed = false;
+		soundId = 0;
+		memset(soundName, 0, sizeof(soundName));
+		used = false;
+		toBeRemoved = false;
+		souStreamUsed = false;
+		sndDataExtComp = false;
+		soundPriority = 0;
+		regionOffset = 0;
+		dataOffset = 0;
+		curRegion = 0;
+		curHookId = 0;
+		soundType = 0;
+		feedSize = 0;
+		dataMod12Bit = 0;
+		mixerFlags = 0;
+		soundDesc = nullptr;
+		stream = nullptr;
 	}
 
 	int getPan() const { return (pan != 64) ? 2 * pan - 127 : 0; }
diff --git a/engines/scumm/scumm.cpp b/engines/scumm/scumm.cpp
index 8d781a0..1102890 100644
--- a/engines/scumm/scumm.cpp
+++ b/engines/scumm/scumm.cpp
@@ -245,7 +245,7 @@ ScummEngine::ScummEngine(OSystem *syst, const DetectorResult &dr)
 	_screenHeight = 0;
 	_screenWidth = 0;
 	memset(_virtscr, 0, sizeof(_virtscr));
-	memset(&camera, 0, sizeof(CameraData));
+	camera.reset();
 	memset(_colorCycle, 0, sizeof(_colorCycle));
 	memset(_colorUsedByCycle, 0, sizeof(_colorUsedByCycle));
 	_ENCD_offs = 0;
@@ -331,8 +331,18 @@ ScummEngine::ScummEngine(OSystem *syst, const DetectorResult &dr)
 	_townsPaletteFlags = 0;
 	_townsClearLayerFlag = 1;
 	_townsActiveLayerFlags = 3;
-	memset(&_curStringRect, -1, sizeof(Common::Rect));
-	memset(&_cyclRects, 0, 16 * sizeof(Common::Rect));
+	_curStringRect.top = -1;
+	_curStringRect.left = -1;
+	_curStringRect.bottom = -1;
+	_curStringRect.right = -1;
+
+	for (int i = 0; i < ARRAYSIZE(_cyclRects); i++) {
+		_cyclRects[i].top = 0;
+		_cyclRects[i].left = 0;
+		_cyclRects[i].bottom = 0;
+		_cyclRects[i].right = 0;
+	}
+
 	_numCyclRects = 0;
 #endif
 
@@ -1781,7 +1791,7 @@ void ScummEngine_v90he::resetScumm() {
 	_hePaletteNum = 0;
 
 	_sprite->resetTables(0);
-	memset(&_wizParams, 0, sizeof(_wizParams));
+	_wizParams.reset();
 
 	if (_game.heversion >= 98)
 		_logicHE = LogicHE::makeLogicHE(this);


Commit: da15a38b66b0b1a6b7fd4022997beec1decbbcf8
    https://github.com/scummvm/scummvm/commit/da15a38b66b0b1a6b7fd4022997beec1decbbcf8
Author: Filippos Karapetis (bluegr at gmail.com)
Date: 2019-07-14T15:12:07+03:00

Commit Message:
BACKENDS: Initialize more TimerSlot fields when resetting it

This imports changes from commit 05f3fe420f20e8e44ed525960fcb713b43d5d0ad

Changed paths:
    backends/timer/default/default-timer.cpp


diff --git a/backends/timer/default/default-timer.cpp b/backends/timer/default/default-timer.cpp
index 19d1a0a..067226b 100644
--- a/backends/timer/default/default-timer.cpp
+++ b/backends/timer/default/default-timer.cpp
@@ -36,7 +36,7 @@ struct TimerSlot {
 
 	TimerSlot *next;
 
-	TimerSlot() : refCon(0), interval(0), nextFireTime(0), nextFireTimeMicro(0), next(0) {}
+	TimerSlot() : callback(nullptr), refCon(nullptr), interval(0), nextFireTime(0), nextFireTimeMicro(0), next(nullptr) {}
 };
 
 void insertPrioQueue(TimerSlot *head, TimerSlot *newSlot) {





More information about the Scummvm-git-logs mailing list