aboutsummaryrefslogtreecommitdiff
path: root/engines/prince/animation.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/prince/animation.cpp')
-rw-r--r--engines/prince/animation.cpp34
1 files changed, 30 insertions, 4 deletions
diff --git a/engines/prince/animation.cpp b/engines/prince/animation.cpp
index f595e7af68..8edf9d04ee 100644
--- a/engines/prince/animation.cpp
+++ b/engines/prince/animation.cpp
@@ -29,10 +29,10 @@
namespace Prince {
bool Animation::loadFromStream(Common::SeekableReadStream &stream) {
- uint32 dataSize = stream.size();
- _data = (byte*) malloc(dataSize);
+ _dataSize = stream.size();
+ _data = (byte*) malloc(_dataSize);
- if(stream.read(_data, dataSize) != dataSize) {
+ if (stream.read(_data, _dataSize) != _dataSize) {
free(_data);
return false;
}
@@ -49,7 +49,7 @@ const Graphics::Surface * Animation::getSurface(uint16 frameIndex) {
return _frameList[frameIndex];
}
*/
-Animation::Animation() {
+Animation::Animation(): _data(NULL) {
}
@@ -61,6 +61,22 @@ Animation::~Animation() {
free(_data);
}
+void Animation::clear() {
+ if (_data != NULL) {
+ free(_data);
+ }
+}
+
+// TEMP
+/*
+int8 Animation::getZoom(uint16 offset) const {
+ return *(uint8*)(_data+offset);
+}
+*/
+int16 Animation::getZoom(uint16 offset) const {
+ return READ_LE_UINT16(_data + offset);
+}
+
int16 Animation::getLoopCount() const {
return READ_LE_UINT16(_data + 2);
}
@@ -93,6 +109,16 @@ int16 Animation::getPhaseFrameIndex(uint phaseIndex) const {
return READ_LE_UINT16(getPhaseEntry(phaseIndex) + 4);
}
+int16 Animation::getFrameWidth(uint frameIndex) const {
+ byte *frameData = _data + READ_LE_UINT32(_data + 16 + frameIndex * 4);
+ return READ_LE_UINT16(frameData + 0);
+}
+
+int16 Animation::getFrameHeight(uint frameIndex) const {
+ byte *frameData = _data + READ_LE_UINT32(_data + 16 + frameIndex * 4);
+ return READ_LE_UINT16(frameData + 2);
+}
+
Graphics::Surface *Animation::getFrame(uint frameIndex) {
byte *frameData = _data + READ_LE_UINT32(_data + 16 + frameIndex * 4);
int16 width = READ_LE_UINT16(frameData + 0);