aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engines/mads/nebular/nebular_scenes8.cpp26
-rw-r--r--engines/mads/sequence.cpp84
-rw-r--r--engines/mads/sequence.h7
-rw-r--r--engines/mads/sprites.h2
4 files changed, 89 insertions, 30 deletions
diff --git a/engines/mads/nebular/nebular_scenes8.cpp b/engines/mads/nebular/nebular_scenes8.cpp
index 773b0e6d7a..b3997e110c 100644
--- a/engines/mads/nebular/nebular_scenes8.cpp
+++ b/engines/mads/nebular/nebular_scenes8.cpp
@@ -100,13 +100,33 @@ void Scene804::setup() {
if (_globals[164]) {
_globals._spriteIndexes[19] = _scene->_sequences.startCycle(
_globals._spriteIndexes[4], 0, 1);
- // TODO
+ _scene->_sequences.addTimer(60, 100);
} else {
-
+ _globals._spriteIndexes[20] = _scene->_sequences.startCycle(
+ _globals._spriteIndexes[5], false, 1);
+ _globals._spriteIndexes[21] = _scene->_sequences.startReverseCycle(
+ _globals._spriteIndexes[6], false, 4, 0, 0, 0);
+ _scene->_sequences.addTimer(160, 70);
+ _vm->_game->_player._stepEnabled = false;
}
} else {
- // TODO
+ if (_globals[167] == 0) {
+ _globals._spriteIndexes[22] = _scene->_sequences.startCycle(
+ _globals._spriteIndexes[7], false, 1);
+ }
+
+ if (_globals[164] == 0) {
+ _globals._spriteIndexes[22] = _scene->_sequences.startCycle(
+ _globals._spriteIndexes[18], false, 1);
+ }
+
+ _globals._spriteIndexes[0] = _scene->_sequences.startCycle(
+ _globals._spriteIndexes[0], false, 1);
+ _scene->_sequences.setMsgPosition(_globals._spriteIndexes[15], Common::Point(133, 139));
+ _scene->_sequences.setDepth(_globals._spriteIndexes[15], 8);
}
+
+ // TODO: More setup
}
void Scene804::enter() {
diff --git a/engines/mads/sequence.cpp b/engines/mads/sequence.cpp
index 33febe3ec7..23fa0528ab 100644
--- a/engines/mads/sequence.cpp
+++ b/engines/mads/sequence.cpp
@@ -28,28 +28,27 @@
namespace MADS {
-SequenceEntry::SequenceEntry() {
- _spritesIndex = 0;
- _flipped = 0;
- _frameIndex = 0;
- _frameStart = 0;
- _numSprites = 0;
- _animType = ANIMTYPE_NONE;
- _frameInc = 0;
- _depth = 0;
- _scale = 0;
- _dynamicHotspotIndex = -1;
- _triggerCountdown = 0;
- _doneFlag = 0;
- _entries._count = 0;
- _abortMode = ABORTMODE_0;
- _actionNouns[0] = _actionNouns[1] = _actionNouns[2] = 0;
- _numTicks = 0;
- _extraTicks = 0;
- _timeout = 0;
-}
+ SequenceEntry::SequenceEntry() {
+ _spritesIndex = 0;
+ _flipped = 0;
+ _frameIndex = 0;
+ _frameStart = 0;
+ _numSprites = 0;
+ _animType = ANIMTYPE_NONE;
+ _frameInc = 0;
+ _depth = 0;
+ _scale = 0;
+ _dynamicHotspotIndex = -1;
+ _triggerCountdown = 0;
+ _doneFlag = 0;
+ _entries._count = 0;
+ _abortMode = ABORTMODE_0;
+ _numTicks = 0;
+ _extraTicks = 0;
+ _timeout = 0;
+ }
-/*------------------------------------------------------------------------*/
+ /*------------------------------------------------------------------------*/
#define TIMER_LIST_SIZE 30
@@ -126,8 +125,31 @@ int SequenceList::add(int spriteListIndex, bool flipped, int frameIndex, int tri
_entries[seqIndex]._entries._count = 0;
_entries[seqIndex]._abortMode = _vm->_game->_abortTimersMode2;
- for (int i = 0; i < 3; ++i)
- _entries[seqIndex]._actionNouns[i] = _actionNouns[i];
+ _entries[seqIndex]._actionNouns = _vm->_game->_scene._action._activeAction;
+
+ return seqIndex;
+}
+
+int SequenceList::addTimer(int time, int abortVal) {
+ int seqIndex;
+ for (seqIndex = 0; seqIndex < _entries.size(); ++seqIndex) {
+ if (!_entries[seqIndex]._active)
+ break;
+ }
+ assert(seqIndex < (int)_entries.size());
+
+ SequenceEntry &se = _entries[seqIndex];
+ se._active = true;
+ se._spritesIndex = -1;
+ se._numTicks = time;
+ se._extraTicks = 0;
+ se._timeout = _vm->_events->_currentTimer + time;
+ se._triggerCountdown = true;
+ se._doneFlag = false;
+ se._entries._count = 0;
+ se._abortMode = _vm->_game->_abortTimersMode2;
+ se._actionNouns = _vm->_game->_scene._action._activeAction;
+ addSubEntry(seqIndex, SM_0, 0, abortVal);
return seqIndex;
}
@@ -368,6 +390,11 @@ void SequenceList::setDepth(int seqIndex, int depth) {
_entries[seqIndex]._depth = depth;
}
+void SequenceList::setMsgPosition(int seqIndex, const Common::Point &pt) {
+ _entries[seqIndex]._msgPos = pt;
+ _entries[seqIndex]._nonFixed = false;
+}
+
int SequenceList::addSpriteCycle(int srcSpriteIdx, bool flipped, int numTicks, int triggerCountdown, int timeoutTicks, int extraTicks) {
Scene &scene = _vm->_game->_scene;
MSprite *spriteFrame = scene._spriteSlots.getSprite(srcSpriteIdx).getFrame(0);
@@ -386,4 +413,15 @@ int SequenceList::startCycle(int srcSpriteIndex, bool flipped, int cycleIndex) {
return result;
}
+int SequenceList::startReverseCycle(int srcSpriteIndex, bool flipped, int numTicks,
+ int triggerCountdown, int timeoutTicks, int extraTicks) {
+ SpriteAsset *sprites = _vm->_game->_scene._sprites[srcSpriteIndex];
+ MSprite *frame = sprites->getFrame(0);
+ int depth = _vm->_game->_scene._depthSurface.getDepth(Common::Point(
+ frame->_pos.x + frame->w / 2, frame->_pos.y + frame->h / 2));
+
+ return add(srcSpriteIndex, flipped, 1, triggerCountdown, timeoutTicks, extraTicks,
+ numTicks, 0, 0, true, 100, depth - 1, 1, ANIMTYPE_REVERSIBLE, 0, 0);
+}
+
} // End of namespace
diff --git a/engines/mads/sequence.h b/engines/mads/sequence.h
index 80f695cf5a..85e4f660e5 100644
--- a/engines/mads/sequence.h
+++ b/engines/mads/sequence.h
@@ -70,7 +70,7 @@ struct SequenceEntry {
SequenceSubEntries _entries;
AbortTimerMode _abortMode;
- uint16 _actionNouns[3];
+ ActionDetails _actionNouns;
int _numTicks;
int _extraTicks;
uint32 _timeout;
@@ -84,7 +84,6 @@ class SequenceList {
private:
MADSEngine *_vm;
Common::Array<SequenceEntry> _entries;
- int _actionNouns[3];
public:
SequenceList(MADSEngine *vm);
@@ -94,6 +93,7 @@ public:
int add(int spriteListIndex, bool flipped, int frameIndex, int triggerCountdown, int delayTicks,
int extraTicks, int numTicks, int msgX, int msgY, bool nonFixed, char scale, uint8 depth,
int frameInc, SpriteAnimType animType, int numSprites, int frameStart);
+ int addTimer(int time, int abortVal);
void remove(int seqIndex);
void setSpriteSlot(int seqIndex, SpriteSlot &spriteSlot);
bool loadSprites(int seqIndex);
@@ -102,8 +102,11 @@ public:
void setAnimRange(int seqIndex, int startVal, int endVal);
void scan();
void setDepth(int seqIndex, int depth);
+ void setMsgPosition(int seqIndex, const Common::Point &pt);
int addSpriteCycle(int srcSpriteIdx, bool flipped, int numTicks, int triggerCountdown, int timeoutTicks, int extraTicks);
int startCycle(int srcSpriteIdx, bool flipped, int cycleIndex);
+ int startReverseCycle(int srcSpriteIndex, bool flipped, int numTicks, int triggerCountdown,
+ int timeoutTicks, int extraTicks);
};
} // End of namespace MADS
diff --git a/engines/mads/sprites.h b/engines/mads/sprites.h
index 2061a41043..598b9e4e3b 100644
--- a/engines/mads/sprites.h
+++ b/engines/mads/sprites.h
@@ -218,8 +218,6 @@ public:
* Adds a sprite asset to the list by name
*/
int addSprites(const Common::String &resName, int flags = 0);
-
- int startCycle(int srcSpriteIndex, bool flipped, int cycleIndex);
};
} // End of namespace MADS