[Scummvm-git-logs] scummvm master -> 640e81d62205426139beceeff2b538d7b0fb0149

dreammaster paulfgilbert at gmail.com
Sun Nov 8 02:51:14 UTC 2020


This automated email contains information about 3 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
6b55aa029f GLK: COMPREHEND: Fix some println calls, add more flag constants
27df1fdf49 GLK: COMPREHEND: Implementing no-floodfill drawing mode
640e81d622 GLK: COMPREHEND: Rearrange order of beforeTurn/afterTurn


Commit: 6b55aa029f61f42eea28aacafd7bb410b59cdb19
    https://github.com/scummvm/scummvm/commit/6b55aa029f61f42eea28aacafd7bb410b59cdb19
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2020-11-07T18:50:33-08:00

Commit Message:
GLK: COMPREHEND: Fix some println calls, add more flag constants

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


diff --git a/engines/glk/comprehend/game_oo.cpp b/engines/glk/comprehend/game_oo.cpp
index b1f68fb565..fc2a85c4df 100644
--- a/engines/glk/comprehend/game_oo.cpp
+++ b/engines/glk/comprehend/game_oo.cpp
@@ -35,6 +35,7 @@ enum OOToposRoomFlag {
 
 enum OOToposFlag {
 	OO_FLAG_9 = 9,
+	OO_FLAG_13 = 13,
 	OO_FLAG_22 = 22,
 	OO_BRIGHT_ROOM = 25,
 	OO_FLAG_WEARING_GOGGLES = 27,
@@ -42,6 +43,8 @@ enum OOToposFlag {
 	OO_FLAG_43 = 43,
 	OO_FLAG_44 = 44,
 	OO_FLAG_SUFFICIENT_FUEL = 51,
+	OO_FLAG_55 = 55,
+	OO_FLAG_56 = 56,
 	OO_FLAG_58 = 58,
 	OO_FLAG_59 = 59,
 	OO_FLAG_READY_TO_DEPART = 60,
@@ -144,9 +147,9 @@ void OOToposGame::beforeTurn() {
 }
 
 bool OOToposGame::afterTurn() {
-	if (_flags[55])
+	if (_flags[OO_FLAG_55])
 		_currentRoom = 55;
-	else if (_flags[56])
+	else if (_flags[OO_FLAG_56])
 		_currentRoom = 54;
 
 	return true;
@@ -231,7 +234,7 @@ bool OOToposGame::handle_restart() {
 
 void OOToposGame::randomizeGuardLocation() {
 	Item *item = get_item(22);
-	if (_flags[13] && item->_room != _currentRoom) {
+	if (_flags[OO_FLAG_13] && item->_room != _currentRoom) {
 		if (getRandomNumber(255) > 128 && (_currentRoom == 3 || _currentRoom == 6))
 			item->_room = _currentRoom;
 	}
@@ -241,10 +244,10 @@ void OOToposGame::computerConsole() {
 	if (_currentRoom == 57) {
 		if (!_flags[OO_FLAG_9]) {
 			// Mission Code:
-			console_println("281");
+			console_println(_strings2[129].c_str());
 		} else if (!_flags[OO_FLAG_58]) {
 			// Welcome back! I was wondering if you would be returning
-			console_println("283");
+			console_println(_strings2[131].c_str());
 			_flags[OO_FLAG_58] = true;
 			_printComputerMsg = true;
 			checkShipWorking();
@@ -252,22 +255,22 @@ void OOToposGame::computerConsole() {
 			checkShipDepart();
 		} else if (_flags[OO_FLAG_43]) {
 			// We can reach Mealy Sukas with the fuel we have left
-			console_println("28E");
+			console_println(_strings2[142].c_str());
 			_flags[OO_FLAG_59] = true;
 
 			if (_flags[OO_FLAG_44])
 				// The currency on Mealy Sukas is the 'frod'
-				console_println("290");
+				console_println(_strings2[144].c_str());
 			else
 				// Without evaluation data as to the current fuel prices
-				console_println("28F");
+				console_println(_strings2[143].c_str());
 		}
 	}
 }
 
 void OOToposGame::computerResponse() {
 	console_println(_strings2[145].c_str());
-	if (_flags[43])
+	if (_flags[OO_FLAG_43])
 		console_println(_strings2[144].c_str());
 	else
 		console_println(_strings2[152].c_str());
diff --git a/engines/glk/comprehend/game_oo.h b/engines/glk/comprehend/game_oo.h
index dbe0fa0423..3c9f606175 100644
--- a/engines/glk/comprehend/game_oo.h
+++ b/engines/glk/comprehend/game_oo.h
@@ -48,7 +48,7 @@ private:
 	void computerConsole();
 
 	/**
-	 * Handles displaying a cmputer response
+	 * Handles displaying a computer response
 	 */
 	void computerResponse();
 


Commit: 27df1fdf4942a7ad353c569288f4d0d1a4875d5b
    https://github.com/scummvm/scummvm/commit/27df1fdf4942a7ad353c569288f4d0d1a4875d5b
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2020-11-07T18:50:33-08:00

Commit Message:
GLK: COMPREHEND: Implementing no-floodfill drawing mode

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


diff --git a/engines/glk/comprehend/comprehend.cpp b/engines/glk/comprehend/comprehend.cpp
index 7900202a76..882587a29d 100644
--- a/engines/glk/comprehend/comprehend.cpp
+++ b/engines/glk/comprehend/comprehend.cpp
@@ -201,11 +201,16 @@ bool Comprehend::loadLauncherSavegameIfNeeded() {
 	return false;
 }
 
-
 void Comprehend::drawPicture(uint pictureNum) {
-	if (_topWindow)
+	if (_topWindow) {
+		// Clear the picture cache before each drawing in OO-Topos. Wearing the goggles
+		// can producing different versions of the same scene, so we can't cache it
+		if (_gameDescription._gameId == "ootopos")
+			_pictures->clear();
+
 		glk_image_draw_scaled(_topWindow, pictureNum,
 			20 * SCALE_FACTOR, 0, G_RENDER_WIDTH * SCALE_FACTOR, G_RENDER_HEIGHT * SCALE_FACTOR);
+	}
 }
 
 void Comprehend::drawLocationPicture(int pictureNum, bool clearBg) {
diff --git a/engines/glk/comprehend/game_oo.cpp b/engines/glk/comprehend/game_oo.cpp
index fc2a85c4df..4379ae5df5 100644
--- a/engines/glk/comprehend/game_oo.cpp
+++ b/engines/glk/comprehend/game_oo.cpp
@@ -38,11 +38,12 @@ enum OOToposFlag {
 	OO_FLAG_13 = 13,
 	OO_FLAG_22 = 22,
 	OO_BRIGHT_ROOM = 25,
-	OO_FLAG_WEARING_GOGGLES = 27,
+	OO_FLAG_WEARING_GOGGLES = 27,	// ?
 	OO_FLAG_FLASHLIGHT_ON = 39,
 	OO_FLAG_43 = 43,
 	OO_FLAG_44 = 44,
 	OO_FLAG_SUFFICIENT_FUEL = 51,
+	OO_FLAG_53 = 53,
 	OO_FLAG_55 = 55,
 	OO_FLAG_56 = 56,
 	OO_FLAG_58 = 58,
@@ -60,7 +61,7 @@ static const GameStrings OO_STRINGS = {
 };
 
 OOToposGame::OOToposGame() : ComprehendGameV2(), _restartMode(RESTART_IMMEDIATE),
-		_wearingGoggles(false), _lightOn(false), _stringVal1(0), _stringVal2(0),
+		_noFloodfill(UNSET), _lightOn(UNSET), _stringVal1(0), _stringVal2(0),
 		_printComputerMsg(true), _shipNotWorking(false) {
 	_gameDataFile = "g0";
 
@@ -120,6 +121,7 @@ int OOToposGame::roomIsSpecial(unsigned room_index, unsigned *roomDescString) {
 }
 
 void OOToposGame::beforeTurn() {
+#if 0
 	Room *room = &_rooms[_currentRoom];
 
 	/*
@@ -141,16 +143,32 @@ void OOToposGame::beforeTurn() {
 		_wearingGoggles = _flags[OO_FLAG_WEARING_GOGGLES];
 		_updateFlags |= UPDATE_GRAPHICS | UPDATE_ROOM_DESC;
 	}
+#endif
+	if (!_flags[OO_FLAG_55] && !_flags[OO_FLAG_56]) {
+		YesNo nff = _flags[OO_FLAG_53] ? YES : NO;
+
+		if (_noFloodfill != nff) {
+			_noFloodfill = nff;
+			_updateFlags |= UPDATE_GRAPHICS | UPDATE_ROOM_DESC;
+
+			if (_noFloodfill == YES)
+				g_comprehend->_drawFlags |= IMAGEF_NO_FLOODFILL;
+			else
+				g_comprehend->_drawFlags &= ~IMAGEF_NO_FLOODFILL;
+		}
+	}
+
 
 	// Handle the computer console if in front of it
 	computerConsole();
 }
 
 bool OOToposGame::afterTurn() {
-	if (_flags[OO_FLAG_55])
+	if (_flags[OO_FLAG_55]) {
 		_currentRoom = 55;
-	else if (_flags[OO_FLAG_56])
+	} else if (_flags[OO_FLAG_56]) {
 		_currentRoom = 54;
+	}
 
 	return true;
 }
@@ -232,6 +250,14 @@ bool OOToposGame::handle_restart() {
 	return true;
 }
 
+void OOToposGame::synchronizeSave(Common::Serializer &s) {
+	ComprehendGameV2::synchronizeSave(s);
+
+	if (s.isLoading()) {
+		_noFloodfill = UNSET;
+	}
+}
+
 void OOToposGame::randomizeGuardLocation() {
 	Item *item = get_item(22);
 	if (_flags[OO_FLAG_13] && item->_room != _currentRoom) {
diff --git a/engines/glk/comprehend/game_oo.h b/engines/glk/comprehend/game_oo.h
index 3c9f606175..e3d389d925 100644
--- a/engines/glk/comprehend/game_oo.h
+++ b/engines/glk/comprehend/game_oo.h
@@ -30,10 +30,12 @@ namespace Comprehend {
 
 enum RestartMode { RESTART_IMMEDIATE, RESTART_WITH_MSG, RESTART_WITHOUT_MSG };
 
+enum YesNo { NO, YES, UNSET };
+
 class OOToposGame : public ComprehendGameV2 {
 private:
 	RestartMode _restartMode;
-	bool _wearingGoggles, _lightOn;
+	YesNo _noFloodfill, _lightOn;
 	int _stringVal1, _stringVal2;
 	bool _printComputerMsg, _shipNotWorking;
 
@@ -82,6 +84,7 @@ public:
 	int roomIsSpecial(unsigned room_index, unsigned *room_desc_string) override;
 	void handleSpecialOpcode(uint8 operand) override;
 	bool handle_restart() override;
+	void synchronizeSave(Common::Serializer &s) override;
 };
 
 } // namespace Comprehend
diff --git a/engines/glk/comprehend/pics.cpp b/engines/glk/comprehend/pics.cpp
index 11ee2aa8fd..894ea669c6 100644
--- a/engines/glk/comprehend/pics.cpp
+++ b/engines/glk/comprehend/pics.cpp
@@ -136,7 +136,8 @@ bool Pics::ImageFile::doImageOp(Pics::ImageContext *ctx) const {
 
 	case OPCODE_SET_PEN_COLOR:
 		debugC(kDebugGraphics, "set_pen_color(%.2x)", opcode);
-		ctx->_penColor = ctx->_drawSurface->getPenColor(param);
+		if (!(ctx->_drawFlags & IMAGEF_NO_FLOODFILL))
+			ctx->_penColor = ctx->_drawSurface->getPenColor(param);
 		break;
 
 	case OPCODE_TEXT_CHAR:
@@ -220,7 +221,8 @@ bool Pics::ImageFile::doImageOp(Pics::ImageContext *ctx) const {
 		debugC(kDebugGraphics, "draw_shape(%d, %d), style=%.2x, fill=%.2x",
 		       a, b, ctx->_shape, ctx->_fillColor);
 
-		ctx->_drawSurface->drawShape(a, b, ctx->_shape, ctx->_fillColor);
+		if (!(ctx->_drawFlags & IMAGEF_NO_FLOODFILL))
+			ctx->_drawSurface->drawShape(a, b, ctx->_shape, ctx->_fillColor);
 		break;
 
 	case OPCODE_DELAY:
diff --git a/engines/glk/comprehend/pics.h b/engines/glk/comprehend/pics.h
index 503296f115..90d3115d38 100644
--- a/engines/glk/comprehend/pics.h
+++ b/engines/glk/comprehend/pics.h
@@ -59,7 +59,7 @@ class Pics : public Common::Archive {
 		uint16 _textY;
 
 		ImageContext(DrawSurface *drawSurface, Graphics::Font *font, uint flags) :
-			_drawSurface(drawSurface), _font(font), _drawFlags(0),
+			_drawSurface(drawSurface), _font(font), _drawFlags(flags),
 			_x(0), _y(0), _penColor(G_COLOR_BLACK), _fillColor(G_COLOR_BLACK),
 			_shape(SHAPE_CIRCLE_LARGE), _textX(0), _textY(0) {
 		}


Commit: 640e81d62205426139beceeff2b538d7b0fb0149
    https://github.com/scummvm/scummvm/commit/640e81d62205426139beceeff2b538d7b0fb0149
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2020-11-07T18:50:33-08:00

Commit Message:
GLK: COMPREHEND: Rearrange order of beforeTurn/afterTurn

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


diff --git a/engines/glk/comprehend/game.cpp b/engines/glk/comprehend/game.cpp
index 0252a4daf8..b4e4136a7e 100644
--- a/engines/glk/comprehend/game.cpp
+++ b/engines/glk/comprehend/game.cpp
@@ -790,18 +790,15 @@ void ComprehendGame::parse_sentence_word_pairs(Sentence *sentence) {
 }
 
 void ComprehendGame::doBeforeTurn() {
-	// Run the game specific before turn bits
 	beforeTurn();
 
-	// Run the each turn functions
-	eval_function(0, nullptr);
-
 	if (!_ended)
 		update();
 }
 
-void ComprehendGame::doAfterTurn() {
-	afterTurn();
+void ComprehendGame::beforeTurn() {
+	// Run the each turn functions
+	eval_function(0, nullptr);
 }
 
 void ComprehendGame::read_input() {
@@ -846,7 +843,7 @@ void ComprehendGame::read_input() {
 
 		handled = handle_sentence(&_sentence);
 		if (handled)
-			doAfterTurn();
+			afterTurn();
 
 		/* FIXME - handle the 'before you can continue' case */
 		if (_inputLine[_inputLineIndex] == '\0')
diff --git a/engines/glk/comprehend/game.h b/engines/glk/comprehend/game.h
index a328277c97..0a1c7483f2 100644
--- a/engines/glk/comprehend/game.h
+++ b/engines/glk/comprehend/game.h
@@ -93,9 +93,8 @@ private:
 	bool handle_sentence(uint tableNum, Sentence *sentence, Common::Array<byte> &words);
 	void read_sentence(Sentence *sentence);
 	void parse_sentence_word_pairs(Sentence *sentence);
-	void doBeforeTurn();
-	void doAfterTurn();
 	void read_input();
+	void doBeforeTurn();
 
 protected:
 	void game_save();
@@ -139,10 +138,8 @@ public:
 
 	virtual void beforeGame() {}
 	virtual void beforePrompt() {}
-	virtual void beforeTurn() {}
-	virtual bool afterTurn() {
-		return false;
-	}
+	virtual void beforeTurn();
+	virtual void afterTurn() {}
 	virtual int roomIsSpecial(unsigned room_index, unsigned *room_desc_string) {
 		return ROOM_IS_NORMAL;
 	}
diff --git a/engines/glk/comprehend/game_cc.cpp b/engines/glk/comprehend/game_cc.cpp
index 0bcf7169c5..6eb5d8eeda 100644
--- a/engines/glk/comprehend/game_cc.cpp
+++ b/engines/glk/comprehend/game_cc.cpp
@@ -165,6 +165,8 @@ void CrimsonCrownGame::beforeTurn() {
 		loadGame();
 		move_to(_currentRoom);
 	}
+
+	ComprehendGameV1::beforeTurn();
 }
 
 bool CrimsonCrownGame::handle_restart() {
diff --git a/engines/glk/comprehend/game_oo.cpp b/engines/glk/comprehend/game_oo.cpp
index 4379ae5df5..d58aaa7e83 100644
--- a/engines/glk/comprehend/game_oo.cpp
+++ b/engines/glk/comprehend/game_oo.cpp
@@ -144,7 +144,13 @@ void OOToposGame::beforeTurn() {
 		_updateFlags |= UPDATE_GRAPHICS | UPDATE_ROOM_DESC;
 	}
 #endif
-	if (!_flags[OO_FLAG_55] && !_flags[OO_FLAG_56]) {
+	ComprehendGameV2::beforeTurn();
+
+	if (_flags[OO_FLAG_55]) {
+		_currentRoom = 55;
+	} else if (_flags[OO_FLAG_56]) {
+		_currentRoom = 54;
+	} else {
 		YesNo nff = _flags[OO_FLAG_53] ? YES : NO;
 
 		if (_noFloodfill != nff) {
@@ -158,19 +164,12 @@ void OOToposGame::beforeTurn() {
 		}
 	}
 
-
 	// Handle the computer console if in front of it
 	computerConsole();
 }
 
-bool OOToposGame::afterTurn() {
-	if (_flags[OO_FLAG_55]) {
-		_currentRoom = 55;
-	} else if (_flags[OO_FLAG_56]) {
-		_currentRoom = 54;
-	}
-
-	return true;
+void OOToposGame::afterTurn() {
+	ComprehendGameV2::afterTurn();
 }
 
 void OOToposGame::handleSpecialOpcode(uint8 operand) {
diff --git a/engines/glk/comprehend/game_oo.h b/engines/glk/comprehend/game_oo.h
index e3d389d925..0024ad9e06 100644
--- a/engines/glk/comprehend/game_oo.h
+++ b/engines/glk/comprehend/game_oo.h
@@ -80,7 +80,7 @@ public:
 
 	void beforeGame() override;
 	void beforeTurn() override;
-	bool afterTurn() override;
+	void afterTurn() override;
 	int roomIsSpecial(unsigned room_index, unsigned *room_desc_string) override;
 	void handleSpecialOpcode(uint8 operand) override;
 	bool handle_restart() override;
diff --git a/engines/glk/comprehend/game_tr.cpp b/engines/glk/comprehend/game_tr.cpp
index 117ec3700a..28dee3599d 100644
--- a/engines/glk/comprehend/game_tr.cpp
+++ b/engines/glk/comprehend/game_tr.cpp
@@ -145,26 +145,28 @@ int TransylvaniaGame::roomIsSpecial(unsigned room_index,
 }
 
 void TransylvaniaGame::beforeTurn() {
+	Room *room;
+
 	if (!isMonsterInRoom(&WEREWOLF) && !isMonsterInRoom(&VAMPIRE)) {
 		if (_currentRoom == ROOM_CLAY_HUT) {
 			Item *blackCat = get_item(ITEM_BLACK_CAT);
 			if (blackCat->_room == _currentRoom && getRandomNumber(255) >= 128)
 				console_println(_strings[109].c_str());
-			return;
+			goto done;
 
 		} else if (_currentRoom == ROOM_FIELD) {
 			Item *goblin = get_item(ITEM_GOBLIN);
 			if (goblin->_room == _currentRoom)
 				console_println(_strings[94 + getRandomNumber(3)].c_str());
-			return;
+			goto done;
 
 		}
 	}
 
 	if (updateMonster(&WEREWOLF) || updateMonster(&VAMPIRE))
-		return;
+		goto done;
 
-	Room *room = &_rooms[_currentRoom];
+	room = &_rooms[_currentRoom];
 	if ((room->_flags & ROOMFLAG_FOREST) && (_variables[VAR_TURN_COUNT] % 255) >= 4
 			&& getRandomNumber(255) < 40) {
 		int stringNum = _miceReleased ? 108 : 107;
@@ -184,6 +186,9 @@ void TransylvaniaGame::beforeTurn() {
 			get_item(ITEM_VAMPIRE)->_room = 0xff;
 		}
 	}
+
+done:
+	ComprehendGameV1::beforeTurn();
 }
 
 void TransylvaniaGame::synchronizeSave(Common::Serializer &s) {




More information about the Scummvm-git-logs mailing list