[Scummvm-cvs-logs] scummvm master -> ed461fba6512a289855f6f39f74163fe13bbcd87

bluegr bluegr at gmail.com
Thu Aug 25 21:09:04 CEST 2016


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

Summary:
429759b481 SCI32: Also handle chase.dat in Phantasmagoria like phantsg.dir
ed461fba65 SCI32: Add a workaround when starting a new game in Phantasmagoria


Commit: 429759b48183f384bdc02c653b2f837e6fb058f0
    https://github.com/scummvm/scummvm/commit/429759b48183f384bdc02c653b2f837e6fb058f0
Author: Filippos Karapetis (bluegr at gmail.com)
Date: 2016-08-25T21:56:22+03:00

Commit Message:
SCI32: Also handle chase.dat in Phantasmagoria like phantsg.dir

This file is used during the chase sequence, and needs the same
read/write logic as phantsg.dir

Changed paths:
    engines/sci/engine/file.cpp



diff --git a/engines/sci/engine/file.cpp b/engines/sci/engine/file.cpp
index 156f6f5..8cecd8c 100644
--- a/engines/sci/engine/file.cpp
+++ b/engines/sci/engine/file.cpp
@@ -200,7 +200,7 @@ reg_t file_open(EngineState *s, const Common::String &filename, int mode, bool u
 
 #ifdef ENABLE_SCI32
 	if (mode != _K_FILE_MODE_OPEN_OR_FAIL && (
-	    (g_sci->getGameId() == GID_PHANTASMAGORIA && filename == "phantsg.dir") ||
+	    (g_sci->getGameId() == GID_PHANTASMAGORIA && (filename == "phantsg.dir" || filename == "chase.dat")) ||
 	    (g_sci->getGameId() == GID_PQSWAT && filename == "swat.dat"))) {
 		debugC(kDebugLevelFile, "  -> file_open opening %s for rewriting", wrappedName.c_str());
 


Commit: ed461fba6512a289855f6f39f74163fe13bbcd87
    https://github.com/scummvm/scummvm/commit/ed461fba6512a289855f6f39f74163fe13bbcd87
Author: Filippos Karapetis (bluegr at gmail.com)
Date: 2016-08-25T21:56:23+03:00

Commit Message:
SCI32: Add a workaround when starting a new game in Phantasmagoria

This workaround is needed when starting a new game from a chapter after
the first one

Changed paths:
    engines/sci/engine/kernel_tables.h
    engines/sci/engine/workarounds.cpp
    engines/sci/engine/workarounds.h



diff --git a/engines/sci/engine/kernel_tables.h b/engines/sci/engine/kernel_tables.h
index 9f8c38b..9c0fb22 100644
--- a/engines/sci/engine/kernel_tables.h
+++ b/engines/sci/engine/kernel_tables.h
@@ -505,7 +505,7 @@ static const SciKernelMapSubEntry kString_subops[] = {
 	{ SIG_SCI32,           0, MAP_CALL(StringNew),                 "i(i)",                 NULL },
 	{ SIG_SCI32,           1, MAP_CALL(StringSize),                "[or]",                 NULL },
 	{ SIG_SCI32,           2, MAP_CALL(StringAt),                  "[or]i",                NULL },
-	{ SIG_SCI32,           3, MAP_CALL(StringPutAt),               "[or]i(i*)",            NULL },
+	{ SIG_SCI32,           3, MAP_CALL(StringPutAt),               "[or]i(i*)",            kStringPutAt_workarounds },
 	// StringFree accepts invalid references
 	{ SIG_SCI32,           4, MAP_CALL(StringFree),                "[or0!]",               NULL },
 	{ SIG_SCI32,           5, MAP_CALL(StringFill),                "[or]ii",               NULL },
diff --git a/engines/sci/engine/workarounds.cpp b/engines/sci/engine/workarounds.cpp
index 8e0a900..7aaea09 100644
--- a/engines/sci/engine/workarounds.cpp
+++ b/engines/sci/engine/workarounds.cpp
@@ -767,6 +767,11 @@ const SciWorkaroundEntry kUnLoad_workarounds[] = {
 };
 
 //    gameID,           room,script,lvl,          object-name, method-name,  local-call-signature, index,                workaround
+const SciWorkaroundEntry kStringPutAt_workarounds[] = {
+	{ GID_PHANTASMAGORIA,902, 64918, 0,                 "Str", "callKernel",                 NULL,     0, { WORKAROUND_IGNORE, 0 } }, // When starting a new game from after chapter 1, the game tries to save ego's object in a string
+};
+
+//    gameID,           room,script,lvl,          object-name, method-name,  local-call-signature, index,                workaround
 const SciWorkaroundEntry kScrollWindowAdd_workarounds[] = {
 	{ GID_PHANTASMAGORIA, 45, 64907,  0,   "ScrollableWindow", "addString",                  NULL,     0, { WORKAROUND_STILLCALL, 0 } }, // ScrollWindow interface passes the last two parameters twice
 };
diff --git a/engines/sci/engine/workarounds.h b/engines/sci/engine/workarounds.h
index f2b2e55..2cccd05 100644
--- a/engines/sci/engine/workarounds.h
+++ b/engines/sci/engine/workarounds.h
@@ -100,6 +100,7 @@ extern const SciWorkaroundEntry kStrAt_workarounds[];
 extern const SciWorkaroundEntry kStrCpy_workarounds[];
 extern const SciWorkaroundEntry kStrLen_workarounds[];
 extern const SciWorkaroundEntry kUnLoad_workarounds[];
+extern const SciWorkaroundEntry kStringPutAt_workarounds[];
 extern const SciWorkaroundEntry kScrollWindowAdd_workarounds[];
 
 extern SciWorkaroundSolution trackOriginAndFindWorkaround(int index, const SciWorkaroundEntry *workaroundList, SciTrackOriginReply *trackOrigin);






More information about the Scummvm-git-logs mailing list