aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Gilbert2012-11-17 15:13:52 +1100
committerPaul Gilbert2012-11-17 15:13:52 +1100
commit848dcbcf0993f7bb15d16db4d65daaa0d4ffaf82 (patch)
tree29e3ebd8d5ccf6991aa323031a7a0a90d46739e5
parent60c46fe386ad5f927ceda75912af5bd8b5ed563c (diff)
downloadscummvm-rg350-848dcbcf0993f7bb15d16db4d65daaa0d4ffaf82.tar.gz
scummvm-rg350-848dcbcf0993f7bb15d16db4d65daaa0d4ffaf82.tar.bz2
scummvm-rg350-848dcbcf0993f7bb15d16db4d65daaa0d4ffaf82.zip
HOPKINS: Properly implemented CONSTRUIT_FICHIER for animations.
The game has separate folders for selected animations at different resolutions.
-rw-r--r--engines/hopkins/files.cpp41
-rw-r--r--engines/hopkins/files.h11
2 files changed, 44 insertions, 8 deletions
diff --git a/engines/hopkins/files.cpp b/engines/hopkins/files.cpp
index aafa56691f..daa618d7c2 100644
--- a/engines/hopkins/files.cpp
+++ b/engines/hopkins/files.cpp
@@ -134,16 +134,43 @@ int FileManager::CONSTRUIT_SYSTEM(const Common::String &file) {
return _vm->_globals.NFICHIER.size();
}
-// Build File
-void FileManager::CONSTRUIT_FICHIER(const Common::String &hop, const Common::String &file) {
- // At this point, the original program did a big switch statement to determine
- // whether to preprend the CD or installed directory path into REPJEU
+void FileManager::CONSTRUIT_FICHIER(const Common::String &folder, const Common::String &file) {
+ Common::String folderToUse = folder;
- if (hop[0] == 'A' && hop[1] == 'N' && hop[2] == 'N') {
- error("TODO: CONSTRUIT_FICHIER");
+ // A lot of the code in the original engine based on COPIE_SEQ was used to determine
+ // whether a file resided on the CD or hard disk. Since the ScummVM implementatoin
+ // requires all the files in the same location, we only need to do a somewhat simpler
+ // check for animations that don't exist in the ANM folder, but rather in special
+ // sub-folders depending on the physical screen resolution being used.
+
+ if (folder == "ANM") {
+ switch (_vm->_globals.SVGA) {
+ case 1:
+ if (TEST_REP(folderToUse, file))
+ folderToUse = "TSVGA";
+ break;
+ case 2:
+ if (TEST_REP(folderToUse, file))
+ folderToUse = "SVGA";
+ break;
+ case 3:
+ if (TEST_REP(folderToUse, file))
+ folderToUse = "VGA";
+ break;
+ default:
+ break;
+ }
}
- _vm->_globals.NFICHIER = Common::String::format("%s/%s", hop.c_str(), file.c_str());
+ _vm->_globals.NFICHIER = Common::String::format("%s/%s", folderToUse.c_str(), file.c_str());
+}
+
+bool FileManager::TEST_REP(const Common::String &folder, const Common::String &file) {
+ Common::String filename = folder.empty() ? file :
+ Common::String::format("%s/%s", folder.c_str(), file.c_str());
+
+ Common::File f;
+ return !f.exists(filename);
}
// Free File
diff --git a/engines/hopkins/files.h b/engines/hopkins/files.h
index d9df4341ca..e63e5370c8 100644
--- a/engines/hopkins/files.h
+++ b/engines/hopkins/files.h
@@ -33,6 +33,8 @@ namespace Hopkins {
class HopkinsEngine;
class FileManager {
+private:
+ bool TEST_REP(const Common::String &folder, const Common::String &file);
public:
HopkinsEngine *_vm;
public:
@@ -48,7 +50,14 @@ public:
int bload_it(Common::ReadStream &stream, void *buf, size_t nbytes);
void F_Censure();
int CONSTRUIT_SYSTEM(const Common::String &file);
- void CONSTRUIT_FICHIER(const Common::String &hop, const Common::String &file);
+
+ /**
+ * Construct a filename based on a suggested folder and filename.
+ * @param folder Folder to use. May be overriden for animations.
+ * @param file Filename
+ */
+ void CONSTRUIT_FICHIER(const Common::String &folder, const Common::String &file);
+
byte *LIBERE_FICHIER(byte *ptr);
byte *RECHERCHE_CAT(const Common::String &file, int a2);
Common::String CONSTRUIT_LINUX(const Common::String &file);