diff options
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), |