aboutsummaryrefslogtreecommitdiff
path: root/engines/mads/animation.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/mads/animation.cpp')
-rw-r--r--engines/mads/animation.cpp34
1 files changed, 31 insertions, 3 deletions
diff --git a/engines/mads/animation.cpp b/engines/mads/animation.cpp
index d0c7d3079b..588e4eaf36 100644
--- a/engines/mads/animation.cpp
+++ b/engines/mads/animation.cpp
@@ -140,6 +140,8 @@ Animation *Animation::init(MADSEngine *vm, Scene *scene) {
Animation::Animation(MADSEngine *vm, Scene *scene) : _vm(vm), _scene(scene) {
_font = nullptr;
_resetFlag = false;
+ _messageCtr = 0;
+ _skipLoad = false;
}
Animation::~Animation() {
@@ -298,6 +300,32 @@ void Animation::load(MSurface &depthSurface, InterfaceSurface &interfaceSurface,
f.close();
}
+void Animation::startAnimation(int abortTimers) {
+ _messageCtr = 0;
+ _skipLoad = true;
+
+ if (_header._manualFlag) {
+ _unkIndex = -1;
+ //SpriteAsset *asset = _scene->_sprites[_spriteListIndexes[_header._spritesIndex]];
+
+ // TODO: Weird stuff with _unkList. Seems like it's treated as pointers
+ // here, but in processText, it's used as POINTs?
+
+ loadFrame(1);
+ }
+
+ _currentFrame = 0;
+ _oldFrameEntry = 0;
+ _nextFrameTimer = _vm->_events->_currentTimer;
+ _abortTimers = abortTimers;
+ _abortTimersMode = _vm->_game->_abortTimersMode2;
+ _vm->_game->_scene._action._activeAction = _actionDetails;
+
+ for (int idx = 0; idx < _header._messagesCount; ++idx) {
+ _messages[idx]._kernelMsgIndex = -1;
+ }
+}
+
void Animation::loadFrame(int frameNumber) {
Scene &scene = _vm->_game->_scene;
if (_skipLoad)
@@ -507,11 +535,11 @@ void Animation::update() {
// Animation is complete
if (_abortTimers != 0) {
_vm->_game->_abortTimers = _abortTimers;
- _vm->_game->_abortTimersMode = _abortMode;
+ _vm->_game->_abortTimersMode = _abortTimersMode;
- if (_abortMode != ABORTMODE_1) {
+ if (_abortTimersMode != ABORTMODE_1) {
// Copy the noun list
- scene._action._action = _actionNouns;
+ scene._action._action = _actionDetails;
}
}
}