[Scummvm-cvs-logs] scummvm master -> 563d890991026b268b420ad65cc55508f1a4c622

m-kiewitz m_kiewitz at users.sourceforge.net
Wed Feb 3 00:26:55 CET 2016


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:
563d890991 AGI: Fix regression of have.key changes


Commit: 563d890991026b268b420ad65cc55508f1a4c622
    https://github.com/scummvm/scummvm/commit/563d890991026b268b420ad65cc55508f1a4c622
Author: Martin Kiewitz (m_kiewitz at users.sourceforge.net)
Date: 2016-02-03T00:26:35+01:00

Commit Message:
AGI: Fix regression of have.key changes

original commit 8269a94bcd55200f7ae8aba00c7b6fd0d37b9a37
Now hopefully properly implemented.
Adjusted a few more inaccuracies
(we set v19 to 0, where we shouldn't have)

Changed paths:
    engines/agi/agi.h
    engines/agi/cycle.cpp
    engines/agi/op_test.cpp
    engines/agi/text.cpp



diff --git a/engines/agi/agi.h b/engines/agi/agi.h
index 801d807..df40344 100644
--- a/engines/agi/agi.h
+++ b/engines/agi/agi.h
@@ -389,8 +389,7 @@ enum CycleInnerLoopType {
 	CYCLE_INNERLOOP_INVENTORY                    = 2,
 	CYCLE_INNERLOOP_MENU_VIA_KEYBOARD            = 3,
 	CYCLE_INNERLOOP_MENU_VIA_MOUSE               = 4,
-	CYCLE_INNERLOOP_SYSTEMUI_SELECTSAVEDGAMESLOT = 5,
-	CYCLE_INNERLOOP_HAVEKEY                      = 6
+	CYCLE_INNERLOOP_SYSTEMUI_SELECTSAVEDGAMESLOT = 5
 };
 
 enum State {
@@ -872,8 +871,6 @@ public:
 	uint8 testController(uint8);
 	uint8 testCompareStrings(uint8, uint8);
 
-	void testHaveKeyCharPress(uint16 newChar);
-
 	// View
 private:
 
diff --git a/engines/agi/cycle.cpp b/engines/agi/cycle.cpp
index e2b6e0a..c9f109b 100644
--- a/engines/agi/cycle.cpp
+++ b/engines/agi/cycle.cpp
@@ -176,7 +176,6 @@ void AgiEngine::interpretCycle() {
 // If main_cycle returns false, don't process more events!
 int AgiEngine::mainCycle(bool onlyCheckForEvents) {
 	uint16 key;
-	byte   keyAscii;
 	ScreenObjEntry *screenObjEgo = &_game.screenObjTable[SCREENOBJECTS_EGO_ENTRY];
 
 	if (!onlyCheckForEvents) {
@@ -219,19 +218,18 @@ int AgiEngine::mainCycle(bool onlyCheckForEvents) {
 		}
 	}
 
-	keyAscii = key & 0xFF;
-	if (keyAscii) {
-		setVar(VM_VAR_KEY, keyAscii);
-	}
-
 	handleMouseClicks(key);
 
 	if (!cycleInnerLoopIsActive()) {
 		// no inner loop active at the moment, regular processing
+
 		if (key) {
+			setVar(VM_VAR_KEY, key & 0xFF);
 			if (!handleController(key)) {
-				if ((key) && (_text->promptIsEnabled())) {
-					_text->promptCharPress(key);
+				if (key) {
+					if (_text->promptIsEnabled()) {
+						_text->promptCharPress(key);
+					}
 				}
 			}
 		}
@@ -239,7 +237,6 @@ int AgiEngine::mainCycle(bool onlyCheckForEvents) {
 	} else {
 		// inner loop active
 		// call specific workers
-		setVar(VM_VAR_KEY, 0);  // clear keys, they must not be passed to the scripts
 		_game.keypress = 0;
 
 		switch (_game.cycleInnerLoopType) {
@@ -272,22 +269,16 @@ int AgiEngine::mainCycle(bool onlyCheckForEvents) {
 			}
 			break;
 
-		case CYCLE_INNERLOOP_HAVEKEY:
-			if (key) {
-				testHaveKeyCharPress(key);
-			}
-			break;
-
 		default:
 			break;
 		}
 	}
 
-	if (_menu->delayedExecuteActive()) {
-		_menu->execute();
-	}
-
 	if (!onlyCheckForEvents) {
+		if (_menu->delayedExecuteActive()) {
+			_menu->execute();
+		}
+
 		if (_game.msgBoxTicks > 0)
 			_game.msgBoxTicks--;
 	}
diff --git a/engines/agi/op_test.cpp b/engines/agi/op_test.cpp
index 3590778..ca473fe 100644
--- a/engines/agi/op_test.cpp
+++ b/engines/agi/op_test.cpp
@@ -119,29 +119,19 @@ void condController(AgiGame *state, AgiEngine *vm, uint8 *p) {
 }
 
 void condHaveKey(AgiGame *state, AgiEngine *vm, uint8 *p) {
-	if (!vm->getVar(VM_VAR_KEY)) {
-		// Only wait for key when there is not already one set by scripts
-		vm->cycleInnerLoopActive(CYCLE_INNERLOOP_HAVEKEY);
-		do {
-			// Only check for events here, without updating the game cycle,
-			// otherwise the animations in some games are drawn too quickly
-			// like, for example, Manannan's lightnings in the intro of KQ3
-			// and the bullets opened in the logo of PQ1, during its intro.
-			// Fixes bug #3600733
-			vm->mainCycle(true);
-		} while (vm->cycleInnerLoopIsActive() && !(vm->shouldQuit() || vm->_restartGame));
+	if (vm->getVar(VM_VAR_KEY)) {
+		state->testResult = 1;
+		return;
 	}
-
-	state->testResult = 1;
-}
-
-void AgiEngine::testHaveKeyCharPress(uint16 newChar) {
-	// pass key to scripts
-	setVar(VM_VAR_KEY, newChar);
-
-	// Exit on any key press
-	cycleInnerLoopInactive();
-	debugC(5, kDebugLevelScripts | kDebugLevelInput, "keypress = %02x", newChar);
+	// Only check for key when there is not already one set by scripts
+	uint16 key = vm->doPollKeyboard();
+	if (key) {
+		debugC(5, kDebugLevelScripts | kDebugLevelInput, "keypress = %02x", key);
+		vm->setVar(VM_VAR_KEY, key);
+		state->testResult = 1;
+		return;
+	}
+	state->testResult = 0;
 }
 
 void condSaid(AgiGame *state, AgiEngine *vm, uint8 *p) {
diff --git a/engines/agi/text.cpp b/engines/agi/text.cpp
index be8dfb2..cb172ea 100644
--- a/engines/agi/text.cpp
+++ b/engines/agi/text.cpp
@@ -350,7 +350,6 @@ bool TextMgr::messageBox(const char *textPtr) {
 
 	if (_vm->getVar(VM_VAR_WINDOW_RESET) == 0) {
 		int userKey;
-		_vm->setVar(VM_VAR_KEY, 0);
 		userKey = _vm->waitKey();
 		closeWindow();
 
@@ -363,7 +362,6 @@ bool TextMgr::messageBox(const char *textPtr) {
 	// timed window
 	debugC(3, kDebugLevelText, "f15==0, v21==%d => timed", _vm->getVar(VM_VAR_WINDOW_RESET));
 	_vm->_game.msgBoxTicks = _vm->getVar(VM_VAR_WINDOW_RESET) * 10;
-	_vm->setVar(VM_VAR_KEY, 0);
 
 	do {
 		if (_vm->getFlag(VM_FLAG_RESTORE_JUST_RAN))






More information about the Scummvm-git-logs mailing list