diff options
author | Paul Gilbert | 2011-08-14 12:25:02 +1000 |
---|---|---|
committer | Paul Gilbert | 2011-08-14 12:25:02 +1000 |
commit | fd8fcc303dbca30383ac0651e36014079b2ffc88 (patch) | |
tree | 2503747d52f6e9338123b58348b23b9231bfe5dd /engines | |
parent | fed3306b15666fb989a08a6e62322577de1e9414 (diff) | |
download | scummvm-rg350-fd8fcc303dbca30383ac0651e36014079b2ffc88.tar.gz scummvm-rg350-fd8fcc303dbca30383ac0651e36014079b2ffc88.tar.bz2 scummvm-rg350-fd8fcc303dbca30383ac0651e36014079b2ffc88.zip |
TSAGE: Implemented changes in SequenceManager introduced by Blue Force
Diffstat (limited to 'engines')
-rw-r--r-- | engines/tsage/converse.cpp | 43 | ||||
-rw-r--r-- | engines/tsage/converse.h | 4 | ||||
-rw-r--r-- | engines/tsage/core.cpp | 17 | ||||
-rw-r--r-- | engines/tsage/core.h | 10 |
4 files changed, 66 insertions, 8 deletions
diff --git a/engines/tsage/converse.cpp b/engines/tsage/converse.cpp index 0ae575c557..cc1c596ddc 100644 --- a/engines/tsage/converse.cpp +++ b/engines/tsage/converse.cpp @@ -34,7 +34,7 @@ namespace tSage { SequenceManager::SequenceManager() : Action() { Common::set_to(&_objectList[0], &_objectList[6], (SceneObject *)NULL); _sequenceData.clear(); - _field24 = 0; + _fontNum = 0; _sequenceOffset = 0; _resNum = 0; _field26 = 0; @@ -56,7 +56,7 @@ void SequenceManager::synchronize(Serializer &s) { s.syncAsSint32LE(_resNum); s.syncAsSint32LE(_sequenceOffset); s.syncAsByte(_keepActive); - s.syncAsSint32LE(_field24); + s.syncAsSint32LE(_fontNum); s.syncAsSint32LE(_field26); s.syncAsSint32LE(_objectIndex); @@ -284,6 +284,32 @@ void SequenceManager::signal() { _objectList[objIndex3], _objectList[objIndex4], _objectList[objIndex5], _objectList[objIndex6], NULL); break; } + /* Following indexes were introduced for Blue Force */ + case 35: + v1 = getNextValue(); + _sceneObject->updateAngle(_objectList[v1]); + break; + case 36: + _sceneObject->animate(ANIM_MODE_9, NULL); + break; + case 37: + v1 = getNextValue(); + v2 = getNextValue(); + warning("TODO: dword_53030(%d,%d)", v1, v2); + break; + case 38: { + int resNum = getNextValue(); + int lineNum = getNextValue(); + int fontNum = getNextValue(); + int color1 = getNextValue(); + int color2 = getNextValue(); + int color3 = getNextValue(); + int xp = getNextValue(); + int yp = getNextValue(); + int width = getNextValue(); + setMessage(resNum, lineNum, fontNum, color1, color2, color3, Common::Point(xp, yp), width); + break; + } default: error("SequenceManager::signal - Unknown action %d at offset %xh", idx, _sequenceOffset - 2); break; @@ -337,10 +363,15 @@ uint16 SequenceManager::getNextValue() { } void SequenceManager::setMessage(int resNum, int lineNum, int color, const Common::Point &pt, int width) { - _sceneText._color1 = color; - _sceneText._color2 = 0; - _sceneText._color3 = 0; - _sceneText._fontNumber = 2; + setMessage(resNum, lineNum, 2, color, 0, 0, pt, width); +} + +void SequenceManager::setMessage(int resNum, int lineNum, int fontNum, int color1, int color2, int color3, + const Common::Point &pt, int width) { + _sceneText._color1 = color1; + _sceneText._color2 = color2; + _sceneText._color3 = color3; + _sceneText._fontNumber = fontNum; _sceneText._width = width; // Get the display message diff --git a/engines/tsage/converse.h b/engines/tsage/converse.h index 13c490e995..5836b0bfbb 100644 --- a/engines/tsage/converse.h +++ b/engines/tsage/converse.h @@ -39,13 +39,15 @@ private: void setup(); uint16 getNextValue(); void setMessage(int resNum, int lineNum, int color, const Common::Point &pt, int width); + void setMessage(int resNum, int lineNum, int fontNum, int color1, int color2, int color3, + const Common::Point &pt, int width); SequenceManager *globalManager(); public: SceneText _sceneText; int _resNum; uint _sequenceOffset; bool _keepActive; - int _field24; + int _fontNum; int _field26; Common::Array<byte> _sequenceData; int _objectIndex; diff --git a/engines/tsage/core.cpp b/engines/tsage/core.cpp index 52c1a5c8be..492ecf7cb1 100644 --- a/engines/tsage/core.cpp +++ b/engines/tsage/core.cpp @@ -1655,6 +1655,11 @@ void SceneObjectWrapper::remove() { } void SceneObjectWrapper::dispatch() { + if (_vm->getGameID() == GType_Ringworld) + check(); +} + +void SceneObjectWrapper::check() { _visageImages.setVisage(_sceneObject->_visage); int frameCount = _visageImages.getFrameCount(); int angle = _sceneObject->_angle; @@ -2277,6 +2282,18 @@ void SceneObject::updateScreen() { } } +void SceneObject::updateAngle(SceneObject *sceneObj) { + checkAngle(sceneObj); + if (_objectWrapper) + _objectWrapper->check(); +} + +void SceneObject::changeAngle(int angle) { + _angle = angle; + if (_objectWrapper) + _objectWrapper->check(); +} + void SceneObject::setup(int visage, int stripFrameNum, int frameNum, int posX, int posY, int priority) { postInit(); setVisage(visage); diff --git a/engines/tsage/core.h b/engines/tsage/core.h index 959f96bf34..c4408e38a4 100644 --- a/engines/tsage/core.h +++ b/engines/tsage/core.h @@ -437,7 +437,10 @@ public: }; enum AnimateMode {ANIM_MODE_NONE = 0, ANIM_MODE_1 = 1, ANIM_MODE_2 = 2, ANIM_MODE_3 = 3, - ANIM_MODE_4 = 4, ANIM_MODE_5 = 5, ANIM_MODE_6 = 6, ANIM_MODE_7 = 7, ANIM_MODE_8 = 8}; + ANIM_MODE_4 = 4, ANIM_MODE_5 = 5, ANIM_MODE_6 = 6, ANIM_MODE_7 = 7, ANIM_MODE_8 = 8, + // Introduced in Blue Force + ANIM_MODE_9 = 9 +}; class SceneObject; @@ -468,6 +471,7 @@ public: virtual ~SceneObjectWrapper() {} void setSceneObject(SceneObject *so); + void check(); virtual void synchronize(Serializer &s); virtual Common::String getClassName() { return "SceneObjectWrapper"; } @@ -556,6 +560,10 @@ public: virtual void draw(); virtual void proc19() {} virtual void updateScreen(); + // New methods introduced by Blue FOrce + virtual void updateAngle(SceneObject *sceneObj); + virtual void changeAngle(int angle); + void setup(int visage, int stripFrameNum, int frameNum, int posX, int posY, int priority); }; |