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

Strangerke noreply at scummvm.org
Thu Apr 2 07:27:52 UTC 2026


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

Summary:
371820457c WAYNESWORLD: Add German detection provided in ticker #16627
dc176b4426 WAYNESWORLD: Fix Restart (original bug in the way savegames are handled), fix Cassandra standing in her loft


Commit: 371820457c8627f8ac3d1569d821e2001ac34b27
    https://github.com/scummvm/scummvm/commit/371820457c8627f8ac3d1569d821e2001ac34b27
Author: Strangerke (arnaud.boutonne at gmail.com)
Date: 2026-04-02T09:26:57+02:00

Commit Message:
WAYNESWORLD: Add German detection provided in ticker #16627

Changed paths:
    engines/waynesworld/detection_tables.h


diff --git a/engines/waynesworld/detection_tables.h b/engines/waynesworld/detection_tables.h
index f249e14d611..fbd2bb85093 100644
--- a/engines/waynesworld/detection_tables.h
+++ b/engines/waynesworld/detection_tables.h
@@ -33,6 +33,18 @@ static const ADGameDescription gameDescriptions[] = {
 		GUIO1(GUIO_NOASPECT)
 	},
 
+	// Provided by gabberhead, ticket #16627
+	{
+		"waynesworld",
+		 "",
+		 AD_ENTRY2s("R00.GXL", "197ae9fb74a79a6dad4e3336f94c7545", 36272,
+					"e00.txt", "b5042542d0df2fcd8c8e617ee0900ce8", 1447),
+		 Common::DE_DEU,
+		 Common::kPlatformDOS,
+		 ADGF_UNSTABLE,
+		 GUIO1(GUIO_NOASPECT)
+	},
+
 	{
 		"waynesworld",
 		"Demo",
@@ -54,7 +66,8 @@ static const ADGameDescription gameDescriptions[] = {
 		ADGF_UNSTABLE,
 		GUIO1(GUIO_NOASPECT)
 	},
-	
-	AD_TABLE_END_MARKER};
+
+	AD_TABLE_END_MARKER
+};
 
 } // End of namespace WaynesWorld


Commit: dc176b4426d1e951dff1f4ce4fb40e7d256eabe5
    https://github.com/scummvm/scummvm/commit/dc176b4426d1e951dff1f4ce4fb40e7d256eabe5
Author: Strangerke (arnaud.boutonne at gmail.com)
Date: 2026-04-02T09:26:58+02:00

Commit Message:
WAYNESWORLD: Fix Restart (original bug in the way savegames are handled), fix Cassandra standing in her loft

Changed paths:
    engines/waynesworld/gamelogic.cpp


diff --git a/engines/waynesworld/gamelogic.cpp b/engines/waynesworld/gamelogic.cpp
index bd9f71cf302..fcee379e93e 100644
--- a/engines/waynesworld/gamelogic.cpp
+++ b/engines/waynesworld/gamelogic.cpp
@@ -2940,7 +2940,6 @@ void GameLogic::r5_handleCassandra(const char *filename, int startFrame, int max
 	const int deltaY = abs(targetY - startY);
 
 	int velX, velY;
-
 	if (deltaX == 0) {
 		velX = 0;
 		velY = totalSpeed * stepY;
@@ -2955,7 +2954,11 @@ void GameLogic::r5_handleCassandra(const char *filename, int startFrame, int max
 		velX = ((totalSpeed * deltaX) / deltaY) * stepX;
 	}
 
-	const int stepNumb = abs(deltaX / velX);
+	if (velX == 0 && velY == 0)
+		error("Unexpected lack of velocity");
+
+	const int stepNumb = (velX == 0) ? abs(deltaY / velY) : abs(deltaX / velX);
+
 	WWSurface *workBackground = new WWSurface(320, 150);
 	workBackground->drawSurface(_vm->_backgroundSurface, 0, 0);
 	// sysMouseDriver(2)
@@ -2964,16 +2967,18 @@ void GameLogic::r5_handleCassandra(const char *filename, int startFrame, int max
 	int curY = startY;
 
 	// The original has a lot of scaling code and a bunch of code to handle how to position Garth and Wayne as if Cassandra was walking by them
-	// As she stop before them, and as the scaling computed was 1:1, the code has been significantly simplified
+	// As she stops before them, and as the scaling computed was 1:1, the code has been significantly simplified
 	
 	WWSurface *cassSurface = new WWSurface(width, height);
-	for (int i = 0; i < stepNumb; ++i) {
+	for (int i = 0; i <= stepNumb; ++i) {
 		updateRoomAnimations();
-		if (i > 0) {
+		if (curX - velX >= 0) {
+			// Restore previous surface
 			_vm->_backgroundSurface->copyRectToSurface((Graphics::Surface)*workBackground, curX - velX, curY - velY - height, Common::Rect(curX - velX, curY - velY - height, curX - velX + width, curY - velY));
 		}
 		const int key = (i % maxFrame) + startFrame;
 		Common::String curFile = Common::String::format("%s%d.pcx", filename, key);
+		// Draw new sprite
 		_vm->drawImageToSurface(_vm->_roomGxl, curFile.c_str(), cassSurface, 0, 0);
 
 		_vm->_backgroundSurface->drawSurfaceTransparent(cassSurface, curX, curY - height);
@@ -2984,15 +2989,17 @@ void GameLogic::r5_handleCassandra(const char *filename, int startFrame, int max
 		// Add delay for better visual result
 		_vm->waitMillis(45);
 	}
-	
+
+	if (refreshBackground) {
+		_vm->drawRoomImageToBackground("backg.pcx", 0, 0);
+		r5_refreshRoomBackground();
+	}
+
+
 	delete cassSurface;
 	delete workBackground;
 
 	// sysMouseDriver(1);
-	// if (refreshBackground) {
-	//		_vm->drawRoomImageToBackground("backg.pcx", 0, 0);
-	//		r5_refreshRoomBackground();
-	// }
 }
 
 void GameLogic::r5_handleRoomEvent() {
@@ -8893,7 +8900,8 @@ void GameLogic::synchronize(Common::Serializer &s) {
 	s.syncAsSint16LE(_r24_mazeRoomNumber);
 	s.syncAsSint16LE(_r24_mazeHoleNumber);
 	byte byte_306C8 = 0;
-	s.syncAsByte(byte_306C8); // set but not used in pizzathon
+	// In the original, this byte is set but not used in setPizzathonStatus() to count the number of items found
+	s.syncAsByte(byte_306C8);
 
 	for (int i = 0; i < 5; ++i)
 		s.syncAsSint16LE(_vm->_dialogChoices[i]);
@@ -8904,9 +8912,12 @@ void GameLogic::synchronize(Common::Serializer &s) {
 		s.syncAsSint16LE(_vm->_garthInventory[i]);
 	}
 
-	for (int i = 0; i < 404; ++i)
-		s.syncAsSint16LE(_vm->_roomObjects[i].roomNumber);
-
+	byte dummy = 0;
+	for (int i = 0; i < 404; ++i) {
+		s.syncAsByte(_vm->_roomObjects[i].roomNumber);
+		// For some mysterious reason, the original reads the first letter of the object name as well and overwrite it... 404 bytes wasted per savegame :/
+		s.syncAsByte(dummy);
+	}
 	s.syncAsByte(_pizzathonListFlags1);
 	s.syncAsByte(_pizzathonListFlags2);
 	s.syncAsByte(_r31_flags);
@@ -8938,7 +8949,6 @@ void GameLogic::synchronize(Common::Serializer &s) {
 }
 
 bool GameLogic::saveSavegame(int slot, const Common::String *desc) {
-	// TODO: we could put the extra ScummVM info after the 1135 bytes of a standard savegame or modify loadSavegame to skip it when it's not a RST file
 	Common::OutSaveFile *saveFile = g_system->getSavefileManager()->openForSaving(Common::String::format("ww%02d.sav", slot), true);
 
 	if (saveFile == nullptr) {




More information about the Scummvm-git-logs mailing list