aboutsummaryrefslogtreecommitdiff
path: root/engines/dreamweb/backdrop.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/dreamweb/backdrop.cpp')
-rw-r--r--engines/dreamweb/backdrop.cpp27
1 files changed, 14 insertions, 13 deletions
diff --git a/engines/dreamweb/backdrop.cpp b/engines/dreamweb/backdrop.cpp
index 065ce638d4..cf07ffcfe2 100644
--- a/engines/dreamweb/backdrop.cpp
+++ b/engines/dreamweb/backdrop.cpp
@@ -105,15 +105,15 @@ uint8 DreamGenContext::getMapAd(const uint8 *setData) {
return 1;
}
-void DreamGenContext::calcFrFrame() {
+void DreamGenContext::calcFrFrame(uint16 frame) {
uint8 width, height;
- calcFrFrame(&width, &height);
+ calcFrFrame(frame, &width, &height);
cl = width;
ch = height;
}
-void DreamGenContext::calcFrFrame(uint8* width, uint8* height) {
- const Frame *frame = (const Frame *)getSegment(data.word(kFrsegment)).ptr(data.word(kCurrentframe) * sizeof(Frame), sizeof(Frame));
+void DreamGenContext::calcFrFrame(uint16 frameNum, uint8* width, uint8* height) {
+ const Frame *frame = (const Frame *)getSegment(data.word(kFrsegment)).ptr(frameNum * sizeof(Frame), sizeof(Frame));
data.word(kSavesource) = data.word(kFramesad) + frame->ptr();
data.byte(kSavesize+0) = frame->width;
data.byte(kSavesize+1) = frame->height;
@@ -151,17 +151,16 @@ void DreamGenContext::showAllObs() {
if (getMapAd(setEntry->mapad) == 0)
continue;
uint8 currentFrame = setEntry->frames[0];
- data.word(kCurrentframe) = currentFrame;
if (currentFrame == 0xff)
continue;
- calcFrFrame();
+ calcFrFrame(currentFrame);
uint16 x, y;
finalFrame(&x, &y);
setEntry->index = setEntry->frames[0];
if ((setEntry->type == 0) && (setEntry->priority != 5) && (setEntry->priority != 6)) {
x += data.word(kMapadx);
y += data.word(kMapady);
- showFrame(frames, x, y, data.word(kCurrentframe), 0);
+ showFrame(frames, x, y, currentFrame, 0);
} else
makeBackOb(setEntry);
@@ -251,15 +250,16 @@ void DreamGenContext::showAllFree() {
for(size_t i = 0; i < 80; ++i) {
uint8 mapAd = getMapAd(freeObjects[i].mapad);
if (mapAd != 0) {
- data.word(kCurrentframe) = 3 * data.byte(kCurrentfree);
uint8 width, height;
- calcFrFrame(&width, &height);
+ uint16 currentFrame = 3 * data.byte(kCurrentfree);
+ calcFrFrame(currentFrame, &width, &height);
uint16 x, y;
finalFrame(&x, &y);
if ((width != 0) || (height != 0)) {
x += data.word(kMapadx);
y += data.word(kMapady);
- showFrame((Frame *)getSegment(data.word(kFrsegment)).ptr(0, 0), x, y, data.word(kCurrentframe) & 0xff, 0);
+ assert(currentFrame < 256);
+ showFrame((Frame *)getSegment(data.word(kFrsegment)).ptr(0, 0), x, y, currentFrame, 0);
ObjPos *objPos = (ObjPos *)getSegment(data.word(kBuffers)).ptr(data.word(kListpos), sizeof(ObjPos));
objPos->xMin = data.byte(kSavex);
objPos->yMin = data.byte(kSavey);
@@ -307,13 +307,14 @@ void DreamGenContext::showAllEx() {
continue;
if (getMapAd(object->mapad) == 0)
continue;
- data.word(kCurrentframe) = 3 * data.byte(kCurrentex);
uint8 width, height;
- calcFrFrame(&width, &height);
+ uint16 currentFrame = 3 * data.byte(kCurrentex);
+ calcFrFrame(currentFrame, &width, &height);
uint16 x, y;
finalFrame(&x, &y);
if ((width != 0) || (height != 0)) {
- showFrame((Frame *)getSegment(data.word(kFrsegment)).ptr(0, 0), x + data.word(kMapadx), y + data.word(kMapady), data.word(kCurrentframe) & 0xff, 0);
+ assert(currentFrame < 256);
+ showFrame((Frame *)getSegment(data.word(kFrsegment)).ptr(0, 0), x + data.word(kMapadx), y + data.word(kMapady), currentFrame, 0);
ObjPos *objPos = (ObjPos *)getSegment(data.word(kBuffers)).ptr(data.word(kListpos), sizeof(ObjPos));
objPos->xMin = data.byte(kSavex);
objPos->yMin = data.byte(kSavey);