[Scummvm-devel] Missing File::exists() on many ports, making SAGA games unplayable

Filippos K philipk79 at hotmail.com
Thu Jan 17 22:00:26 CET 2008

This is mostly aimed for porters

The way that fs-node checked for file existence (i.e File::exists() ) was done in a very weird and hackish way. David Corrales did very nice work on the beast that's the filesystem node, however a quite serious problem arose.

As it is now, File::exists() is a stub in most of the ports that ScummVM runs under. That means that it ALWAYS returns true in many ports, regardless if the file in question exists or not. This is quite a serious problem for the SAGA engine, as the games it supports have a lot of versions with different files, and File::exists() is used a lot to determine which files should be used. The fact that this function always returns true means that the engine is trying to load files that aren't there, so the games themselves can't work. I don't know where else File::exists is used, but it seems to be quite a problem to have a stub on a function like that.

The problem was first reported by Raziel in the AmigaOS port, and David has made exists() work under that platform with the help of Raziel. However, testing is needed and people with more knowledge on specific ports so that it can be determined if File::exists() works on every platform or not.

Currently, the platforms in which File::exists() is a stub, are:

This means that SAGA games Inherit the Earth and I have no Mouth and I must Scream won't work under those platforms at all. It seems noone has tested those games in these platforms after the fs-node changes, and people started complaining that they don't work right after ScummVM 0.11.0 has been released. I believe this is a very good reason to release a version 0.11.1, with this function implemented, so that those games can run under these platforms and avoid other potential problems in places where File::exists() is used.

File::exists is implemented in the fs node for each platform in file
xxx-fs.cpp (where xxx=platform name, e.g. amigaos4-fs.cpp) in the
corresponding folder inside /backends/fs (e.g. /backends/fs/amigaos4). Porters may check how David implemeted File::exists() for Amiga (or the other ports where it's working, e.g. win32, *nix and MacOS) and do something similar for their respective platform, or shed some light on how things are done and help David. He said he can post a rough patch on fs-node, and porters can clean that out for their respective platform, if it's needed.

Work on this would be greatly appreciated, so that SAGA games can run under these platforms :)

Filippos Karapetis

Connect and share in new ways with Windows Live.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.scummvm.org/pipermail/scummvm-devel/attachments/20080117/0e75d3f7/attachment.html>

More information about the Scummvm-devel mailing list