[Scummvm-git-logs] scummvm master -> fd378d793dc4a3243ec93f40a7144ec750f39476

sev- noreply at scummvm.org
Mon Sep 15 18:01:48 UTC 2025


This automated email contains information about 3 new commits which have been
pushed to the 'scummvm' repo located at https://api.github.com/repos/scummvm/scummvm .

Summary:
2412c3a28e DIRECTOR: Refactor Behavior loading
65c47ac988 DIRECTOR: Read SpriteInfo from the Score for main channels
fd378d793d DIRECTOR: Read SpriteInfo for all channels


Commit: 2412c3a28e04e7d1e601c785834ffb0fdb58f087
    https://github.com/scummvm/scummvm/commit/2412c3a28e04e7d1e601c785834ffb0fdb58f087
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2025-09-15T20:01:30+02:00

Commit Message:
DIRECTOR: Refactor Behavior loading

Changed paths:
    engines/director/frame.h
    engines/director/score.cpp
    engines/director/score.h


diff --git a/engines/director/frame.h b/engines/director/frame.h
index 40d47b9cf1b..20d665b24bb 100644
--- a/engines/director/frame.h
+++ b/engines/director/frame.h
@@ -107,10 +107,69 @@ struct BehaviorElement {
 	}
 };
 
+struct TweenInfo {
+	int32 curvature;
+	int32 flags;
+	int32 easeIn;
+	int32 easeOut;
+	int32 padding;
+
+	void read(Common::ReadStreamEndian &stream) {
+		curvature = (int32)stream.readUint32();
+		flags = (int32)stream.readUint32();
+		easeIn = (int32)stream.readUint32();
+		easeOut = (int32)stream.readUint32();
+		padding = (int32)stream.readUint32();
+	}
+};
+
+struct SpriteInfo {
+	int32 startFrame;
+	int32 endFrame;
+	int32 xtraInfo;
+	int32 flags;
+	int32 channelNum;
+	TweenInfo tweenInfo;
+
+    Common::Array<int32> keyFrames;
+
+	void read(Common::ReadStreamEndian &stream) {
+		startFrame = (int32)stream.readUint32();
+		endFrame = (int32)stream.readUint32();
+		xtraInfo = (int32)stream.readUint32();
+		flags = (int32)stream.readUint32();
+		channelNum = (int32)stream.readUint32();
+		tweenInfo.read(stream);
+
+		keyFrames.clear();
+		while (!stream.eos()) {
+			int32 frame = (int32)stream.readUint32();
+			if (stream.eos())
+				break;
+			keyFrames.push_back(frame);
+		}
+	}
+
+	Common::String toString() const {
+		Common::String s;
+		s += Common::String::format("startFrame: %d, endFrame: %d, xtraInfo: %d, flags: 0x%x, channelNum: %d\n",
+			startFrame, endFrame, xtraInfo, flags, channelNum);
+		s += Common::String::format("  tweenInfo: curvature: %d, flags: 0x%x, easeIn: %d, easeOut: %d\n",
+			tweenInfo.curvature, tweenInfo.flags, tweenInfo.easeIn, tweenInfo.easeOut);
+		s += "  keyFrames: ";
+		for (size_t i = 0; i < keyFrames.size(); i++) {
+			s += Common::String::format("%d ", keyFrames[i]);
+		}
+		return s;
+	}
+};
+
+
 struct MainChannels {
 	CastMemberID actionId;
 	uint32 scriptSpriteListIdx; // D6+
 	BehaviorElement behavior; 	// D6+
+	SpriteInfo scriptSpriteInfo; // D6+
 
 	uint16 transDuration;
 	uint8 transArea; // 1 - Whole Window, 0 - Changing Area
@@ -122,6 +181,7 @@ struct MainChannels {
 	uint8 tempo;
 	uint32 tempoSpriteListIdx; // D6+
 	uint16 tempoD6Flags;
+	SpriteInfo tempoSpriteInfo; // D6+
 
 	uint8 scoreCachedTempo;
 	CastMemberID scoreCachedPaletteId;
@@ -129,9 +189,11 @@ struct MainChannels {
 	CastMemberID sound1;
 	uint8 soundType1;
 	uint32 sound1SpriteListIdx; // D6+
+	SpriteInfo sound1SpriteInfo; // D6+
 	CastMemberID sound2;
 	uint8 soundType2;
 	uint32 sound2SpriteListIdx; // D6+
+	SpriteInfo sound2SpriteInfo; // D6+
 
 	byte colorTempo;
 	byte colorSound1;
diff --git a/engines/director/score.cpp b/engines/director/score.cpp
index 7145a8a3f28..dd998ccd043 100644
--- a/engines/director/score.cpp
+++ b/engines/director/score.cpp
@@ -1861,25 +1861,30 @@ void Score::loadFrames(Common::SeekableReadStreamEndian &stream, uint16 version)
 	debugC(1, kDebugLoading, "Score::loadFrames(): Number of frames: %d, framesStreamSize: %d", _numFrames, _framesStreamSize);
 }
 
+BehaviorElement Score::loadSpriteBehavior(Common::MemoryReadStreamEndian *stream) {
+	BehaviorElement behavior;
+	behavior.read(*stream);
+
+	if (behavior.initializerIndex) {
+		Common::MemoryReadStreamEndian *stream1 = getSpriteDetailsStream(behavior.initializerIndex);
+
+		if (stream1) {
+			behavior.initializerParams = stream1->readString();
+			delete stream1;
+		}
+	}
+
+	return behavior;
+}
+
 void Score::loadFrameSpriteDetails() {
 	for (int i = 0; i < _currentFrame->_sprites.size(); i++) {
 		Sprite *sprite = _currentFrame->_sprites[i];
 		if (sprite->_spriteListIdx) {
 			Common::MemoryReadStreamEndian *stream = getSpriteDetailsStream(sprite->_spriteListIdx + 1);
 			if (stream) {
-				BehaviorElement behavior;
-
 				while (stream->pos() < stream->size()) {
-					behavior.read(*stream);
-
-					if (behavior.initializerIndex) {
-						Common::MemoryReadStreamEndian *stream1 = getSpriteDetailsStream(behavior.initializerIndex);
-
-						if (stream1) {
-							behavior.initializerParams = stream1->readString();
-							delete stream1;
-						}
-					}
+					BehaviorElement behavior = loadSpriteBehavior(stream);
 
 					sprite->_behaviors.push_back(behavior);
 				}
@@ -1888,20 +1893,12 @@ void Score::loadFrameSpriteDetails() {
 		}
 	}
 
+	// Script channel
 	if (_currentFrame->_mainChannels.scriptSpriteListIdx) {
-		Common::MemoryReadStreamEndian *stream = getSpriteDetailsStream(_currentFrame->_mainChannels.scriptSpriteListIdx);
+		Common::MemoryReadStreamEndian *stream = getSpriteDetailsStream(_currentFrame->_mainChannels.scriptSpriteListIdx + 1);
 		if (stream) {
-			_currentFrame->_mainChannels.behavior.read(*stream);
+			_currentFrame->_mainChannels.behavior = loadSpriteBehavior(stream);
 			delete stream;
-
-			if (_currentFrame->_mainChannels.behavior.initializerIndex) {
-				Common::MemoryReadStreamEndian *stream1 = getSpriteDetailsStream(_currentFrame->_mainChannels.behavior.initializerIndex);
-
-				if (stream1) {
-					_currentFrame->_mainChannels.behavior.initializerParams = stream1->readString();
-					delete stream1;
-				}
-			}
 		}
 	}
 }
diff --git a/engines/director/score.h b/engines/director/score.h
index eacf4881333..771727c7fee 100644
--- a/engines/director/score.h
+++ b/engines/director/score.h
@@ -53,6 +53,7 @@ class Channel;
 class Sprite;
 class CastMember;
 class AudioDecoder;
+struct BehaviorElement;
 
 struct Label {
 	Common::String comment;
@@ -61,63 +62,6 @@ struct Label {
 	Label(Common::String name1, uint16 number1, Common::String comment1) { name = name1; number = number1; comment = comment1;}
 };
 
-struct TweenInfo{
-    int32 curvature;
-    int32 flags;
-    int32 easeIn;
-    int32 easeOut;
-    int32 padding;
-
-	void read(Common::ReadStreamEndian &stream) {
-		curvature = (int32)stream.readUint32();
-		flags = (int32)stream.readUint32();
-		easeIn = (int32)stream.readUint32();
-		easeOut = (int32)stream.readUint32();
-		padding = (int32)stream.readUint32();
-	}
-};
-
-struct SpriteInfo {
-    int32 startFrame;
-    int32 endFrame;
-    int32 xtraInfo;
-    int32 flags;
-    int32 channelNum;
-    TweenInfo tweenInfo;
-
-    Common::Array<int32> keyFrames;
-
-	void read(Common::ReadStreamEndian &stream) {
-		startFrame = (int32)stream.readUint32();
-		endFrame = (int32)stream.readUint32();
-		xtraInfo = (int32)stream.readUint32();
-		flags = (int32)stream.readUint32();
-		channelNum = (int32)stream.readUint32();
-		tweenInfo.read(stream);
-
-		keyFrames.clear();
-		while (!stream.eos()) {
-			int32 frame = (int32)stream.readUint32();
-			if (stream.eos())
-				break;
-			keyFrames.push_back(frame);
-		}
-	}
-
-	Common::String toString() const {
-		Common::String s;
-		s += Common::String::format("startFrame: %d, endFrame: %d, xtraInfo: %d, flags: 0x%x, channelNum: %d\n",
-			startFrame, endFrame, xtraInfo, flags, channelNum);
-		s += Common::String::format("  tweenInfo: curvature: %d, flags: 0x%x, easeIn: %d, easeOut: %d\n",
-			tweenInfo.curvature, tweenInfo.flags, tweenInfo.easeIn, tweenInfo.easeOut);
-		s += "  keyFrames: ";
-		for (size_t i = 0; i < keyFrames.size(); i++) {
-			s += Common::String::format("%d ", keyFrames[i]);
-		}
-		return s;
-	}
-};
-
 class Score {
 public:
 	Score(Movie *movie);
@@ -220,6 +164,8 @@ private:
 
 	void loadFrameSpriteDetails();
 
+	BehaviorElement loadSpriteBehavior(Common::MemoryReadStreamEndian *stream);
+
 public:
 	Common::Array<Channel *> _channels;
 	Common::SortedArray<Label *> *_labels;


Commit: 65c47ac9887348345c8d373fc5926d916ca5a73a
    https://github.com/scummvm/scummvm/commit/65c47ac9887348345c8d373fc5926d916ca5a73a
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2025-09-15T20:01:36+02:00

Commit Message:
DIRECTOR: Read SpriteInfo from the Score for main channels

Changed paths:
    engines/director/frame.h
    engines/director/score.cpp


diff --git a/engines/director/frame.h b/engines/director/frame.h
index 20d665b24bb..a048eace277 100644
--- a/engines/director/frame.h
+++ b/engines/director/frame.h
@@ -60,53 +60,6 @@ enum {
 	kSprChannelSizeD7 = 48,
 };
 
-struct PaletteInfo {
-	CastMemberID paletteId;
-
-	byte firstColor;
-	byte lastColor;
-	byte flags;
-	bool colorCycling;
-	bool normal;
-	bool fadeToWhite;
-	bool fadeToBlack;
-	bool autoReverse;
-	bool overTime;
-	byte speed;
-	uint16 frameCount;
-	uint16 cycleCount;
-	byte fade;
-	byte delay;
-	byte style;
-	byte colorCode;
-
-	uint32 spriteListIdx; // D6+
-
-	PaletteInfo() {
-		paletteId = CastMemberID(0, 0);
-		firstColor = lastColor = 0;
-		flags = 0; colorCycling = false;
-		normal = false; fadeToWhite = false;
-		fadeToBlack = false; autoReverse = false;
-		overTime = false; speed = 0;
-		frameCount = cycleCount = 0;
-		fade = delay = style = colorCode = 0;
-		spriteListIdx = 0;
-	}
-};
-
-struct BehaviorElement {
-	CastMemberID memberID;
-	int32 initializerIndex = 0;
-	Common::String initializerParams;
-
-	void read(Common::ReadStreamEndian &stream) {
-		memberID.castLib = (int16)stream.readUint16();
-		memberID.member = (int16)stream.readUint16();
-		initializerIndex = (int32)stream.readUint32();
-	}
-};
-
 struct TweenInfo {
 	int32 curvature;
 	int32 flags;
@@ -164,6 +117,53 @@ struct SpriteInfo {
 	}
 };
 
+struct PaletteInfo {
+	CastMemberID paletteId;
+
+	byte firstColor;
+	byte lastColor;
+	byte flags;
+	bool colorCycling;
+	bool normal;
+	bool fadeToWhite;
+	bool fadeToBlack;
+	bool autoReverse;
+	bool overTime;
+	byte speed;
+	uint16 frameCount;
+	uint16 cycleCount;
+	byte fade;
+	byte delay;
+	byte style;
+	byte colorCode;
+
+	uint32 spriteListIdx; // D6+
+	SpriteInfo spriteInfo; // D6+
+
+	PaletteInfo() {
+		paletteId = CastMemberID(0, 0);
+		firstColor = lastColor = 0;
+		flags = 0; colorCycling = false;
+		normal = false; fadeToWhite = false;
+		fadeToBlack = false; autoReverse = false;
+		overTime = false; speed = 0;
+		frameCount = cycleCount = 0;
+		fade = delay = style = colorCode = 0;
+		spriteListIdx = 0;
+	}
+};
+
+struct BehaviorElement {
+	CastMemberID memberID;
+	int32 initializerIndex = 0;
+	Common::String initializerParams;
+
+	void read(Common::ReadStreamEndian &stream) {
+		memberID.castLib = (int16)stream.readUint16();
+		memberID.member = (int16)stream.readUint16();
+		initializerIndex = (int32)stream.readUint32();
+	}
+};
 
 struct MainChannels {
 	CastMemberID actionId;
@@ -177,6 +177,8 @@ struct MainChannels {
 	TransitionType transType;
 	CastMemberID trans;
 	uint32 transSpriteListIdx; // D6+
+	SpriteInfo transSpriteInfo; // D6+
+
 	PaletteInfo palette;
 	uint8 tempo;
 	uint32 tempoSpriteListIdx; // D6+
diff --git a/engines/director/score.cpp b/engines/director/score.cpp
index dd998ccd043..89fdadaf377 100644
--- a/engines/director/score.cpp
+++ b/engines/director/score.cpp
@@ -1878,10 +1878,11 @@ BehaviorElement Score::loadSpriteBehavior(Common::MemoryReadStreamEndian *stream
 }
 
 void Score::loadFrameSpriteDetails() {
+	Common::MemoryReadStreamEndian *stream = nullptr;
 	for (int i = 0; i < _currentFrame->_sprites.size(); i++) {
 		Sprite *sprite = _currentFrame->_sprites[i];
 		if (sprite->_spriteListIdx) {
-			Common::MemoryReadStreamEndian *stream = getSpriteDetailsStream(sprite->_spriteListIdx + 1);
+			stream = getSpriteDetailsStream(sprite->_spriteListIdx + 1);
 			if (stream) {
 				while (stream->pos() < stream->size()) {
 					BehaviorElement behavior = loadSpriteBehavior(stream);
@@ -1895,11 +1896,62 @@ void Score::loadFrameSpriteDetails() {
 
 	// Script channel
 	if (_currentFrame->_mainChannels.scriptSpriteListIdx) {
-		Common::MemoryReadStreamEndian *stream = getSpriteDetailsStream(_currentFrame->_mainChannels.scriptSpriteListIdx + 1);
+		stream = getSpriteDetailsStream(_currentFrame->_mainChannels.scriptSpriteListIdx + 1);
 		if (stream) {
 			_currentFrame->_mainChannels.behavior = loadSpriteBehavior(stream);
 			delete stream;
 		}
+
+		stream = getSpriteDetailsStream(_currentFrame->_mainChannels.scriptSpriteListIdx);
+		if (stream) {
+			_currentFrame->_mainChannels.scriptSpriteInfo.read(*stream);
+			delete stream;
+		}
+	}
+
+	// Tempo channel
+	if (_currentFrame->_mainChannels.tempoSpriteListIdx) {
+		stream = getSpriteDetailsStream(_currentFrame->_mainChannels.tempoSpriteListIdx);
+		if (stream) {
+			_currentFrame->_mainChannels.tempoSpriteInfo.read(*stream);
+			delete stream;
+		}
+	}
+
+	// Transition channel
+	if (_currentFrame->_mainChannels.transSpriteListIdx) {
+		stream = getSpriteDetailsStream(_currentFrame->_mainChannels.transSpriteListIdx);
+		if (stream) {
+			_currentFrame->_mainChannels.transSpriteInfo.read(*stream);
+			delete stream;
+		}
+	}
+
+	// Sound2 channel
+	if (_currentFrame->_mainChannels.sound2SpriteListIdx) {
+		stream = getSpriteDetailsStream(_currentFrame->_mainChannels.sound2SpriteListIdx);
+		if (stream) {
+			_currentFrame->_mainChannels.sound2SpriteInfo.read(*stream);
+			delete stream;
+		}
+	}
+
+	// Sound1 channel
+	if (_currentFrame->_mainChannels.sound1SpriteListIdx) {
+		stream = getSpriteDetailsStream(_currentFrame->_mainChannels.sound1SpriteListIdx);
+		if (stream) {
+			_currentFrame->_mainChannels.sound1SpriteInfo.read(*stream);
+			delete stream;
+		}
+	}
+
+	// Palette channel
+	if (_currentFrame->_mainChannels.palette.spriteListIdx) {
+		stream = getSpriteDetailsStream(_currentFrame->_mainChannels.palette.spriteListIdx);
+		if (stream) {
+			_currentFrame->_mainChannels.palette.spriteInfo.read(*stream);
+			delete stream;
+		}
 	}
 }
 


Commit: fd378d793dc4a3243ec93f40a7144ec750f39476
    https://github.com/scummvm/scummvm/commit/fd378d793dc4a3243ec93f40a7144ec750f39476
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2025-09-15T20:01:36+02:00

Commit Message:
DIRECTOR: Read SpriteInfo for all channels

Changed paths:
  A engines/director/spriteinfo.h
    engines/director/frame.h
    engines/director/score.cpp
    engines/director/sprite.h


diff --git a/engines/director/frame.h b/engines/director/frame.h
index a048eace277..480ff25434a 100644
--- a/engines/director/frame.h
+++ b/engines/director/frame.h
@@ -22,6 +22,8 @@
 #ifndef DIRECTOR_FRAME_H
 #define DIRECTOR_FRAME_H
 
+#include "director/spriteinfo.h"
+
 namespace Image {
 class ImageDecoder;
 }
@@ -60,63 +62,6 @@ enum {
 	kSprChannelSizeD7 = 48,
 };
 
-struct TweenInfo {
-	int32 curvature;
-	int32 flags;
-	int32 easeIn;
-	int32 easeOut;
-	int32 padding;
-
-	void read(Common::ReadStreamEndian &stream) {
-		curvature = (int32)stream.readUint32();
-		flags = (int32)stream.readUint32();
-		easeIn = (int32)stream.readUint32();
-		easeOut = (int32)stream.readUint32();
-		padding = (int32)stream.readUint32();
-	}
-};
-
-struct SpriteInfo {
-	int32 startFrame;
-	int32 endFrame;
-	int32 xtraInfo;
-	int32 flags;
-	int32 channelNum;
-	TweenInfo tweenInfo;
-
-    Common::Array<int32> keyFrames;
-
-	void read(Common::ReadStreamEndian &stream) {
-		startFrame = (int32)stream.readUint32();
-		endFrame = (int32)stream.readUint32();
-		xtraInfo = (int32)stream.readUint32();
-		flags = (int32)stream.readUint32();
-		channelNum = (int32)stream.readUint32();
-		tweenInfo.read(stream);
-
-		keyFrames.clear();
-		while (!stream.eos()) {
-			int32 frame = (int32)stream.readUint32();
-			if (stream.eos())
-				break;
-			keyFrames.push_back(frame);
-		}
-	}
-
-	Common::String toString() const {
-		Common::String s;
-		s += Common::String::format("startFrame: %d, endFrame: %d, xtraInfo: %d, flags: 0x%x, channelNum: %d\n",
-			startFrame, endFrame, xtraInfo, flags, channelNum);
-		s += Common::String::format("  tweenInfo: curvature: %d, flags: 0x%x, easeIn: %d, easeOut: %d\n",
-			tweenInfo.curvature, tweenInfo.flags, tweenInfo.easeIn, tweenInfo.easeOut);
-		s += "  keyFrames: ";
-		for (size_t i = 0; i < keyFrames.size(); i++) {
-			s += Common::String::format("%d ", keyFrames[i]);
-		}
-		return s;
-	}
-};
-
 struct PaletteInfo {
 	CastMemberID paletteId;
 
@@ -153,18 +98,6 @@ struct PaletteInfo {
 	}
 };
 
-struct BehaviorElement {
-	CastMemberID memberID;
-	int32 initializerIndex = 0;
-	Common::String initializerParams;
-
-	void read(Common::ReadStreamEndian &stream) {
-		memberID.castLib = (int16)stream.readUint16();
-		memberID.member = (int16)stream.readUint16();
-		initializerIndex = (int32)stream.readUint32();
-	}
-};
-
 struct MainChannels {
 	CastMemberID actionId;
 	uint32 scriptSpriteListIdx; // D6+
diff --git a/engines/director/score.cpp b/engines/director/score.cpp
index 89fdadaf377..8e339932155 100644
--- a/engines/director/score.cpp
+++ b/engines/director/score.cpp
@@ -1891,6 +1891,12 @@ void Score::loadFrameSpriteDetails() {
 				}
 				delete stream;
 			}
+
+			stream = getSpriteDetailsStream(sprite->_spriteListIdx);
+			if (stream) {
+				sprite->_spriteInfo.read(*stream);
+				delete stream;
+			}
 		}
 	}
 
diff --git a/engines/director/sprite.h b/engines/director/sprite.h
index 379d6584bfc..dba092de338 100644
--- a/engines/director/sprite.h
+++ b/engines/director/sprite.h
@@ -22,6 +22,8 @@
 #ifndef DIRECTOR_SPRITE_H
 #define DIRECTOR_SPRITE_H
 
+#include "director/spriteinfo.h"
+
 namespace Director {
 
 class Frame;
@@ -63,7 +65,6 @@ enum ThicknessFlags {
 	kTTweened   = 0x80,
 };
 
-struct BehaviorElement;
 class Sprite {
 public:
 	Sprite(Frame *frame = nullptr);
@@ -150,6 +151,7 @@ public:
 	bool _stretch;
 
 	uint32 _spriteListIdx;	 // D6+
+	SpriteInfo _spriteInfo; // D6+
 
 	// D7+
 	byte _flags;
@@ -158,7 +160,7 @@ public:
 	int32 _angleRot;
 	int32 _angleSkew;
 
-	Common::Array<BehaviorElement> _behaviors;
+	Common::Array<BehaviorElement> _behaviors; // D6+
 };
 
 } // End of namespace Director
diff --git a/engines/director/spriteinfo.h b/engines/director/spriteinfo.h
new file mode 100644
index 00000000000..dfbc940f1ac
--- /dev/null
+++ b/engines/director/spriteinfo.h
@@ -0,0 +1,98 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 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, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#ifndef DIRECTOR_SPRITEINFO_H
+#define DIRECTOR_SPRITEINFO_H
+
+namespace Director {
+
+struct TweenInfo {
+	int32 curvature;
+	int32 flags;
+	int32 easeIn;
+	int32 easeOut;
+	int32 padding;
+
+	void read(Common::ReadStreamEndian &stream) {
+		curvature = (int32)stream.readUint32();
+		flags = (int32)stream.readUint32();
+		easeIn = (int32)stream.readUint32();
+		easeOut = (int32)stream.readUint32();
+		padding = (int32)stream.readUint32();
+	}
+};
+
+struct SpriteInfo {
+	int32 startFrame;
+	int32 endFrame;
+	int32 xtraInfo;
+	int32 flags;
+	int32 channelNum;
+	TweenInfo tweenInfo;
+
+    Common::Array<int32> keyFrames;
+
+	void read(Common::ReadStreamEndian &stream) {
+		startFrame = (int32)stream.readUint32();
+		endFrame = (int32)stream.readUint32();
+		xtraInfo = (int32)stream.readUint32();
+		flags = (int32)stream.readUint32();
+		channelNum = (int32)stream.readUint32();
+		tweenInfo.read(stream);
+
+		keyFrames.clear();
+		while (!stream.eos()) {
+			int32 frame = (int32)stream.readUint32();
+			if (stream.eos())
+				break;
+			keyFrames.push_back(frame);
+		}
+	}
+
+	Common::String toString() const {
+		Common::String s;
+		s += Common::String::format("startFrame: %d, endFrame: %d, xtraInfo: %d, flags: 0x%x, channelNum: %d\n",
+			startFrame, endFrame, xtraInfo, flags, channelNum);
+		s += Common::String::format("  tweenInfo: curvature: %d, flags: 0x%x, easeIn: %d, easeOut: %d\n",
+			tweenInfo.curvature, tweenInfo.flags, tweenInfo.easeIn, tweenInfo.easeOut);
+		s += "  keyFrames: ";
+		for (size_t i = 0; i < keyFrames.size(); i++) {
+			s += Common::String::format("%d ", keyFrames[i]);
+		}
+		return s;
+	}
+};
+
+struct BehaviorElement {
+	CastMemberID memberID;
+	int32 initializerIndex = 0;
+	Common::String initializerParams;
+
+	void read(Common::ReadStreamEndian &stream) {
+		memberID.castLib = (int16)stream.readUint16();
+		memberID.member = (int16)stream.readUint16();
+		initializerIndex = (int32)stream.readUint32();
+	}
+};
+
+} // End of namespace Director
+
+#endif




More information about the Scummvm-git-logs mailing list