[Scummvm-git-logs] scummvm master -> a0883e6aaf81e504fd4b3f0808eee0a418fe33f4

dreammaster paulfgilbert at gmail.com
Fri Nov 20 04:22:54 UTC 2020


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:
a0883e6aaf GLK: COMPREHEND: Fix wearing or removing goggles in too bright room


Commit: a0883e6aaf81e504fd4b3f0808eee0a418fe33f4
    https://github.com/scummvm/scummvm/commit/a0883e6aaf81e504fd4b3f0808eee0a418fe33f4
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2020-11-19T20:22:37-08:00

Commit Message:
GLK: COMPREHEND: Fix wearing or removing goggles in too bright room

Changed paths:
    engines/glk/comprehend/game.cpp
    engines/glk/comprehend/game.h
    engines/glk/comprehend/game_oo.cpp
    engines/glk/comprehend/game_oo.h


diff --git a/engines/glk/comprehend/game.cpp b/engines/glk/comprehend/game.cpp
index b4e4136a7e..f580d1613d 100644
--- a/engines/glk/comprehend/game.cpp
+++ b/engines/glk/comprehend/game.cpp
@@ -805,7 +805,6 @@ void ComprehendGame::read_input() {
 	Sentence tempSentence;
 	bool handled;
 
-	beforePrompt();
 	doBeforeTurn();
 	if (_ended)
 		return;
@@ -816,11 +815,15 @@ void ComprehendGame::read_input() {
 		g_comprehend->print("\n");
 
 	for (;;) {
+		beforePrompt();
+
 		g_comprehend->print("> ");
 		g_comprehend->readLine(_inputLine, INPUT_LINE_SIZE);
 		if (g_comprehend->shouldQuit())
 			return;
 
+		afterPrompt();
+
 		_inputLineIndex = 0;
 		if (strlen(_inputLine) != 0)
 			break;
diff --git a/engines/glk/comprehend/game.h b/engines/glk/comprehend/game.h
index 0a1c7483f2..8bb824d221 100644
--- a/engines/glk/comprehend/game.h
+++ b/engines/glk/comprehend/game.h
@@ -138,6 +138,7 @@ public:
 
 	virtual void beforeGame() {}
 	virtual void beforePrompt() {}
+	virtual void afterPrompt() {}
 	virtual void beforeTurn();
 	virtual void afterTurn() {}
 	virtual int roomIsSpecial(unsigned room_index, unsigned *room_desc_string) {
diff --git a/engines/glk/comprehend/game_oo.cpp b/engines/glk/comprehend/game_oo.cpp
index 749ac383a8..e79a143768 100644
--- a/engines/glk/comprehend/game_oo.cpp
+++ b/engines/glk/comprehend/game_oo.cpp
@@ -45,7 +45,7 @@ enum OOToposFlag {
 	OO_FLAG_SUFFICIENT_FUEL = 51,
 	OO_FLAG_REVERSE_VIDEO = 53,	// Effect of wearing goggles
 	OO_FLAG_55 = 55,
-	OO_FLAG_56 = 56,
+	OO_FLAG_TOO_BRIGHT = 56,
 	OO_FLAG_58 = 58,
 	OO_FLAG_59 = 59,
 	OO_FLAG_READY_TO_DEPART = 60,
@@ -62,7 +62,7 @@ static const GameStrings OO_STRINGS = {
 
 OOToposGame::OOToposGame() : ComprehendGameV2(), _restartMode(RESTART_IMMEDIATE),
 		_noFloodfill(UNSET), _lightOn(UNSET), _stringVal1(0), _stringVal2(0),
-		_printComputerMsg(true), _shipNotWorking(false) {
+		_printComputerMsg(true), _shipNotWorking(false), _currentRoomCopy(-1) {
 	_gameDataFile = "g0";
 
 	// Extra strings are (annoyingly) stored in the game binary
@@ -121,35 +121,18 @@ int OOToposGame::roomIsSpecial(unsigned room_index, unsigned *roomDescString) {
 }
 
 void OOToposGame::beforeTurn() {
-#if 0
-	Room *room = &_rooms[_currentRoom];
-
-	/*
-	 * Check if the room needs to be redrawn because the flashlight
-	 * was switch off or on.
-	 */
-	if (_flags[OO_FLAG_FLASHLIGHT_ON] != _lightOn &&
-	        (room->_flags & OO_ROOM_FLAG_DARK)) {
-		_lightOn = _flags[OO_FLAG_FLASHLIGHT_ON];
-		_updateFlags |= UPDATE_GRAPHICS | UPDATE_ROOM_DESC;
-	}
-
-	/*
-	 * Check if the room needs to be redrawn because the goggles were
-	 * put on or removed.
-	 */
-	if (_flags[OO_FLAG_WEARING_GOGGLES] != _wearingGoggles &&
-	        _currentRoom == OO_BRIGHT_ROOM) {
-		_wearingGoggles = _flags[OO_FLAG_WEARING_GOGGLES];
-		_updateFlags |= UPDATE_GRAPHICS | UPDATE_ROOM_DESC;
-	}
-#endif
 	ComprehendGameV2::beforeTurn();
 
+	// Make  a copy of the current room
+	_currentRoomCopy = _currentRoom;
+
 	if (_flags[OO_FLAG_55]) {
 		_currentRoom = 55;
-	} else if (_flags[OO_FLAG_56]) {
+		_updateFlags |= UPDATE_GRAPHICS;
+	} else if (_flags[OO_FLAG_TOO_BRIGHT]) {
+		// Show placeholder room if room is too bright
 		_currentRoom = 54;
+		_updateFlags |= UPDATE_GRAPHICS;
 	} else {
 		YesNo nff = _flags[OO_FLAG_REVERSE_VIDEO] ? YES : NO;
 
@@ -163,13 +146,19 @@ void OOToposGame::beforeTurn() {
 				g_comprehend->_drawFlags &= ~IMAGEF_REVERSE;
 		}
 	}
+}
 
+void OOToposGame::beforePrompt() {
 	// Handle the computer console if in front of it
 	computerConsole();
 }
 
-void OOToposGame::afterTurn() {
-	ComprehendGameV2::afterTurn();
+void OOToposGame::afterPrompt() {
+	ComprehendGameV2::afterPrompt();
+
+	if (_currentRoom != _currentRoomCopy)
+		_updateFlags |= UPDATE_GRAPHICS;
+	_currentRoom = _currentRoomCopy;
 }
 
 void OOToposGame::handleSpecialOpcode(uint8 operand) {
diff --git a/engines/glk/comprehend/game_oo.h b/engines/glk/comprehend/game_oo.h
index 0024ad9e06..a7f67a1376 100644
--- a/engines/glk/comprehend/game_oo.h
+++ b/engines/glk/comprehend/game_oo.h
@@ -38,6 +38,7 @@ private:
 	YesNo _noFloodfill, _lightOn;
 	int _stringVal1, _stringVal2;
 	bool _printComputerMsg, _shipNotWorking;
+	int _currentRoomCopy;
 
 	/**
 	 * Randomizes a guard to different locations
@@ -80,7 +81,8 @@ public:
 
 	void beforeGame() override;
 	void beforeTurn() override;
-	void afterTurn() override;
+	void beforePrompt() override;
+	void afterPrompt() override;
 	int roomIsSpecial(unsigned room_index, unsigned *room_desc_string) override;
 	void handleSpecialOpcode(uint8 operand) override;
 	bool handle_restart() override;




More information about the Scummvm-git-logs mailing list