From 962c8b4524f46bbc2394d7a80972db0a474221a3 Mon Sep 17 00:00:00 2001 From: Robert Crossfield Date: Mon, 8 Dec 2014 19:04:17 +1100 Subject: SCUMM: Maniac V0 Demo: Allow F7 to restart, Add handler for opcode 0x6e (o_screenPrepare) --- engines/scumm/file.cpp | 2 +- engines/scumm/input.cpp | 12 ++++++++++-- engines/scumm/script_v0.cpp | 6 +++++- engines/scumm/scumm_v0.h | 1 + 4 files changed, 17 insertions(+), 4 deletions(-) (limited to 'engines') diff --git a/engines/scumm/file.cpp b/engines/scumm/file.cpp index 7ead4c25b5..96b46aa21a 100644 --- a/engines/scumm/file.cpp +++ b/engines/scumm/file.cpp @@ -227,7 +227,7 @@ static const int maniacDemoResourcesPerFile[55] = { 0, 1, 0, 0, 2, 0, 0, 1, 0, 0, 2, 7, 1, 11, 0, 0, 5, 1, 0, 0, 1, 0, 1, 3, 4, 3, 1, 0, 0, 1, - 1, 2, 0, 0, 0 + 2, 2, 0, 0, 0 }; static const int zakResourcesPerFile[59] = { diff --git a/engines/scumm/input.cpp b/engines/scumm/input.cpp index 824dfec144..86048af57c 100644 --- a/engines/scumm/input.cpp +++ b/engines/scumm/input.cpp @@ -452,8 +452,16 @@ void ScummEngine_v2::processKeyboard(Common::KeyState lastKeyHit) { lastKeyHit = Common::KeyState(Common::KEYCODE_ESCAPE); // F7 is used to skip cutscenes in the Commodote 64 version of Maniac Mansion } else if (_game.id == GID_MANIAC &&_game.platform == Common::kPlatformC64) { - if (lastKeyHit.keycode == Common::KEYCODE_F7 && lastKeyHit.hasFlags(0)) - lastKeyHit = Common::KeyState(Common::KEYCODE_ESCAPE); + // Demo always F7 to be pressed to restart + if (_game.features & GF_DEMO) { + if (_roomResource != 0x2D && lastKeyHit.keycode == Common::KEYCODE_F7 && lastKeyHit.hasFlags(0)) { + restart(); + return; + } + } else { + if (lastKeyHit.keycode == Common::KEYCODE_F7 && lastKeyHit.hasFlags(0)) + lastKeyHit = Common::KeyState(Common::KEYCODE_ESCAPE); + } // 'B' is used to skip cutscenes in the NES version of Maniac Mansion } else if (_game.id == GID_MANIAC &&_game.platform == Common::kPlatformNES) { if (lastKeyHit.keycode == Common::KEYCODE_b && lastKeyHit.hasFlags(Common::KBD_SHIFT)) diff --git a/engines/scumm/script_v0.cpp b/engines/scumm/script_v0.cpp index 8d9d196b62..609cbd1e89 100644 --- a/engines/scumm/script_v0.cpp +++ b/engines/scumm/script_v0.cpp @@ -172,7 +172,7 @@ void ScummEngine_v0::setupOpcodes() { /* 6C */ OPCODE(0x6c, o_stopCurrentScript); OPCODE(0x6d, o2_putActorInRoom); - OPCODE(0x6e, o2_dummy); + OPCODE(0x6e, o_screenPrepare); OPCODE(0x6f, o2_ifState08); /* 70 */ OPCODE(0x70, o_lights); @@ -982,6 +982,10 @@ void ScummEngine_v0::o_setOwnerOf() { setOwnerOf(obj, owner); } +void ScummEngine_v0::o_screenPrepare() { + +} + void ScummEngine_v0::resetSentence() { _activeVerb = kVerbWalkTo; _activeObject = 0; diff --git a/engines/scumm/scumm_v0.h b/engines/scumm/scumm_v0.h index e2f4a2ffbf..4098d639c4 100644 --- a/engines/scumm/scumm_v0.h +++ b/engines/scumm/scumm_v0.h @@ -166,6 +166,7 @@ protected: void o_cutscene(); void o_endCutscene(); void o_setOwnerOf(); + void o_screenPrepare(); byte VAR_ACTIVE_OBJECT2; byte VAR_IS_SOUND_RUNNING; -- cgit v1.2.3