ScummVM API documentation
frame.h
1 /* ScummVM - Graphic Adventure Engine
2  *
3  * ScummVM is the legal property of its developers, whose names
4  * are too numerous to list here. Please refer to the COPYRIGHT
5  * file distributed with this source distribution.
6  *
7  * This program is free software: you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License as published by
9  * the Free Software Foundation, either version 3 of the License, or
10  * (at your option) any later version.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with this program. If not, see <http://www.gnu.org/licenses/>.
19  *
20  */
21 
22 #ifndef DIRECTOR_FRAME_H
23 #define DIRECTOR_FRAME_H
24 
25 #include "director/spriteinfo.h"
26 
27 namespace Image {
28 class ImageDecoder;
29 }
30 
31 namespace Graphics {
32 class ManagedSurface;
33 struct Surface;
34 }
35 
36 namespace Common {
37 class ReadStreamEndian;
38 class MemoryReadStreamEndian;
39 class SeekableWriteStream;
40 }
41 
42 namespace Director {
43 
44 class Score;
45 class Sprite;
46 class TextCastMember;
47 
48 enum {
49  kMainChannelSizeD2 = 32,
50  kSprChannelSizeD2 = 16,
51 
52  kMainChannelSizeD4 = 40,
53  kSprChannelSizeD4 = 20,
54 
55  kMainChannelSizeD5 = 48,
56  kSprChannelSizeD5 = 24,
57 
58  kMainChannelSizeD6 = 144,
59  kSprChannelSizeD6 = 24,
60 
61  kMainChannelSizeD7 = 288,
62  kSprChannelSizeD7 = 48,
63 };
64 
65 struct PaletteInfo {
66  CastMemberID paletteId;
67 
68  byte firstColor;
69  byte lastColor;
70  byte flags;
71  bool colorCycling;
72  bool normal;
73  bool fadeToWhite;
74  bool fadeToBlack;
75  bool autoReverse;
76  bool overTime;
77  byte speed;
78  uint16 frameCount;
79  uint16 cycleCount;
80  byte fade;
81  byte delay;
82  byte style;
83  byte colorCode;
84 
85  uint32 spriteListIdx; // D6+
86  SpriteInfo spriteInfo; // D6+
87 
88  PaletteInfo() {
89  paletteId = CastMemberID(0, 0);
90  firstColor = lastColor = 0;
91  flags = 0; colorCycling = false;
92  normal = false; fadeToWhite = false;
93  fadeToBlack = false; autoReverse = false;
94  overTime = false; speed = 0;
95  frameCount = cycleCount = 0;
96  fade = delay = style = colorCode = 0;
97  spriteListIdx = 0;
98  }
99 };
100 
101 struct MainChannels {
102  CastMemberID actionId;
103  uint32 scriptSpriteListIdx; // D6+
104  SpriteInfo scriptSpriteInfo; // D6+
105  Common::Array<BehaviorElement> behaviors; // D6+
106 
107  uint16 transDuration;
108  uint8 transArea; // 1 - Whole Window, 0 - Changing Area
109  uint8 transChunkSize;
110  TransitionType transType;
111  CastMemberID trans;
112  uint32 transSpriteListIdx; // D6+
113  SpriteInfo transSpriteInfo; // D6+
114 
115  PaletteInfo palette;
116  uint8 tempo;
117  uint32 tempoSpriteListIdx; // D6+
118  uint16 tempoCuePoint;
119  SpriteInfo tempoSpriteInfo; // D6+
120 
121  uint8 scoreCachedTempo;
122  CastMemberID scoreCachedPaletteId;
123 
124  CastMemberID sound1;
125  uint8 soundType1;
126  uint32 sound1SpriteListIdx; // D6+
127  SpriteInfo sound1SpriteInfo; // D6+
128  CastMemberID sound2;
129  uint8 soundType2;
130  uint32 sound2SpriteListIdx; // D6+
131  SpriteInfo sound2SpriteInfo; // D6+
132 
133  byte colorTempo;
134  byte colorSound1;
135  byte colorSound2;
136  byte colorScript;
137  byte colorTrans;
138 
139  uint8 skipFrameFlag;
140  uint8 blend;
141 
142  MainChannels() {
143  scriptSpriteListIdx = 0;
144 
145  transDuration = 0;
146  transArea = 0;
147  transChunkSize = 0;
148  transType = kTransNone;
149  transSpriteListIdx = 0;
150 
151  tempo = 0;
152  tempoSpriteListIdx = 0;
153  tempoCuePoint = 0;
154 
155  scoreCachedTempo = 0;
156 
157  soundType1 = 0;
158  sound1SpriteListIdx = 0;
159 
160  soundType2 = 0;
161  sound2SpriteListIdx = 0;
162 
163  colorTempo = 0;
164  colorSound1 = 0;
165  colorSound2 = 0;
166  colorScript = 0;
167  colorTrans = 0;
168 
169  skipFrameFlag = 0;
170  blend = 0;
171  }
172 };
173 
174 struct FrameEntity {
175  uint16 spriteId;
176  Common::Rect rect;
177 };
178 
179 
180 class Frame {
181 public:
182  Frame(Score *score, int numChannels);
183  Frame(const Frame &frame);
184  ~Frame();
185 
186  void reset();
187 
188  Score *getScore() const { return _score; }
189 
190  void readChannel(Common::MemoryReadStreamEndian &stream, uint16 offset, uint16 size, uint16 version);
191  void writeMainChannels(Common::SeekableWriteStream *writeStream, uint16 version);
192 
193  void executeImmediateScripts();
194 
195  Common::String formatChannelInfo();
196 
197 private:
198 
199  void readChannelD2(Common::MemoryReadStreamEndian &stream, uint16 offset, uint16 size);
200  void readSpriteD2(Common::MemoryReadStreamEndian &stream, uint16 offset, uint16 size);
201  void readMainChannelsD2(Common::MemoryReadStreamEndian &stream, uint16 offset, uint16 size);
202 
203  void readChannelD4(Common::MemoryReadStreamEndian &stream, uint16 offset, uint16 size);
204  void readSpriteD4(Common::MemoryReadStreamEndian &stream, uint16 offset, uint16 size);
205  void readMainChannelsD4(Common::MemoryReadStreamEndian &stream, uint16 offset, uint16 size);
206 
207  void writeMainChannelsD4(Common::SeekableWriteStream *writeStream);
208 
209  void readChannelD5(Common::MemoryReadStreamEndian &stream, uint16 offset, uint16 size);
210  void readSpriteD5(Common::MemoryReadStreamEndian &stream, uint16 offset, uint16 size);
211  void readMainChannelsD5(Common::MemoryReadStreamEndian &stream, uint16 offset, uint16 size);
212 
213  void writeMainChannelsD5(Common::SeekableWriteStream *writeStream);
214 
215  void readChannelD6(Common::MemoryReadStreamEndian &stream, uint16 offset, uint16 size);
216  void readSpriteD6(Common::MemoryReadStreamEndian &stream, uint16 offset, uint16 size);
217  void readMainChannelsD6(Common::MemoryReadStreamEndian &stream, uint16 offset, uint16 size);
218 
219  void writeMainChannelsD6(Common::SeekableWriteStream *writeStream);
220 
221  void readChannelD7(Common::MemoryReadStreamEndian &stream, uint16 offset, uint16 size);
222  void readSpriteD7(Common::MemoryReadStreamEndian &stream, uint16 offset, uint16 size);
223  void readMainChannelsD7(Common::MemoryReadStreamEndian &stream, uint16 offset, uint16 size);
224 
225  void writeMainChannelsD7(Common::SeekableWriteStream *writeStream);
226 
227  Image::ImageDecoder *getImageFrom(uint16 spriteId);
228  Common::String readTextStream(Common::SeekableReadStreamEndian *textStream, TextCastMember *textCast);
229 
230 
231 public:
232  int _numChannels;
233  MainChannels _mainChannels;
234  Common::Array<Sprite *> _sprites;
235  Score *_score;
236  DirectorEngine *_vm;
237 };
238 
239 void readSpriteDataD2(Common::SeekableReadStreamEndian &stream, Sprite &sprite, uint32 startPosition, uint32 finishPosition);
240 void readSpriteDataD4(Common::SeekableReadStreamEndian &stream, Sprite &sprite, uint32 startPosition, uint32 finishPosition);
241 void readSpriteDataD5(Common::SeekableReadStreamEndian &stream, Sprite &sprite, uint32 startPosition, uint32 finishPosition);
242 void readSpriteDataD6(Common::SeekableReadStreamEndian &stream, Sprite &sprite, uint32 startPosition, uint32 finishPosition);
243 void readSpriteDataD7(Common::SeekableReadStreamEndian &stream, Sprite &sprite, uint32 startPosition, uint32 finishPosition);
244 
245 void writeSpriteDataD4(Common::SeekableWriteStream *writeStream, Sprite &sprite);
246 void writeSpriteDataD5(Common::SeekableWriteStream *writeStream, Sprite &sprite);
247 void writeSpriteDataD6(Common::SeekableWriteStream *writeStream, Sprite &sprite);
248 void writeSpriteDataD7(Common::SeekableWriteStream *writeStream, Sprite &sprite);
249 
250 } // End of namespace Director
251 
252 #endif
Definition: image_decoder.h:53
Definition: str.h:59
Definition: array.h:52
Definition: frame.h:65
Definition: rect.h:524
Definition: archive.h:36
Definition: memstream.h:103
Definition: algorithm.h:29
Definition: sprite.h:68
Definition: formatinfo.h:28
Definition: score.h:66
Definition: stream.h:351
Definition: frame.h:174
Definition: stream.h:944
Definition: director.h:157
Definition: text.h:33
Definition: movie_decoder.h:32
Definition: spriteinfo.h:43
Definition: frame.h:180
Definition: frame.h:101
Definition: types.h:419