[Scummvm-git-logs] scummvm master -> 7f53a0cd31f07cdcc9610b3c6972002e296ff0ee

peterkohaut peterkohaut at users.noreply.github.com
Thu Feb 1 21:39:03 CET 2018


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:
7f53a0cd31 BLADERUNNER: Fixed few Coverity issues


Commit: 7f53a0cd31f07cdcc9610b3c6972002e296ff0ee
    https://github.com/scummvm/scummvm/commit/7f53a0cd31f07cdcc9610b3c6972002e296ff0ee
Author: Peter Kohaut (peter.kohaut at gmail.com)
Date: 2018-02-01T21:38:30+01:00

Commit Message:
BLADERUNNER: Fixed few Coverity issues

Changed paths:
    engines/bladerunner/actor.cpp
    engines/bladerunner/ambient_sounds.cpp
    engines/bladerunner/archive.cpp
    engines/bladerunner/archive.h
    engines/bladerunner/aud_stream.cpp
    engines/bladerunner/audio_player.h
    engines/bladerunner/bladerunner.cpp
    engines/bladerunner/color.h
    engines/bladerunner/crimes_database.cpp
    engines/bladerunner/dialogue_menu.cpp
    engines/bladerunner/fog.cpp
    engines/bladerunner/game_info.cpp
    engines/bladerunner/light.cpp
    engines/bladerunner/mouse.cpp
    engines/bladerunner/shape.cpp
    engines/bladerunner/slice_animations.h
    engines/bladerunner/slice_renderer.cpp
    engines/bladerunner/ui/elevator.cpp
    engines/bladerunner/ui/kia.cpp
    engines/bladerunner/ui/kia.h
    engines/bladerunner/ui/kia_section_crimes.h
    engines/bladerunner/ui/kia_section_help.cpp
    engines/bladerunner/ui/kia_shapes.cpp
    engines/bladerunner/ui/spinner.cpp
    engines/bladerunner/ui/ui_scroll_box.cpp
    engines/bladerunner/ui/ui_slider.cpp
    engines/bladerunner/vqa_decoder.h
    engines/bladerunner/vqa_player.h


diff --git a/engines/bladerunner/actor.cpp b/engines/bladerunner/actor.cpp
index 013dace..eb56992 100644
--- a/engines/bladerunner/actor.cpp
+++ b/engines/bladerunner/actor.cpp
@@ -55,6 +55,33 @@ Actor::Actor(BladeRunnerEngine *vm, int actorId) {
 	_combatInfo = new ActorCombat(vm);
 
 	_friendlinessToOther = new int[_vm->_gameInfo->getActorCount()];
+
+	_isMoving                         = false;
+	_isTargetable                     = false;
+	_inCombat                         = false;
+	_isInvisible                      = false;
+	_isImmuneToObstacles              = false;
+	_damageAnimIfMoving               = false;
+	_movementTrackPaused              = false;
+	_movementTrackNextWaypointId      = -1;
+	_movementTrackNextDelay           = -1;
+	_movementTrackNextAngle           = -1;
+	_movementTrackNextRunning         = false;
+	_movementTrackWalkingToWaypointId = -1;
+	_movementTrackDelayOnNextWaypoint = -1;
+	_width                            = 0;
+	_height                           = 0;
+	_animationMode                    = -1;
+	_animationModeCombatIdle          = -1;
+	_animationModeCombatWalk          = -1;
+	_animationModeCombatRun           = -1;
+	_fps                              = 0;
+	_frame_ms                         = 0;
+	_animationId                      = 0;
+	_animationFrame                   = 0;
+	_retiredWidth                     = 0;
+	_retiredHeight                    = 0;
+	_scale                            = 0.0f;
 }
 
 Actor::~Actor() {
@@ -101,7 +128,7 @@ void Actor::setup(int actorId) {
 		_timersStart[i] = _vm->getTotalPlayTime();
 	}
 
-	_scale = 1.0;
+	_scale = 1.0f;
 
 	_honesty = 50;
 	_intelligence = 50;
diff --git a/engines/bladerunner/ambient_sounds.cpp b/engines/bladerunner/ambient_sounds.cpp
index 31683f0..27ab61f 100644
--- a/engines/bladerunner/ambient_sounds.cpp
+++ b/engines/bladerunner/ambient_sounds.cpp
@@ -136,7 +136,8 @@ void AmbientSounds::addLoopingSound(int sfxId, int volume, int pan, int delay) {
 	LoopingSound &track = _loopingSounds[i];
 
 	track.isActive = true;
-	strcpy(track.name, name);
+	strncpy(track.name, name, sizeof(track.name));
+	track.name[sizeof(track.name) - 1] = 0;
 	track.hash = hash;
 	track.pan = pan;
 	track.volume = volume;
@@ -318,7 +319,8 @@ void AmbientSounds::addSoundByName(
 	uint32 now = _vm->getTotalPlayTime();
 
 	track.isActive = true;
-	strcpy(track.name, name);
+	strncpy(track.name, name, sizeof(track.name));
+	track.name[sizeof(track.name) - 1] = 0;
 	track.hash = mix_id(name);
 	track.timeMin = 1000 * timeMin;
 	track.timeMax = 1000 * timeMax;
diff --git a/engines/bladerunner/archive.cpp b/engines/bladerunner/archive.cpp
index 8fdae22..8088e1a 100644
--- a/engines/bladerunner/archive.cpp
+++ b/engines/bladerunner/archive.cpp
@@ -27,11 +27,15 @@
 namespace BladeRunner {
 
 MIXArchive::MIXArchive() {
+	_isTLK      = false;
+	_entryCount = 0;
+	_size       = 0;
 }
 
 MIXArchive::~MIXArchive() {
-	if (_fd.isOpen())
+	if (_fd.isOpen()) {
 		debug("~MIXArchive: fd not closed: %s", _fd.getName());
+	}
 }
 
 bool MIXArchive::open(const Common::String &filename) {
@@ -42,21 +46,23 @@ bool MIXArchive::open(const Common::String &filename) {
 
 	_isTLK = filename.hasSuffix(".TLK");
 
-	_entry_count = _fd.readUint16LE();
-	_size        = _fd.readUint32LE();
+	_entryCount = _fd.readUint16LE();
+	_size       = _fd.readUint32LE();
 
-	_entries.resize(_entry_count);
-	for (uint16 i = 0; i != _entry_count; ++i) {
+	_entries.resize(_entryCount);
+	for (uint16 i = 0; i != _entryCount; ++i) {
 		_entries[i].id     = _fd.readSint32LE();
 		_entries[i].offset = _fd.readUint32LE();
 		_entries[i].length = _fd.readUint32LE();
 
-		if (false)
-			debug("%08x %-12d %-12d", _entries[i].id, _entries[i].offset, _entries[i].length);
+#if BLADERUNNER_DEBUG_CONSOLE
+		debug("%08x %-12d %-12d", _entries[i].id, _entries[i].offset, _entries[i].length);
+#endif
 
 		// Verify that the entries are sorted by id. Note that id is signed.
-		if (i > 0)
+		if (i > 0) {
 			assert(_entries[i].id > _entries[i - 1].id);
+		}
 	}
 
 	if (_fd.err()) {
@@ -83,8 +89,9 @@ bool MIXArchive::isOpen() const {
 int32 mix_id(const Common::String &name) {
 	char buffer[12] = { 0 };
 
-	for (uint i = 0; i != name.size() && i < 12u; ++i)
+	for (uint i = 0; i != name.size() && i < 12u; ++i) {
 		buffer[i] = (char)toupper(name[i]);
+	}
 
 	uint32 id = 0;
 	for (int i = 0; i < 12 && buffer[i]; i += 4) {
@@ -118,19 +125,20 @@ int32 tlk_id(const Common::String &name) {
 }
 
 uint32 MIXArchive::indexForId(int32 id) const {
-	uint32 lo = 0, hi = _entry_count;
+	uint32 lo = 0, hi = _entryCount;
 
 	while (lo < hi) {
 		uint32 mid = lo + (hi - lo) / 2;
 
-		if (id > _entries[mid].id)
+		if (id > _entries[mid].id) {
 			lo = mid + 1;
-		else if (id < _entries[mid].id)
+		} else if (id < _entries[mid].id) {
 			hi = mid;
-		else
+		} else {
 			return mid;
+		}
 	}
-	return _entry_count;
+	return _entryCount;
 }
 
 Common::SeekableReadStream *MIXArchive::createReadStreamForMember(const Common::String &name) {
@@ -143,10 +151,11 @@ Common::SeekableReadStream *MIXArchive::createReadStreamForMember(const Common::
 
 	uint32 i = indexForId(id);
 
-	if (i == _entry_count)
+	if (i == _entryCount) {
 		return nullptr;
+	}
 
-	uint32 start = _entries[i].offset + 6 + 12 * _entry_count;
+	uint32 start = _entries[i].offset + 6 + 12 * _entryCount;
 	uint32 end   = _entries[i].length + start;
 
 	return new Common::SafeSeekableSubReadStream(&_fd, start, end, DisposeAfterUse::NO);
diff --git a/engines/bladerunner/archive.h b/engines/bladerunner/archive.h
index f2809de..7bec41f 100644
--- a/engines/bladerunner/archive.h
+++ b/engines/bladerunner/archive.h
@@ -46,7 +46,7 @@ private:
 	Common::File _fd;
 	bool _isTLK;
 
-	uint16 _entry_count;
+	uint16 _entryCount;
 	uint32 _size;
 
 	struct ArchiveEntry {
diff --git a/engines/bladerunner/aud_stream.cpp b/engines/bladerunner/aud_stream.cpp
index f0ed052..0d4434c 100644
--- a/engines/bladerunner/aud_stream.cpp
+++ b/engines/bladerunner/aud_stream.cpp
@@ -28,12 +28,19 @@
 
 namespace BladeRunner {
 
-AudStream::AudStream(byte *data) : _cache(nullptr) {
+AudStream::AudStream(byte *data) {
+	_hash  = 0;
+	_cache = nullptr;
+
 	init(data);
 }
 
-AudStream::AudStream(AudioCache *cache, int32 hash)
-		: _cache(cache), _hash(hash) {
+AudStream::AudStream(AudioCache *cache, int32 hash) {
+	assert(cache != nullptr);
+
+	_cache = cache;
+	_hash  = hash;
+
 	_cache->incRef(_hash);
 
 	init(_cache->findByHash(_hash));
diff --git a/engines/bladerunner/audio_player.h b/engines/bladerunner/audio_player.h
index 0694982..a75f633 100644
--- a/engines/bladerunner/audio_player.h
+++ b/engines/bladerunner/audio_player.h
@@ -81,8 +81,6 @@ class AudioPlayer {
 		int                 volume;
 		int                 pan;
 		Audio::AudioStream *stream;
-
-		Track() : isActive(false) {}
 	};
 
 	BladeRunnerEngine *_vm;
diff --git a/engines/bladerunner/bladerunner.cpp b/engines/bladerunner/bladerunner.cpp
index f85642a..266a8f9 100644
--- a/engines/bladerunner/bladerunner.cpp
+++ b/engines/bladerunner/bladerunner.cpp
@@ -95,6 +95,8 @@ BladeRunnerEngine::BladeRunnerEngine(OSystem *syst, const ADGameDescription *des
 	_gameIsLoading = false;
 	_sceneIsLoading = false;
 
+	_walkingActorId = -1;
+
 	_walkSoundId = -1;
 	_walkSoundVolume = 0;
 	_walkSoundBalance = 0;
@@ -123,6 +125,53 @@ BladeRunnerEngine::BladeRunnerEngine(OSystem *syst, const ADGameDescription *des
 		default:
 			this->_languageCode = "E";
 	}
+
+	_screenEffects           = nullptr;
+	_combat                  = nullptr;
+	_actorDialogueQueue      = nullptr;
+	_settings                = nullptr;
+	_itemPickup              = nullptr;
+	_lights                  = nullptr;
+	_obstacles               = nullptr;
+	_sceneScript             = nullptr;
+	_gameInfo                = nullptr;
+	_waypoints               = nullptr;
+	_gameVars                = nullptr;
+	_view                    = nullptr;
+	_sceneObjects            = nullptr;
+	_gameFlags               = nullptr;
+	_items                   = nullptr;
+	_audioMixer              = nullptr;
+	_audioPlayer             = nullptr;
+	_music                   = nullptr;
+	_audioSpeech             = nullptr;
+	_ambientSounds           = nullptr;
+	_chapters                = nullptr;
+	_overlays                = nullptr;
+	_zbuffer                 = nullptr;
+	_playerActor             = nullptr;
+	_textActorNames          = nullptr;
+	_textCrimes              = nullptr;
+	_textClueTypes           = nullptr;
+	_textKIA                 = nullptr;
+	_textSpinnerDestinations = nullptr;
+	_textVK                  = nullptr;
+	_textOptions             = nullptr;
+	_dialogueMenu            = nullptr;
+	_suspectsDatabase        = nullptr;
+	_kia                     = nullptr;
+	_spinner                 = nullptr;
+	_elevator                = nullptr;
+	_mainFont                = nullptr;
+	_mouse                   = nullptr;
+	_sliceAnimations         = nullptr;
+	_sliceRenderer           = nullptr;
+	_crimesDatabase          = nullptr;
+	_scene                   = nullptr;
+	_aiScripts               = nullptr;
+	for (int i = 0; i != kActorCount; ++i) {
+		_actors[i] = nullptr;
+	}
 }
 
 BladeRunnerEngine::~BladeRunnerEngine() {
diff --git a/engines/bladerunner/color.h b/engines/bladerunner/color.h
index f979652..beec537 100644
--- a/engines/bladerunner/color.h
+++ b/engines/bladerunner/color.h
@@ -32,11 +32,9 @@ struct Color {
 	float g;
 	float b;
 
-	Color() {
-	}
+	Color() : r(0.0f), g(0.0f), b(0.0f) {}
 
-	Color(float r_, float g_, float b_) : r(r_), g(g_), b(b_) {
-	}
+	Color(float r_, float g_, float b_) : r(r_), g(g_), b(b_) {}
 };
 
 struct Color256 {
diff --git a/engines/bladerunner/crimes_database.cpp b/engines/bladerunner/crimes_database.cpp
index c309005..febe408 100644
--- a/engines/bladerunner/crimes_database.cpp
+++ b/engines/bladerunner/crimes_database.cpp
@@ -35,7 +35,10 @@ CrimesDatabase::CrimesDatabase(BladeRunnerEngine *vm, const char *cluesResource,
 	_assetTypes.resize(_crimeCount);
 
 	_cluesText = new TextResource(vm);
-	_cluesText->open(cluesResource);
+	if (!_cluesText->open(cluesResource)) {
+		delete _cluesText;
+		return;
+	}
 
 	for (int i = 0; i != _crimeCount; ++i) {
 		_crimes[i] = -1;
diff --git a/engines/bladerunner/dialogue_menu.cpp b/engines/bladerunner/dialogue_menu.cpp
index 2d55dee..d23d8e0 100644
--- a/engines/bladerunner/dialogue_menu.cpp
+++ b/engines/bladerunner/dialogue_menu.cpp
@@ -46,6 +46,11 @@ DialogueMenu::DialogueMenu(BladeRunnerEngine *vm) {
 		assert(r);
 		(void)r;
 	}
+
+	_screenX = 0;
+	_screenY = 0;
+	_maxItemWidth = 0;
+	_fadeInItemIndex = 0;
 }
 
 DialogueMenu::~DialogueMenu() {
diff --git a/engines/bladerunner/fog.cpp b/engines/bladerunner/fog.cpp
index 06166bb..2befaf3 100644
--- a/engines/bladerunner/fog.cpp
+++ b/engines/bladerunner/fog.cpp
@@ -27,6 +27,27 @@
 namespace BladeRunner {
 
 Fog::Fog() {
+	_name[0]            = 0;
+	_frameCount         = 0;
+	_animatedParameters = 0;
+	_fogDensity         = 0.0f;
+	_animationData      = nullptr;
+	_m11ptr             = nullptr;
+	_m12ptr             = nullptr;
+	_m13ptr             = nullptr;
+	_m14ptr             = nullptr;
+	_m21ptr             = nullptr;
+	_m22ptr             = nullptr;
+	_m23ptr             = nullptr;
+	_m24ptr             = nullptr;
+	_m31ptr             = nullptr;
+	_m32ptr             = nullptr;
+	_m33ptr             = nullptr;
+	_m34ptr             = nullptr;
+	_parameter1         = 0.0f;
+	_parameter2         = 0.0f;
+	_parameter3         = 0.0f;
+	_next               = nullptr;
 }
 
 Fog::~Fog() {
diff --git a/engines/bladerunner/game_info.cpp b/engines/bladerunner/game_info.cpp
index baffb87..c26bfa5 100644
--- a/engines/bladerunner/game_info.cpp
+++ b/engines/bladerunner/game_info.cpp
@@ -31,10 +31,26 @@ namespace BladeRunner {
 
 GameInfo::GameInfo(BladeRunnerEngine *vm) {
 	_vm = vm;
-	_sceneNames  = nullptr;
-	_sfxTracks   = nullptr;
-	_musicTracks = nullptr;
-	_outtakes    = nullptr;
+	_sceneNames         = nullptr;
+	_sfxTracks          = nullptr;
+	_musicTracks        = nullptr;
+	_outtakes           = nullptr;
+	_actorCount         = 0;
+	_playerId           = 0;
+	_flagCount          = 0;
+	_clueCount          = 0;
+	_globalVarCount     = 0;
+	_setNamesCount      = 0;
+	_initialSceneId     = 0;
+	_initialSetId       = 0;
+	_waypointCount      = 0;
+	_sfxTrackCount      = 0;
+	_musicTrackCount    = 0;
+	_outtakeCount       = 0;
+	_crimeCount         = 0;
+	_suspectCount       = 0;
+	_coverWaypointCount = 0;
+	_fleeWaypointCount  = 0;
 }
 
 GameInfo::~GameInfo() {
diff --git a/engines/bladerunner/light.cpp b/engines/bladerunner/light.cpp
index 93481fe..6159582 100644
--- a/engines/bladerunner/light.cpp
+++ b/engines/bladerunner/light.cpp
@@ -27,7 +27,33 @@
 namespace BladeRunner {
 
 Light::Light() {
-	_animationData = nullptr;
+	_frameCount         = 0;
+	_animated           = 0;
+	_animationData      = nullptr;
+	_animatedParameters = 0;
+	_falloffStart       = 0.0f;
+	_falloffEnd         = 0.0f;
+	_angleStart         = 0.0f;
+	_angleEnd           = 0.0f;
+	_m11ptr             = nullptr;
+	_m12ptr             = nullptr;
+	_m13ptr             = nullptr;
+	_m14ptr             = nullptr;
+	_m21ptr             = nullptr;
+	_m22ptr             = nullptr;
+	_m23ptr             = nullptr;
+	_m24ptr             = nullptr;
+	_m31ptr             = nullptr;
+	_m32ptr             = nullptr;
+	_m33ptr             = nullptr;
+	_m34ptr             = nullptr;
+	_colorRPtr          = nullptr;
+	_colorGPtr          = nullptr;
+	_colorBPtr          = nullptr;
+	_falloffStartPtr    = nullptr;
+	_falloffEndPtr      = nullptr;
+	_angleStartPtr      = nullptr;
+	_angleEndPtr        = nullptr;
 }
 
 Light::~Light() {
diff --git a/engines/bladerunner/mouse.cpp b/engines/bladerunner/mouse.cpp
index 35059f4..ab58d7f 100644
--- a/engines/bladerunner/mouse.cpp
+++ b/engines/bladerunner/mouse.cpp
@@ -45,6 +45,7 @@ Mouse::Mouse(BladeRunnerEngine *vm) {
 	_y = 0;
 	_disabledCounter = 0;
 	_lastFrameTime = 0;
+	_animCounter = 0;
 }
 
 Mouse::~Mouse() {
diff --git a/engines/bladerunner/shape.cpp b/engines/bladerunner/shape.cpp
index 571bb90..f5a6804 100644
--- a/engines/bladerunner/shape.cpp
+++ b/engines/bladerunner/shape.cpp
@@ -33,8 +33,10 @@
 namespace BladeRunner {
 
 Shape::Shape(BladeRunnerEngine *vm) {
-	_vm = vm;
-	_data = nullptr;
+	_vm     = vm;
+	_data   = nullptr;
+	_width  = 0;
+	_height = 0;
 }
 
 Shape::~Shape() {
diff --git a/engines/bladerunner/slice_animations.h b/engines/bladerunner/slice_animations.h
index a34b6ec..edc0684 100644
--- a/engines/bladerunner/slice_animations.h
+++ b/engines/bladerunner/slice_animations.h
@@ -60,7 +60,7 @@ class SliceAnimations {
 		void   *_data;
 		uint32 _lastAccess;
 
-		Page() : _data(nullptr) {}
+		Page() : _data(nullptr), _lastAccess(0) {}
 	};
 
 	struct PageFile {
@@ -90,10 +90,13 @@ class SliceAnimations {
 
 public:
 	SliceAnimations(BladeRunnerEngine *vm)
-		: _vm(vm),
-		  _coreAnimPageFile(this),
-		  _framesPageFile(this) {
-	}
+		: _vm(vm)
+		, _coreAnimPageFile(this)
+		, _framesPageFile(this)
+		, _timestamp(0)
+		, _pageSize(0)
+		, _pageCount(0)
+		, _paletteCount(0) {}
 	~SliceAnimations();
 
 	bool open(const Common::String &name);
diff --git a/engines/bladerunner/slice_renderer.cpp b/engines/bladerunner/slice_renderer.cpp
index 56bdc66..233c0d1 100644
--- a/engines/bladerunner/slice_renderer.cpp
+++ b/engines/bladerunner/slice_renderer.cpp
@@ -236,14 +236,14 @@ void SliceRenderer::loadFrame(int animation, int frame) {
 
 	Common::MemoryReadStream stream((byte *)_sliceFramePtr, _vm->_sliceAnimations->_animations[_animation].frameSize);
 
-	_frameScale.x = stream.readFloatLE();
-	_frameScale.y = stream.readFloatLE();
-	_frameSliceHeight = stream.readFloatLE();
-	_framePos.x = stream.readFloatLE();
-	_framePos.y = stream.readFloatLE();
-	_frameBottomZ = stream.readFloatLE();
+	_frameScale.x      = stream.readFloatLE();
+	_frameScale.y      = stream.readFloatLE();
+	_frameSliceHeight  = stream.readFloatLE();
+	_framePos.x        = stream.readFloatLE();
+	_framePos.y        = stream.readFloatLE();
+	_frameBottomZ      = stream.readFloatLE();
 	_framePaletteIndex = stream.readUint32LE();
-	_frameSliceCount = stream.readUint32LE();
+	_frameSliceCount   = stream.readUint32LE();
 }
 
 struct SliceLineIterator {
@@ -581,6 +581,8 @@ SliceRendererLights::SliceRendererLights(Lights *lights) {
 		_cacheColor[i].g = 0.0f;
 		_cacheColor[i].b = 0.0f;
 	}
+
+	_cacheRecalculation = 0.0f;
 }
 
 void SliceRendererLights::calculateColorBase(Vector3 position1, Vector3 position2, float height) {
diff --git a/engines/bladerunner/ui/elevator.cpp b/engines/bladerunner/ui/elevator.cpp
index f0c8d7d..1ee4115 100644
--- a/engines/bladerunner/ui/elevator.cpp
+++ b/engines/bladerunner/ui/elevator.cpp
@@ -241,6 +241,7 @@ void Elevator::reset() {
 	_actorId = -1;
 	_sentenceId = -1;
 	_timeSpeakDescription = 0;
+	_buttonClicked = false;
 }
 
 void Elevator::buttonFocus(int buttonId) {
diff --git a/engines/bladerunner/ui/kia.cpp b/engines/bladerunner/ui/kia.cpp
index 24316aa..95a66b6 100644
--- a/engines/bladerunner/ui/kia.cpp
+++ b/engines/bladerunner/ui/kia.cpp
@@ -91,17 +91,14 @@ KIA::KIA(BladeRunnerEngine *vm) {
 	_playerPhotograph = nullptr;
 	_playerSliceModelId = -1;
 	_playerSliceModelAngle = 0.0f;
-	// _playerImage = nullptr;
 	_timeLast = _vm->getTotalPlayTime();
-	_playerActorDialogueQueueCapacity = 31;
 	_playerActorDialogueQueuePosition = 0;
 	_playerActorDialogueQueueSize = 0;
-	_playerActorDialogueQueue = new ActorDialogueQueueEntry[_playerActorDialogueQueueCapacity];
 	_playerActorDialogueState = 0;
 	_currentSection = nullptr;
 	_mainVqaPlayer = nullptr;
 	_playerVqaPlayer = nullptr;
-	// _thumbnail = nullptr;
+	_transitionId = 0;
 
 	_pogoPos = 0;
 
@@ -119,10 +116,17 @@ KIA::KIA(BladeRunnerEngine *vm) {
 }
 
 KIA::~KIA() {
-	delete _playerPhotograph;
-	// delete _playerImage;
-	// delete _thumbnail;
+	delete _crimesSection;
+	delete _suspectsSection;
+	delete _cluesSection;
 	delete _settingsSection;
+	delete _helpSection;
+	delete _saveSection;
+	delete _loadSection;
+	delete _diagnosticSection;
+	delete _pogoSection;
+
+	delete _playerPhotograph;
 	delete _buttons;
 	delete _shapes;
 	delete _log;
@@ -155,7 +159,7 @@ void KIA::tick() {
 	} else if (_playerActorDialogueState == 200) {
 		if (!_vm->_actors[_playerActorDialogueQueue[_playerActorDialogueQueuePosition].actorId]->isSpeeching()) {
 			if (_playerActorDialogueQueueSize != _playerActorDialogueQueuePosition) {
-				_playerActorDialogueQueuePosition = (_playerActorDialogueQueuePosition + 1) % _playerActorDialogueQueueCapacity;
+				_playerActorDialogueQueuePosition = (_playerActorDialogueQueuePosition + 1) % kPlayerActorDialogueQueueCapacity;
 			}
 			if (_playerActorDialogueQueueSize != _playerActorDialogueQueuePosition) {
 				_vm->_actors[_playerActorDialogueQueue[_playerActorDialogueQueuePosition].actorId]->speechPlay(_playerActorDialogueQueue[_playerActorDialogueQueuePosition].sentenceId, true);
@@ -444,7 +448,7 @@ void KIA::playerReset() {
 }
 
 void KIA::playActorDialogue(int actorId, int sentenceId) {
-	int newQueueSize = (_playerActorDialogueQueueSize + 1) % _playerActorDialogueQueueCapacity;
+	int newQueueSize = (_playerActorDialogueQueueSize + 1) % kPlayerActorDialogueQueueCapacity;
 	if (newQueueSize != _playerActorDialogueQueuePosition) {
 		_playerActorDialogueQueue[_playerActorDialogueQueueSize].actorId = actorId;
 		_playerActorDialogueQueue[_playerActorDialogueQueueSize].sentenceId = sentenceId;
diff --git a/engines/bladerunner/ui/kia.h b/engines/bladerunner/ui/kia.h
index c979f9f..0452230 100644
--- a/engines/bladerunner/ui/kia.h
+++ b/engines/bladerunner/ui/kia.h
@@ -56,6 +56,7 @@ class VQAPlayer;
 
 class KIA {
 	static const char *kPogo;
+	static const int kPlayerActorDialogueQueueCapacity = 31;
 
 	struct ActorDialogueQueueEntry {
 		int actorId;
@@ -80,11 +81,10 @@ class KIA {
 	float      _playerSliceModelAngle;
 	int        _timeLast;
 
-	ActorDialogueQueueEntry *_playerActorDialogueQueue;
-	int                      _playerActorDialogueQueueCapacity;
-	int                      _playerActorDialogueQueuePosition;
-	int                      _playerActorDialogueQueueSize;
-	int                      _playerActorDialogueState;
+	ActorDialogueQueueEntry _playerActorDialogueQueue[kPlayerActorDialogueQueueCapacity];
+	int                     _playerActorDialogueQueuePosition;
+	int                     _playerActorDialogueQueueSize;
+	int                     _playerActorDialogueState;
 
 	KIASectionBase       *_currentSection;
 	KIASectionClues      *_cluesSection;
diff --git a/engines/bladerunner/ui/kia_section_crimes.h b/engines/bladerunner/ui/kia_section_crimes.h
index 1ca60eb..23983b8 100644
--- a/engines/bladerunner/ui/kia_section_crimes.h
+++ b/engines/bladerunner/ui/kia_section_crimes.h
@@ -72,7 +72,7 @@ class KIASectionCrimes : public KIASectionBase {
 	Shape *_suspectPhotoShape;
 
 public:
-	int                 _suspectSelected;
+	int _suspectSelected;
 
 public:
 	KIASectionCrimes(BladeRunnerEngine *vm, ActorClues *clues);
diff --git a/engines/bladerunner/ui/kia_section_help.cpp b/engines/bladerunner/ui/kia_section_help.cpp
index 5065382..61cfc99 100644
--- a/engines/bladerunner/ui/kia_section_help.cpp
+++ b/engines/bladerunner/ui/kia_section_help.cpp
@@ -46,7 +46,9 @@ KIASectionHelp::~KIASectionHelp() {
 
 void KIASectionHelp::open() {
 	TextResource textResource(_vm);
-	textResource.open("HELP");
+	if (!textResource.open("HELP")) {
+		return;
+	}
 
 	_scrollBox->clearLines();
 
diff --git a/engines/bladerunner/ui/kia_shapes.cpp b/engines/bladerunner/ui/kia_shapes.cpp
index 6835216..d992ec7 100644
--- a/engines/bladerunner/ui/kia_shapes.cpp
+++ b/engines/bladerunner/ui/kia_shapes.cpp
@@ -29,6 +29,9 @@ namespace BladeRunner {
 KIAShapes::KIAShapes(BladeRunnerEngine *vm) {
 	_vm = vm;
 	_isLoaded = false;
+	for (uint i = 0; i < kShapeCount; ++i) {
+		_shapes[i] = nullptr;
+	}
 }
 
 KIAShapes::~KIAShapes() {
diff --git a/engines/bladerunner/ui/spinner.cpp b/engines/bladerunner/ui/spinner.cpp
index cc913e3..72c8b19 100644
--- a/engines/bladerunner/ui/spinner.cpp
+++ b/engines/bladerunner/ui/spinner.cpp
@@ -99,8 +99,6 @@ int Spinner::chooseDestination(int loopId, bool immediately) {
 	int shapeCount = 0;
 	int spinnerLoopId = 4;
 
-	mapmask = 1;
-
 	if (mapmask & 4) {
 		_destinations = getDestinationsFar();
 		firstShapeId = 26;
@@ -168,11 +166,9 @@ int Spinner::chooseDestination(int loopId, bool immediately) {
 	}
 	_shapes.clear();
 
-	if (_vqaPlayer != nullptr) {
-		_vqaPlayer->close();
-		delete _vqaPlayer;
-		_vqaPlayer = nullptr;
-	}
+	_vqaPlayer->close();
+	delete _vqaPlayer;
+	_vqaPlayer = nullptr;
 
 	_vm->closeArchive("MODE.MIX");
 
diff --git a/engines/bladerunner/ui/ui_scroll_box.cpp b/engines/bladerunner/ui/ui_scroll_box.cpp
index a0d53a4..6bd4dab 100644
--- a/engines/bladerunner/ui/ui_scroll_box.cpp
+++ b/engines/bladerunner/ui/ui_scroll_box.cpp
@@ -75,8 +75,10 @@ UIScrollBox::UIScrollBox(BladeRunnerEngine *vm, UIScrollBoxCallback *lineSelecte
 	_maxLineCount = maxLineCount;
 
 	_firstLineVisible = 0;
+	_maxLinesVisible  = _rect.height() / kLineHeight;
+
+	_mouseButton = false;
 
-	_maxLinesVisible = _rect.height() / kLineHeight;
 	_rect.bottom = _rect.top + kLineHeight * _maxLinesVisible - 1;
 
 	_lines.resize(_maxLineCount);
diff --git a/engines/bladerunner/ui/ui_slider.cpp b/engines/bladerunner/ui/ui_slider.cpp
index d25b7fa..88d9567 100644
--- a/engines/bladerunner/ui/ui_slider.cpp
+++ b/engines/bladerunner/ui/ui_slider.cpp
@@ -44,6 +44,7 @@ UISlider::UISlider(BladeRunnerEngine *vm, UIComponentCallback *valueChangedCallb
 	_currentFrameColor = 0;
 	_hasFocus = false;
 	_pressedStatus = 0;
+	_mouseX = 0;
 }
 
 void UISlider::draw(Graphics::Surface &surface) {
diff --git a/engines/bladerunner/vqa_decoder.h b/engines/bladerunner/vqa_decoder.h
index 5ba50a8..8ab6be5 100644
--- a/engines/bladerunner/vqa_decoder.h
+++ b/engines/bladerunner/vqa_decoder.h
@@ -123,7 +123,7 @@ private:
 		uint32  flags;
 		Loop   *loops;
 
-		LoopInfo() : loopCount(0), loops(nullptr) {}
+		LoopInfo() : loopCount(0), loops(nullptr), flags(0) {}
 		~LoopInfo() {
 			delete[] loops;
 		}
diff --git a/engines/bladerunner/vqa_player.h b/engines/bladerunner/vqa_player.h
index 297f717..d276b91 100644
--- a/engines/bladerunner/vqa_player.h
+++ b/engines/bladerunner/vqa_player.h
@@ -79,6 +79,7 @@ public:
 		  _s(nullptr),
 		  _decoder(surface),
 		  _audioStream(nullptr),
+		  _frame(-1),
 		  _frameNext(-1),
 		  _frameBegin(-1),
 		  _frameEnd(-1),





More information about the Scummvm-git-logs mailing list