diff options
author | Vincent Hamm | 2002-04-22 22:18:24 +0000 |
---|---|---|
committer | Vincent Hamm | 2002-04-22 22:18:24 +0000 |
commit | 7ca32ea5ebc2e6cf3ddddd59af7b0129e94f23b5 (patch) | |
tree | 65474700571f7c56f5429cda574ce8b85af1deae | |
parent | 9bd56e63acd73a19a7ce52c657d772266203d5f6 (diff) | |
download | scummvm-rg350-7ca32ea5ebc2e6cf3ddddd59af7b0129e94f23b5.tar.gz scummvm-rg350-7ca32ea5ebc2e6cf3ddddd59af7b0129e94f23b5.tar.bz2 scummvm-rg350-7ca32ea5ebc2e6cf3ddddd59af7b0129e94f23b5.zip |
Made great progress with the akos codec 5. Placement is now correct but still experiencing bugs with background reset. Also fixed missing dialogues in dig when the talking actor isn't in the room (fix not 100% correct yet).
svn-id: r4057
-rw-r--r-- | actor.cpp | 2 | ||||
-rw-r--r-- | akos.cpp | 55 | ||||
-rw-r--r-- | gfx.cpp | 4 |
3 files changed, 51 insertions, 10 deletions
@@ -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) @@ -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) @@ -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) { |