diff --git a/engines/hypno/arcade.cpp b/engines/hypno/arcade.cpp index 3de747cf0ed..e29b354a0db 100644 --- a/engines/hypno/arcade.cpp +++ b/engines/hypno/arcade.cpp @@ -508,7 +508,7 @@ void HypnoEngine::runArcade(ArcadeShooting *arc) { } else if (!it->video && it->bodyFrames.size() > 0) { uint32 frame = _background->decoder->getCurFrame(); uint32 bodyLastFrame = it->bodyFrames[it->bodyFrames.size() - 1].lastFrame(); - if (frame > it->startFrame && frame - it->startFrame >= bodyLastFrame - 3) + if (frame > it->startFrame && frame - it->startFrame >= bodyLastFrame) if (!it->destroyed) { incTargetsMissed(); missedTarget(it, arc); diff --git a/engines/hypno/boyz/arcade.cpp b/engines/hypno/boyz/arcade.cpp index a7dc4fd97c7..d452fdaca9e 100644 --- a/engines/hypno/boyz/arcade.cpp +++ b/engines/hypno/boyz/arcade.cpp @@ -112,7 +112,12 @@ void BoyzEngine::runAfterArcade(ArcadeShooting *arc) { } return; } else { - if (_levelId == 42) { + if (_levelId == 33 && checkArcadeObjectives()) { + MVideo video("c3/c33a02s.smk", Common::Point(0, 0), false, true, false); + runIntro(video); + defaultCursor(); + waitForUserClick(1); + } else if (_levelId == 42) { disableCursor(); MVideo video("c4/c4bro8s.smk", Common::Point(0, 0), false, true, false); runIntro(video); @@ -589,6 +594,9 @@ bool BoyzEngine::shoot(const Common::Point &mousePos, ArcadeShooting *arc, bool return false; } + // Not really killed, but counted as objective + _objKillsCount[_objIdx] = _objKillsCount[_objIdx] + _shoots[i].objKillsCount; + if (!_shoots[i].additionalVideo.empty()) { incFriendliesEncountered(); incInfoReceived(); @@ -627,8 +635,10 @@ bool BoyzEngine::shoot(const Common::Point &mousePos, ArcadeShooting *arc, bool incInfoReceived(); _background->decoder->forceSeekToFrame(_shoots[i].interactionFrame); _masks->decoder->forceSeekToFrame(_shoots[i].interactionFrame); - _additionalVideo = new MVideo(arc->missBoss2Video, Common::Point(0, 0), true, false, false); - playVideo(*_additionalVideo); + if (!arc->missBoss2Video.empty()) { + _additionalVideo = new MVideo(arc->missBoss2Video, Common::Point(0, 0), true, false, false); + playVideo(*_additionalVideo); + } //_shoots[i].lastFrame = _background->decoder->getFrameCount(); _shoots[i].destroyed = true; _shootsDestroyed[_shoots[i].name] = true; diff --git a/engines/hypno/boyz/boyz.cpp b/engines/hypno/boyz/boyz.cpp index c2fb1d07e54..af08c75e397 100644 --- a/engines/hypno/boyz/boyz.cpp +++ b/engines/hypno/boyz/boyz.cpp @@ -241,9 +241,13 @@ void BoyzEngine::loadAssets() { loadArcadeLevel("c31.mi_", "", "", ""); loadArcadeLevel("c32.mi_", "", "", ""); loadArcadeLevel("c33.mi_", "", "", ""); + // This is manually implemented, if objectives are completed + ArcadeShooting *ar = (ArcadeShooting *) _levels["c33.mi_"]; + ar->nextLevelVideo.clear(); + loadArcadeLevel("c34.mi_", "", "", ""); loadArcadeLevel("c35.mi_", "", "", ""); - ArcadeShooting *ar = (ArcadeShooting *) _levels["c35.mi_"]; + ar = (ArcadeShooting *) _levels["c35.mi_"]; ar->backgroundVideo = ""; // This will be manually populated loadArcadeLevel("c351.mi_", "", "", "");