diff options
Diffstat (limited to 'engines')
-rw-r--r-- | engines/tinsel/play.cpp | 10 | ||||
-rw-r--r-- | engines/tinsel/tinlib.cpp | 6 |
2 files changed, 16 insertions, 0 deletions
diff --git a/engines/tinsel/play.cpp b/engines/tinsel/play.cpp index 90709f6d31..f87ed9c334 100644 --- a/engines/tinsel/play.cpp +++ b/engines/tinsel/play.cpp @@ -978,6 +978,16 @@ void PlayFilm(CORO_PARAM, SCNHANDLE hFilm, int x, int y, int actorid, bool splay CORO_BEGIN_CODE(_ctx); + // FIXME: (PSX_THIEF_BUG) this fixes a (script?) bug in Discworld PSX: + // If the player follows immediately the thief that steals the evocation book + // from the "past" unseen university, the stack seems to get loaded with wrong + // values and the game crashes when going into past-ankh map, if instead the + // player interacts with other objects or goes back to L-space, the past-ankh + // map works perfectly. + // This is just a workaround. + if (TinselV1PSX && hFilm == 4 && actorid == 77) + return; + pFilm = (const FILM *)LockMem(hFilm); PPINIT ppi; diff --git a/engines/tinsel/tinlib.cpp b/engines/tinsel/tinlib.cpp index 54d678c198..3f65bc6d41 100644 --- a/engines/tinsel/tinlib.cpp +++ b/engines/tinsel/tinlib.cpp @@ -3833,6 +3833,12 @@ void Walk(CORO_PARAM, int actor, int x, int y, SCNHANDLE hFilm, int hold, bool i bool bQuick = hold != 0; PMOVER pMover = GetMover(actor); + + // FIXME: This is part of the workaround for PSX_THIEF_BUG, + // See the other code and description in PlayFilm() (play.cpp) + if (TinselV1PSX && actor == 77 && hFilm == 0) + return; + assert(pMover); // Can't walk a non-moving actor CORO_BEGIN_CODE(_ctx); |