diff options
Diffstat (limited to 'engines/wintermute/base/base_sprite.cpp')
-rw-r--r-- | engines/wintermute/base/base_sprite.cpp | 99 |
1 files changed, 54 insertions, 45 deletions
diff --git a/engines/wintermute/base/base_sprite.cpp b/engines/wintermute/base/base_sprite.cpp index c920da9ee9..09e138a1fd 100644 --- a/engines/wintermute/base/base_sprite.cpp +++ b/engines/wintermute/base/base_sprite.cpp @@ -8,12 +8,12 @@ * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. - + * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. - + * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. @@ -41,6 +41,7 @@ #include "engines/wintermute/base/scriptables/script_value.h" #include "engines/wintermute/base/scriptables/script.h" #include "engines/wintermute/base/scriptables/script_stack.h" +#include "engines/wintermute/game_description.h" namespace Wintermute { @@ -168,7 +169,7 @@ bool BaseSprite::loadFile(const Common::String &filename, int lifeTime, TSpriteC ret = STATUS_OK; } } else { - byte *buffer = BaseFileManager::getEngineInstance()->readWholeFile(filename); + char *buffer = (char *)BaseFileManager::getEngineInstance()->readWholeFile(filename); if (buffer) { if (DID_FAIL(ret = loadBuffer(buffer, true, lifeTime, cacheType))) { BaseEngine::LOG(0, "Error parsing SPRITE file '%s'", filename.c_str()); @@ -204,7 +205,7 @@ TOKEN_DEF(EDITOR_BG_ALPHA) TOKEN_DEF(EDITOR_PROPERTY) TOKEN_DEF_END ////////////////////////////////////////////////////////////////////// -bool BaseSprite::loadBuffer(byte *buffer, bool complete, int lifeTime, TSpriteCacheType cacheType) { +bool BaseSprite::loadBuffer(char *buffer, bool complete, int lifeTime, TSpriteCacheType cacheType) { TOKEN_TABLE_START(commands) TOKEN_TABLE(CONTINUOUS) TOKEN_TABLE(SPRITE) @@ -223,7 +224,7 @@ bool BaseSprite::loadBuffer(byte *buffer, bool complete, int lifeTime, TSpriteCa TOKEN_TABLE(EDITOR_PROPERTY) TOKEN_TABLE_END - byte *params; + char *params; int cmd; BaseParser parser; @@ -231,7 +232,7 @@ bool BaseSprite::loadBuffer(byte *buffer, bool complete, int lifeTime, TSpriteCa if (complete) { - if (parser.getCommand((char **)&buffer, commands, (char **)¶ms) != TOKEN_SPRITE) { + if (parser.getCommand(&buffer, commands, ¶ms) != TOKEN_SPRITE) { BaseEngine::LOG(0, "'SPRITE' keyword expected."); return STATUS_FAILED; } @@ -240,30 +241,30 @@ bool BaseSprite::loadBuffer(byte *buffer, bool complete, int lifeTime, TSpriteCa int frameCount = 1; BaseFrame *frame; - while ((cmd = parser.getCommand((char **)&buffer, commands, (char **)¶ms)) > 0) { + while ((cmd = parser.getCommand(&buffer, commands, ¶ms)) > 0) { switch (cmd) { case TOKEN_CONTINUOUS: - parser.scanStr((char *)params, "%b", &_continuous); + parser.scanStr(params, "%b", &_continuous); break; case TOKEN_EDITOR_MUTED: - parser.scanStr((char *)params, "%b", &_editorMuted); + parser.scanStr(params, "%b", &_editorMuted); break; case TOKEN_SCRIPT: - addScript((char *)params); + addScript(params); break; case TOKEN_LOOPING: - parser.scanStr((char *)params, "%b", &_looping); + parser.scanStr(params, "%b", &_looping); break; case TOKEN_PRECISE: - parser.scanStr((char *)params, "%b", &_precise); + parser.scanStr(params, "%b", &_precise); break; case TOKEN_STREAMED: - parser.scanStr((char *)params, "%b", &_streamed); + parser.scanStr(params, "%b", &_streamed); if (_streamed && lifeTime == -1) { lifeTime = 500; cacheType = CACHE_ALL; @@ -271,33 +272,33 @@ bool BaseSprite::loadBuffer(byte *buffer, bool complete, int lifeTime, TSpriteCa break; case TOKEN_STREAMED_KEEP_LOADED: - parser.scanStr((char *)params, "%b", &_streamedKeepLoaded); + parser.scanStr(params, "%b", &_streamedKeepLoaded); break; case TOKEN_NAME: - setName((char *)params); + setName(params); break; case TOKEN_EDITOR_BG_FILE: if (_gameRef->_editorMode) { delete[] _editorBgFile; - _editorBgFile = new char[strlen((char *)params) + 1]; + _editorBgFile = new char[strlen(params) + 1]; if (_editorBgFile) { - strcpy(_editorBgFile, (char *)params); + strcpy(_editorBgFile, params); } } break; case TOKEN_EDITOR_BG_OFFSET_X: - parser.scanStr((char *)params, "%d", &_editorBgOffsetX); + parser.scanStr(params, "%d", &_editorBgOffsetX); break; case TOKEN_EDITOR_BG_OFFSET_Y: - parser.scanStr((char *)params, "%d", &_editorBgOffsetY); + parser.scanStr(params, "%d", &_editorBgOffsetY); break; case TOKEN_EDITOR_BG_ALPHA: - parser.scanStr((char *)params, "%d", &_editorBgAlpha); + parser.scanStr(params, "%d", &_editorBgAlpha); _editorBgAlpha = MIN<int32>(_editorBgAlpha, 255); _editorBgAlpha = MAX<int32>(_editorBgAlpha, 0); break; @@ -347,9 +348,17 @@ void BaseSprite::reset() { } else { _currentFrame = -1; } - - killAllSounds(); - + if (BaseEngine::instance().getTargetExecutable() >= WME_1_8_6) { + /* + * This was added in WME 1.8.6 + * + * 5MA and possibly other games ship with pre-1.8.6 WME, and + * depends (e.g.: menu sounds, etc) on this not being triggered. + * + * See bug #6647 + */ + killAllSounds(); + } _lastFrameTime = 0; _finished = false; _moveX = _moveY = 0; @@ -418,7 +427,7 @@ bool BaseSprite::getCurrentFrame(float zoomX, float zoomY) { ////////////////////////////////////////////////////////////////////// -bool BaseSprite::display(int x, int y, BaseObject *registerVal, float zoomX, float zoomY, uint32 alpha, float rotate, TSpriteBlendMode blendMode) { +bool BaseSprite::display(int x, int y, BaseObject *registerVal, float zoomX, float zoomY, uint32 alpha, float rotate, Graphics::TSpriteBlendMode blendMode) { if (_currentFrame < 0 || _currentFrame >= (int32)_frames.size()) { return STATUS_OK; } @@ -462,7 +471,7 @@ bool BaseSprite::getBoundingRect(Rect32 *rect, int x, int y, float scaleX, float return false; } - BasePlatform::setRectEmpty(rect); + rect->setEmpty(); for (uint32 i = 0; i < _frames.size(); i++) { Rect32 frame; Rect32 temp; @@ -520,29 +529,29 @@ bool BaseSprite::saveAsText(BaseDynamicBuffer *buffer, int indent) { bool BaseSprite::persist(BasePersistenceManager *persistMgr) { BaseScriptHolder::persist(persistMgr); - persistMgr->transfer(TMEMBER(_canBreak)); - persistMgr->transfer(TMEMBER(_changed)); - persistMgr->transfer(TMEMBER(_paused)); - persistMgr->transfer(TMEMBER(_continuous)); - persistMgr->transfer(TMEMBER(_currentFrame)); - persistMgr->transfer(TMEMBER(_editorAllFrames)); - persistMgr->transfer(TMEMBER(_editorBgAlpha)); - persistMgr->transfer(TMEMBER(_editorBgFile)); - persistMgr->transfer(TMEMBER(_editorBgOffsetX)); - persistMgr->transfer(TMEMBER(_editorBgOffsetY)); - persistMgr->transfer(TMEMBER(_editorMuted)); - persistMgr->transfer(TMEMBER(_finished)); + persistMgr->transferBool(TMEMBER(_canBreak)); + persistMgr->transferBool(TMEMBER(_changed)); + persistMgr->transferBool(TMEMBER(_paused)); + persistMgr->transferBool(TMEMBER(_continuous)); + persistMgr->transferSint32(TMEMBER(_currentFrame)); + persistMgr->transferBool(TMEMBER(_editorAllFrames)); + persistMgr->transferSint32(TMEMBER(_editorBgAlpha)); + persistMgr->transferCharPtr(TMEMBER(_editorBgFile)); + persistMgr->transferSint32(TMEMBER(_editorBgOffsetX)); + persistMgr->transferSint32(TMEMBER(_editorBgOffsetY)); + persistMgr->transferBool(TMEMBER(_editorMuted)); + persistMgr->transferBool(TMEMBER(_finished)); _frames.persist(persistMgr); - persistMgr->transfer(TMEMBER(_lastFrameTime)); - persistMgr->transfer(TMEMBER(_looping)); - persistMgr->transfer(TMEMBER(_moveX)); - persistMgr->transfer(TMEMBER(_moveY)); + persistMgr->transferUint32(TMEMBER(_lastFrameTime)); + persistMgr->transferBool(TMEMBER(_looping)); + persistMgr->transferSint32(TMEMBER(_moveX)); + persistMgr->transferSint32(TMEMBER(_moveY)); persistMgr->transferPtr(TMEMBER_PTR(_owner)); - persistMgr->transfer(TMEMBER(_precise)); - persistMgr->transfer(TMEMBER(_streamed)); - persistMgr->transfer(TMEMBER(_streamedKeepLoaded)); + persistMgr->transferBool(TMEMBER(_precise)); + persistMgr->transferBool(TMEMBER(_streamed)); + persistMgr->transferBool(TMEMBER(_streamedKeepLoaded)); return STATUS_OK; @@ -817,4 +826,4 @@ bool BaseSprite::killAllSounds() { return STATUS_OK; } -} // end of namespace Wintermute +} // End of namespace Wintermute |