@@ -65,12 +65,12 @@ Sprite::Sprite(Common::SeekableReadStream *_str) : _stream(_str) {
65
65
}
66
66
67
67
Sprite::~Sprite () {
68
- for (unsigned int i = 0 ; i < entries .size (); i++) {
69
- if (entries [i] && (entries [i]->type == se_Sprite || entries [i]->type == se_SpeechSprite))
70
- delete[] ((SpriteEntrySprite *)entries [i])->data ;
71
- else if (entries [i] && entries [i]->type == se_Audio)
72
- delete[] ((SpriteEntryAudio *)entries [i])->data ;
73
- delete entries [i];
68
+ for (unsigned int i = 0 ; i < _entries .size (); i++) {
69
+ if (_entries [i] && (_entries [i]->type == se_Sprite || _entries [i]->type == se_SpeechSprite))
70
+ delete[] ((SpriteEntrySprite *)_entries [i])->data ;
71
+ else if (_entries [i] && _entries [i]->type == se_Audio)
72
+ delete[] ((SpriteEntryAudio *)_entries [i])->data ;
73
+ delete _entries [i];
74
74
}
75
75
}
76
76
@@ -112,42 +112,44 @@ SpriteEntry *Sprite::parseBlock(char blockType[4], uint32 size) {
112
112
} else if (!strncmp (blockType, LIST, 4 )) {
113
113
// list of blocks
114
114
uint32 start = _stream->pos ();
115
- uint32 num_entries = _stream->readUint32LE ();
115
+ uint32 numEntries = _stream->readUint32LE ();
116
116
117
- assert (indexes .empty ()); // we assume there's only ever one LIST
118
- indexes .resize (num_entries );
117
+ assert (_indexes .empty ()); // we assume there's only ever one LIST
118
+ _indexes .resize (numEntries );
119
119
120
120
Common::Array<uint32> offsets;
121
- offsets.reserve (num_entries );
121
+ offsets.reserve (numEntries );
122
122
123
- while (num_entries --) {
123
+ while (numEntries --) {
124
124
uint32 offset = _stream->readUint32LE ();
125
125
// offset is relative to start of this block (start - 8)
126
- if (offset != 0 ) offset += start - 8 ;
126
+ if (offset != 0 )
127
+ offset += start - 8 ;
127
128
offsets.push_back (offset);
128
129
}
129
130
130
131
unsigned int i = 0 ;
131
132
while ((uint32)_stream->pos () < start + size) {
132
133
while (i < offsets.size ()) {
133
134
if ((uint32)_stream->pos () == offsets[i]) {
134
- indexes [i] = entries .size ();
135
+ _indexes [i] = _entries .size ();
135
136
i++;
136
137
} else if (offsets[i] == 0 ) {
137
- indexes [i] = ~0 ; // XXX
138
+ _indexes [i] = ~0 ; // XXX
138
139
i++;
139
140
} else {
140
141
assert ((uint32)_stream->pos () < offsets[i]);
141
142
break ;
142
143
}
143
144
}
144
- entries .push_back (readBlock ());
145
+ _entries .push_back (readBlock ());
145
146
}
146
147
assert (i == offsets.size ());
147
148
} else if (!strncmp (blockType, TIME, 4 )) {
148
149
// presumably a wait between frames, see update()
149
150
assert (size == 4 );
150
151
uint32 time = _stream->readUint32LE ();
152
+
151
153
return new SpriteEntryWait (time);
152
154
} else if (!strncmp (blockType, COMP, 4 )) {
153
155
// compressed image data
@@ -164,22 +166,27 @@ SpriteEntry *Sprite::parseBlock(char blockType[4], uint32 size) {
164
166
// change position of sprite/object?
165
167
uint32 xpos = _stream->readUint32LE ();
166
168
uint32 ypos = _stream->readUint32LE ();
169
+
167
170
return new SpriteEntryPosition (xpos, ypos);
168
171
} else if (!strncmp (blockType, STAT, 4 )) {
169
172
// switch to static mode
170
173
assert (size == 0 );
174
+
171
175
return new SpriteEntry (se_Static);
172
176
} else if (!strncmp (blockType, PAUS, 4 )) {
173
177
// pause animation
174
178
assert (size == 0 );
179
+
175
180
return new SpriteEntry (se_Pause);
176
181
} else if (!strncmp (blockType, EXIT, 4 )) {
177
182
// pause animation
178
183
assert (size == 0 );
184
+
179
185
return new SpriteEntry (se_Exit);
180
186
} else if (!strncmp (blockType, MARK, 4 )) {
181
187
// TODO: store info
182
188
assert (size == 0 );
189
+
183
190
return new SpriteEntry (se_Mark);
184
191
} else if (!strncmp (blockType, SETF, 4 )) {
185
192
assert (size == 4 );
@@ -192,11 +199,13 @@ SpriteEntry *Sprite::parseBlock(char blockType[4], uint32 size) {
192
199
assert (size == 8 );
193
200
uint32 rand_amt = _stream->readUint32LE ();
194
201
uint32 base = _stream->readUint32LE ();
202
+
195
203
return new SpriteEntryRandomWait (rand_amt, base);
196
204
} else if (!strncmp (blockType, JUMP, 4 )) {
197
205
// a jump to an animation
198
206
assert (size == 4 );
199
207
uint32 target = _stream->readUint32LE ();
208
+
200
209
return new SpriteEntryJump (target);
201
210
} else if (!strncmp (blockType, SCOM, 4 )) {
202
211
// compressed image data representing speech
@@ -214,6 +223,7 @@ SpriteEntry *Sprite::parseBlock(char blockType[4], uint32 size) {
214
223
} else if (!strncmp (blockType, SNDW, 4 )) {
215
224
// wait for sound to finish
216
225
assert (size == 0 );
226
+
217
227
return new SpriteEntry (se_WaitForSound);
218
228
} else if (!strncmp (blockType, SNDF, 4 )) {
219
229
// TODO: unknown is always 75, 95 or 100. volume?
@@ -228,10 +238,12 @@ SpriteEntry *Sprite::parseBlock(char blockType[4], uint32 size) {
228
238
} else if (!strncmp (blockType, PLAY, 4 )) {
229
239
// TODO: play sound
230
240
assert (size == 0 );
241
+
231
242
return new SpriteEntry (se_None); // XXX
232
243
} else if (!strncmp (blockType, MASK, 4 )) {
233
244
// switch to mask mode
234
245
assert (size == 0 );
246
+
235
247
return new SpriteEntry (se_Mask);
236
248
} else if (!strncmp (blockType, RPOS, 4 )) {
237
249
// relative position change(?)
@@ -250,15 +262,18 @@ SpriteEntry *Sprite::parseBlock(char blockType[4], uint32 size) {
250
262
} else if (!strncmp (blockType, SILE, 4 )) {
251
263
// stop+reset sound
252
264
assert (size == 0 );
265
+
253
266
return new SpriteEntry (se_Silent);
254
267
} else if (!strncmp (blockType, OBJS, 4 )) {
255
268
// set parent object state
256
269
assert (size == 4 );
257
270
uint32 state = _stream->readUint32LE ();
271
+
258
272
return new SpriteEntryStateSet (state);
259
273
} else if (!strncmp (blockType, BSON, 4 )) {
260
274
// used only in legaleze.spr
261
275
assert (size == 0 );
276
+
262
277
return new SpriteEntry (se_None); // XXX
263
278
} else {
264
279
error (" unknown sprite block type %c%c%c%c" , blockType[3 ], blockType[2 ], blockType[1 ], blockType[0 ]);
0 commit comments