aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--actor.cpp2
-rw-r--r--akos.cpp55
-rw-r--r--gfx.cpp4
3 files changed, 51 insertions, 10 deletions
diff --git a/actor.cpp b/actor.cpp
index cd11d3396b..751f1a6528 100644
--- a/actor.cpp
+++ b/actor.cpp
@@ -1083,7 +1083,7 @@ void Scumm::actorTalk()
oldact = 0;
} else {
a = derefActorSafe(_actorToPrintStrFor, "actorTalk");
- if (a->room != _currentRoom) {
+ if (a->room != _currentRoom && !(_features & GF_AFTER_V7)) {
oldact = 0xFF;
} else {
if (!_keepText)
diff --git a/akos.cpp b/akos.cpp
index 241804d442..02ca019890 100644
--- a/akos.cpp
+++ b/akos.cpp
@@ -900,23 +900,64 @@ void Scumm::akos_codec5(AkosRenderer * ar)
VirtScreen *vs;
BompDrawData bdd;
- vs = &virtscr[1];
+ int mirror;
+ int moveX;
+ int moveY;
+ int left;
+ int var_20;
+ int max_width;
+ int right;
+ int top;
+ int bottom;
+
+ vs = &virtscr[0];
+
+ //setBlastObjectMode(ar->shadow_mode); // not implemented yet
+
+ mirror = ar->mirror;
+
+ moveX=ar->move_x_cur;
+ moveY=ar->move_y_cur;
+
+ if (!mirror)
+ {
+ left = (ar->x - moveX - ar->width) + 1;
+ }
+ else
+ {
+ left = ar->x + moveX -1;
+ }
+
+ var_20=0;
+ max_width = ar->outwidth;
+
+ right = left + ar->width - 1;
+ top = ar->y + moveY;
+ bottom = top + ar->height;
+
+ if(left < 0)
+ left = 0;
+
+ if(left > max_width)
+ left -= left - max_width;
+
+ ar->draw_top = top;
+ ar->draw_bottom = bottom;
+
+ updateDirtyRect(0, left, right+1, top, bottom+1, 1 << ar->dirty_id);
bdd.dataptr = ar->srcptr;
- bdd.out = ar->outptr - (ar->width/2) - (ar->height * ar->outwidth);
+ bdd.out = vs->screenPtr;
bdd.outheight = ar->outheight;
bdd.outwidth = ar->outwidth;
bdd.scale_x = 0xFF;
bdd.scale_y = 0xFF;
bdd.srcheight = ar->height;
bdd.srcwidth = ar->width;
- bdd.x = ar->x;
- bdd.y = ar->y;
+ bdd.x = left+1;
+ bdd.y = top;
drawBomp(&bdd,0,bdd.dataptr,0,0);
- updateDirtyRect(0, ar->x - ar->width /2, ar->x - ar->width/2+ar->width, ar->y -ar->height, ar->y, 0);
-
-
}
void Scumm::akos_codec16(AkosRenderer * ar)
diff --git a/gfx.cpp b/gfx.cpp
index c7c2aeebe7..f0d60ea375 100644
--- a/gfx.cpp
+++ b/gfx.cpp
@@ -2544,8 +2544,8 @@ int Scumm::remapPaletteColor(int r, int g, int b, uint threshold)
return bestitem;
}
-// param3=clipping ?
-// param2=scalling or not ?
+// param3= clipping
+// param2= mirror
// param1= never used ?
void Scumm::drawBomp(BompDrawData *bd, int param1, byte* dataPtr, int param2, int param3)
{