diff options
author | Paul Gilbert | 2015-06-12 20:01:27 -0400 |
---|---|---|
committer | Paul Gilbert | 2015-06-12 20:01:27 -0400 |
commit | 8ac4ab484c588ce37e551e94d691c83864f0fe02 (patch) | |
tree | b21e509333b0723e6783fb2d381f4f0bdd25ef68 /engines | |
parent | ed29691b2facecdfac934f90841f69e81c12e697 (diff) | |
download | scummvm-rg350-8ac4ab484c588ce37e551e94d691c83864f0fe02.tar.gz scummvm-rg350-8ac4ab484c588ce37e551e94d691c83864f0fe02.tar.bz2 scummvm-rg350-8ac4ab484c588ce37e551e94d691c83864f0fe02.zip |
SHERLOCK: Split up loadWalk into descendent classes
Diffstat (limited to 'engines')
-rw-r--r-- | engines/sherlock/people.cpp | 78 | ||||
-rw-r--r-- | engines/sherlock/people.h | 11 | ||||
-rw-r--r-- | engines/sherlock/scalpel/scalpel_people.cpp | 24 | ||||
-rw-r--r-- | engines/sherlock/scalpel/scalpel_people.h | 5 | ||||
-rw-r--r-- | engines/sherlock/tattoo/tattoo_people.cpp | 61 | ||||
-rw-r--r-- | engines/sherlock/tattoo/tattoo_people.h | 5 |
6 files changed, 101 insertions, 83 deletions
diff --git a/engines/sherlock/people.cpp b/engines/sherlock/people.cpp index de0e6ae116..2945d37a25 100644 --- a/engines/sherlock/people.cpp +++ b/engines/sherlock/people.cpp @@ -254,84 +254,6 @@ void People::reset() { } } -bool People::loadWalk() { - Resources &res = *_vm->_res; - bool result = false; - - if (IS_SERRATED_SCALPEL) { - if (_data[PLAYER]->_walkLoaded) { - return false; - } else { - if (_vm->getPlatform() != Common::kPlatform3DO) { - _data[PLAYER]->_images = new ImageFile("walk.vgs"); - } else { - // Load walk.anim on 3DO, which is a cel animation file - _data[PLAYER]->_images = new ImageFile3DO("walk.anim", kImageFile3DOType_CelAnimation); - } - _data[PLAYER]->setImageFrame(); - _data[PLAYER]->_walkLoaded = true; - - result = true; - } - } else { - for (int idx = 0; idx < MAX_CHARACTERS; ++idx) { - if (!_data[idx]->_walkLoaded && (_data[idx]->_type == CHARACTER || _data[idx]->_type == HIDDEN_CHARACTER)) { - if (_data[idx]->_type == HIDDEN_CHARACTER) - _data[idx]->_type = INVALID; - - // See if this is one of the more used Walk Graphics stored in WALK.LIB - for (int libNum = 0; libNum < NUM_IN_WALK_LIB; ++libNum) { - if (!_data[idx]->_walkVGSName.compareToIgnoreCase(WALK_LIB_NAMES[libNum])) { - _useWalkLib = true; - break; - } - } - - // Load the images for the character - _data[idx]->_images = new ImageFile(_data[idx]->_walkVGSName, false); - _data[idx]->_numFrames = _data[idx]->_images->size(); - - // Load walk sequence data - Common::String fname = Common::String(_data[idx]->_walkVGSName.c_str(), strchr(_data[idx]->_walkVGSName.c_str(), '.')); - fname += ".SEQ"; - - // Load the walk sequence data - Common::SeekableReadStream *stream = res.load(fname, _useWalkLib ? "walk.lib" : "vgs.lib"); - - _data[idx]->_walkSequences.resize(stream->readByte()); - - for (uint seqNum = 0; seqNum < _data[idx]->_walkSequences.size(); ++seqNum) - _data[idx]->_walkSequences[seqNum].load(*stream); - - // Close the sequences resource - delete stream; - _useWalkLib = false; - - _data[idx]->_frameNumber = 0; - _data[idx]->setImageFrame(); - - // Set the stop Frames pointers - for (int dirNum = 0; dirNum < 8; ++dirNum) { - int count = 0; - while (_data[idx]->_walkSequences[dirNum + 8][count] != 0) - ++count; - count += 2; - count = _data[idx]->_walkSequences[dirNum + 8][count] - 1; - _data[idx]->_stopFrames[dirNum] = &(*_data[idx]->_images)[count]; - } - - result = true; - _data[idx]->_walkLoaded = true; - } else if (_data[idx]->_type != CHARACTER) { - _data[idx]->_walkLoaded = false; - } - } - } - - _forceWalkReload = false; - return result; -} - bool People::freeWalk() { bool result = false; diff --git a/engines/sherlock/people.h b/engines/sherlock/people.h index 27b7dc41cf..d9cb8de393 100644 --- a/engines/sherlock/people.h +++ b/engines/sherlock/people.h @@ -118,11 +118,6 @@ public: void reset(); /** - * Load the walking images for Sherlock - */ - bool loadWalk(); - - /** * If the walk data has been loaded, then it will be freed */ bool freeWalk(); @@ -151,6 +146,12 @@ public: * Change the sequence of the scene background object associated with the current speaker. */ virtual void setTalkSequence(int speaker, int sequenceNum = 1) = 0; + + /** + * Load the walking images for Sherlock + */ + virtual bool loadWalk() = 0; + }; } // End of namespace Sherlock diff --git a/engines/sherlock/scalpel/scalpel_people.cpp b/engines/sherlock/scalpel/scalpel_people.cpp index e3cd1e5a6c..b2aa4dcbb1 100644 --- a/engines/sherlock/scalpel/scalpel_people.cpp +++ b/engines/sherlock/scalpel/scalpel_people.cpp @@ -442,6 +442,30 @@ void ScalpelPeople::setTalkSequence(int speaker, int sequenceNum) { } } + +bool ScalpelPeople::loadWalk() { + Resources &res = *_vm->_res; + bool result = false; + + if (_data[PLAYER]->_walkLoaded) { + return false; + } else { + if (_vm->getPlatform() != Common::kPlatform3DO) { + _data[PLAYER]->_images = new ImageFile("walk.vgs"); + } else { + // Load walk.anim on 3DO, which is a cel animation file + _data[PLAYER]->_images = new ImageFile3DO("walk.anim", kImageFile3DOType_CelAnimation); + } + _data[PLAYER]->setImageFrame(); + _data[PLAYER]->_walkLoaded = true; + + result = true; + } + + _forceWalkReload = false; + return result; +} + } // End of namespace Scalpel } // End of namespace Sherlock diff --git a/engines/sherlock/scalpel/scalpel_people.h b/engines/sherlock/scalpel/scalpel_people.h index eec6eeb3a3..9d1214bc68 100644 --- a/engines/sherlock/scalpel/scalpel_people.h +++ b/engines/sherlock/scalpel/scalpel_people.h @@ -85,6 +85,11 @@ public: * Change the sequence of the scene background object associated with the specified speaker. */ virtual void setTalkSequence(int speaker, int sequenceNum = 1); + + /** + * Load the walking images for Sherlock + */ + virtual bool loadWalk(); }; } // End of namespace Scalpel diff --git a/engines/sherlock/tattoo/tattoo_people.cpp b/engines/sherlock/tattoo/tattoo_people.cpp index bea105fee0..f70b079760 100644 --- a/engines/sherlock/tattoo/tattoo_people.cpp +++ b/engines/sherlock/tattoo/tattoo_people.cpp @@ -486,6 +486,67 @@ void TattooPeople::synchronize(Serializer &s) { } } +bool TattooPeople::loadWalk() { + Resources &res = *_vm->_res; + bool result = false; + + for (int idx = 0; idx < MAX_CHARACTERS; ++idx) { + if (!_data[idx]->_walkLoaded && (_data[idx]->_type == CHARACTER || _data[idx]->_type == HIDDEN_CHARACTER)) { + if (_data[idx]->_type == HIDDEN_CHARACTER) + _data[idx]->_type = INVALID; + + // See if this is one of the more used Walk Graphics stored in WALK.LIB + for (int libNum = 0; libNum < NUM_IN_WALK_LIB; ++libNum) { + if (!_data[idx]->_walkVGSName.compareToIgnoreCase(WALK_LIB_NAMES[libNum])) { + _useWalkLib = true; + break; + } + } + + // Load the images for the character + _data[idx]->_images = new ImageFile(_data[idx]->_walkVGSName, false); + _data[idx]->_numFrames = _data[idx]->_images->size(); + + // Load walk sequence data + Common::String fname = Common::String(_data[idx]->_walkVGSName.c_str(), strchr(_data[idx]->_walkVGSName.c_str(), '.')); + fname += ".SEQ"; + + // Load the walk sequence data + Common::SeekableReadStream *stream = res.load(fname, _useWalkLib ? "walk.lib" : "vgs.lib"); + + _data[idx]->_walkSequences.resize(stream->readByte()); + + for (uint seqNum = 0; seqNum < _data[idx]->_walkSequences.size(); ++seqNum) + _data[idx]->_walkSequences[seqNum].load(*stream); + + // Close the sequences resource + delete stream; + _useWalkLib = false; + + _data[idx]->_frameNumber = 0; + _data[idx]->setImageFrame(); + + // Set the stop Frames pointers + for (int dirNum = 0; dirNum < 8; ++dirNum) { + int count = 0; + while (_data[idx]->_walkSequences[dirNum + 8][count] != 0) + ++count; + count += 2; + count = _data[idx]->_walkSequences[dirNum + 8][count] - 1; + _data[idx]->_stopFrames[dirNum] = &(*_data[idx]->_images)[count]; + } + + result = true; + _data[idx]->_walkLoaded = true; + } else if (_data[idx]->_type != CHARACTER) { + _data[idx]->_walkLoaded = false; + } + } + + _forceWalkReload = false; + return result; +} + } // End of namespace Tattoo } // End of namespace Sherlock diff --git a/engines/sherlock/tattoo/tattoo_people.h b/engines/sherlock/tattoo/tattoo_people.h index 83821fa6ca..110063dd15 100644 --- a/engines/sherlock/tattoo/tattoo_people.h +++ b/engines/sherlock/tattoo/tattoo_people.h @@ -153,6 +153,11 @@ public: * Change the sequence of the scene background object associated with the specified speaker. */ virtual void setTalkSequence(int speaker, int sequenceNum = 1); + + /** + * Load the walking images for Sherlock + */ + virtual bool loadWalk(); }; } // End of namespace Scalpel |