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

sdelamarre noreply at scummvm.org
Sun May 18 21:13:33 UTC 2025


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

Summary:
bf05db4894 GOB: Fix a crash when processing some invalid VMD frames (Adibou2/Sciences)
4c34b0adfa GOB: Add support for Italian translations in Adibou games
a0ff1b7fcf GOB: Ensure the 3D driving activity is disabled in Adibou2/Sciences


Commit: bf05db4894b9379cea8703b7a7f0d3c8ed14411f
    https://github.com/scummvm/scummvm/commit/bf05db4894b9379cea8703b7a7f0d3c8ed14411f
Author: Simon Delamarre (simon.delamarre14 at gmail.com)
Date: 2025-05-18T23:13:09+02:00

Commit Message:
GOB: Fix a crash when processing some invalid VMD frames (Adibou2/Sciences)

Some VMDs sometimes include a frame with negative coordinates, which is
just ignored by the decoder. We must ignore it too outside the decoder
when cross-blitting a frame from a paletted video to a high color surface.

Changed paths:
    engines/gob/videoplayer.cpp


diff --git a/engines/gob/videoplayer.cpp b/engines/gob/videoplayer.cpp
index 5acdad98ff4..757a24bc94e 100644
--- a/engines/gob/videoplayer.cpp
+++ b/engines/gob/videoplayer.cpp
@@ -683,12 +683,14 @@ bool VideoPlayer::playFrame(int slot, Properties &properties) {
 		int16 y = 0;
 		int16 width = 0;
 		int16 height = 0;
-		video->decoder->getFrameCoords(video->decoder->getCurFrame(), x, y, width, height);
-		Graphics::crossBlitMap(video->surface->getData(x, y), static_cast<const byte *>(surface->getBasePtr(x, y)),
-							   video->surface->getWidth() * video->surface->getBPP(),
-							   surface->pitch,
-							   width, height,
-							   video->surface->getBPP(), video->highColorMap);
+		if (video->decoder->getFrameCoords(video->decoder->getCurFrame(), x, y, width, height)
+				&& x >= 0 && y >= 0 && width > 0 && height > 0) {
+			Graphics::crossBlitMap(video->surface->getData(x, y), static_cast<const byte *>(surface->getBasePtr(x, y)),
+								   video->surface->getWidth() * video->surface->getBPP(),
+								   surface->pitch,
+								   width, height,
+								   video->surface->getBPP(), video->highColorMap);
+		}
 	}
 
 	if (_vm->getGameType() != kGameTypeAdibou2)


Commit: 4c34b0adfa11870c7c2b744eaf6e9dda42d7a93e
    https://github.com/scummvm/scummvm/commit/4c34b0adfa11870c7c2b744eaf6e9dda42d7a93e
Author: Simon Delamarre (simon.delamarre14 at gmail.com)
Date: 2025-05-18T23:13:09+02:00

Commit Message:
GOB: Add support for Italian translations in Adibou games

Changed paths:
    engines/gob/databases.cpp


diff --git a/engines/gob/databases.cpp b/engines/gob/databases.cpp
index ffea1380611..13c78b3ed27 100644
--- a/engines/gob/databases.cpp
+++ b/engines/gob/databases.cpp
@@ -51,6 +51,8 @@ void TranslationDatabases::setLanguage(Common::Language language) {
 		lang = "E";
 	else if (language == Common::DE_DEU)
 		lang = "G";
+	else if (language == Common::IT_ITA)
+		lang = "G";
 	else if (language == Common::FR_FRA)
 		lang = "F";
 	else


Commit: a0ff1b7fcf90a42a91a4b7554b2e277a77409a05
    https://github.com/scummvm/scummvm/commit/a0ff1b7fcf90a42a91a4b7554b2e277a77409a05
Author: Simon Delamarre (simon.delamarre14 at gmail.com)
Date: 2025-05-18T23:13:09+02:00

Commit Message:
GOB: Ensure the 3D driving activity is disabled in Adibou2/Sciences

This 3D minigame is a separate executable in the original, and is not based
on Gob, thus not supported by ScummVM.

Changed paths:
    engines/gob/inter_v7.cpp


diff --git a/engines/gob/inter_v7.cpp b/engines/gob/inter_v7.cpp
index 1f82d4b7469..793555bb490 100644
--- a/engines/gob/inter_v7.cpp
+++ b/engines/gob/inter_v7.cpp
@@ -1739,9 +1739,7 @@ void Inter_v7::o7_getFreeMem(OpFuncParams &params) {
 void Inter_v7::o7_checkData(OpFuncParams &params) {
 	Common::String file = getFile(_vm->_game->_script->evalString());
 
-	if (_vm->getGameType() == kGameTypeAdibou2
-		&&
-		file == "CD.INF") {
+	if (_vm->getGameType() == kGameTypeAdibou2 && file == "CD.INF") {
 		// WORKAROUND: some versions of Adibou2 are only able to handle one CD at a time.
 		// In such versions, scripts always begin to look for CD.INF file in the CD, and check
 		// if its contents matches the selected application. We insert a hack here, to set
@@ -1784,7 +1782,10 @@ void Inter_v7::o7_checkData(OpFuncParams &params) {
 	int32 size   = -1;
 	int16 handle = 1;
 	SaveLoad::SaveMode mode = _vm->_saveLoad->getSaveMode(file.c_str());
-	if (mode == SaveLoad::kSaveModeNone) {
+	if (_vm->getGameType() == kGameTypeAdibou2 && file.compareToIgnoreCase("CARON.BOU") == 0) {
+		// WORKAROUND to disable the 3D driving activity in Adibou2/Sciences (not supported in ScummVM)
+		size = -1;
+	} else if (mode == SaveLoad::kSaveModeNone) {
 		size = _vm->_dataIO->fileSize(file);
 		if (size == -1)
 			warning("File \"%s\" not found", file.c_str());
@@ -1801,9 +1802,7 @@ void Inter_v7::o7_checkData(OpFuncParams &params) {
 		   file.c_str(), size);
 
 	WRITE_VAR_OFFSET(varOff, handle);
-	if (_vm->getGameType() == kGameTypeAdibou2
-		&&
-		_vm->isCurrentTot("BE_CD.TOT")) {
+	if (_vm->getGameType() == kGameTypeAdibou2 && _vm->isCurrentTot("BE_CD.TOT")) {
 		// WORKAROUND: in script BE_CD.TOT of Adibou 2, o7_checkData() can be called in the "leave" callback of a hotspot.
 		// This corrupts the "current hotspot" variable, which is also VAR(16) (!), and lead to an infinite loop.
 		// We skip writing the file size into VAR(16) here as a workarond (the value is not used anyway).




More information about the Scummvm-git-logs mailing list