aboutsummaryrefslogtreecommitdiff
path: root/engines
diff options
context:
space:
mode:
Diffstat (limited to 'engines')
-rw-r--r--engines/bladerunner/actor.cpp29
-rw-r--r--engines/bladerunner/ambient_sounds.cpp6
-rw-r--r--engines/bladerunner/archive.cpp41
-rw-r--r--engines/bladerunner/archive.h2
-rw-r--r--engines/bladerunner/aud_stream.cpp13
-rw-r--r--engines/bladerunner/audio_player.h2
-rw-r--r--engines/bladerunner/bladerunner.cpp49
-rw-r--r--engines/bladerunner/color.h6
-rw-r--r--engines/bladerunner/crimes_database.cpp5
-rw-r--r--engines/bladerunner/dialogue_menu.cpp5
-rw-r--r--engines/bladerunner/fog.cpp21
-rw-r--r--engines/bladerunner/game_info.cpp24
-rw-r--r--engines/bladerunner/light.cpp28
-rw-r--r--engines/bladerunner/mouse.cpp1
-rw-r--r--engines/bladerunner/shape.cpp6
-rw-r--r--engines/bladerunner/slice_animations.h13
-rw-r--r--engines/bladerunner/slice_renderer.cpp16
-rw-r--r--engines/bladerunner/ui/elevator.cpp1
-rw-r--r--engines/bladerunner/ui/kia.cpp22
-rw-r--r--engines/bladerunner/ui/kia.h10
-rw-r--r--engines/bladerunner/ui/kia_section_crimes.h2
-rw-r--r--engines/bladerunner/ui/kia_section_help.cpp4
-rw-r--r--engines/bladerunner/ui/kia_shapes.cpp3
-rw-r--r--engines/bladerunner/ui/spinner.cpp10
-rw-r--r--engines/bladerunner/ui/ui_scroll_box.cpp4
-rw-r--r--engines/bladerunner/ui/ui_slider.cpp1
-rw-r--r--engines/bladerunner/vqa_decoder.h2
-rw-r--r--engines/bladerunner/vqa_player.h1
28 files changed, 253 insertions, 74 deletions
diff --git a/engines/bladerunner/actor.cpp b/engines/bladerunner/actor.cpp
index 013dace5e1..eb56992f50 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 31683f01c1..27ab61f74f 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 8fdae22eb2..8088e1ac67 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 f2809deeac..7bec41f97a 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 f0ed05200b..0d4434cbbf 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 06949828ea..a75f633633 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 f85642a8f2..266a8f9c6b 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 f9796526cb..beec53760b 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 c309005d28..febe408cd9 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 2d55deee3f..d23d8e0d25 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 06166bb30b..2befaf3e95 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 baffb87428..c26bfa5418 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 93481fe9aa..615958281a 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 35059f4e00..ab58d7f2aa 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 571bb90938..f5a68045da 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 a34b6ec13e..edc0684140 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 56bdc66fe7..233c0d19a0 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 f0c8d7d921..1ee4115fab 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 24316aa53e..95a66b6332 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 c979f9ff8b..0452230382 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 1ca60eb02b..23983b8d39 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 5065382c41..61cfc99157 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 6835216e26..d992ec7045 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 cc913e3a9c..72c8b19070 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 a0d53a444d..6bd4dabdd4 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 d25b7fac2c..88d9567639 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 5ba50a8c8a..8ab6be5c7e 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 297f717450..d276b9111c 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),