[Scummvm-cvs-logs] SF.net SVN: scummvm:[41398] scummvm/trunk/engines/kyra
lordhoto at users.sourceforge.net
lordhoto at users.sourceforge.net
Tue Jun 9 13:26:16 CEST 2009
Revision: 41398
http://scummvm.svn.sourceforge.net/scummvm/?rev=41398&view=rev
Author: lordhoto
Date: 2009-06-09 11:26:15 +0000 (Tue, 09 Jun 2009)
Log Message:
-----------
- Moved Screen_v2::copyWsaRect to Screen::copyWsaRect
- Made WSAMovie_v1::displayFrame code match the original
- Changed WSAMovieAmiga::displayFrame to use Screen::copyWsaRect too
- Got rid of '...' parameter usage in all WSA player classes
Modified Paths:
--------------
scummvm/trunk/engines/kyra/animator_mr.cpp
scummvm/trunk/engines/kyra/gui.cpp
scummvm/trunk/engines/kyra/gui_hof.cpp
scummvm/trunk/engines/kyra/gui_lol.cpp
scummvm/trunk/engines/kyra/gui_mr.cpp
scummvm/trunk/engines/kyra/kyra_hof.cpp
scummvm/trunk/engines/kyra/kyra_mr.cpp
scummvm/trunk/engines/kyra/lol.cpp
scummvm/trunk/engines/kyra/scene_lol.cpp
scummvm/trunk/engines/kyra/screen.cpp
scummvm/trunk/engines/kyra/screen.h
scummvm/trunk/engines/kyra/screen_v2.cpp
scummvm/trunk/engines/kyra/screen_v2.h
scummvm/trunk/engines/kyra/script_lok.cpp
scummvm/trunk/engines/kyra/script_lol.cpp
scummvm/trunk/engines/kyra/script_tim.cpp
scummvm/trunk/engines/kyra/seqplayer.cpp
scummvm/trunk/engines/kyra/sequences_hof.cpp
scummvm/trunk/engines/kyra/sequences_lok.cpp
scummvm/trunk/engines/kyra/sequences_lol.cpp
scummvm/trunk/engines/kyra/text_mr.cpp
scummvm/trunk/engines/kyra/wsamovie.cpp
scummvm/trunk/engines/kyra/wsamovie.h
Modified: scummvm/trunk/engines/kyra/animator_mr.cpp
===================================================================
--- scummvm/trunk/engines/kyra/animator_mr.cpp 2009-06-09 11:07:18 UTC (rev 41397)
+++ scummvm/trunk/engines/kyra/animator_mr.cpp 2009-06-09 11:26:15 UTC (rev 41398)
@@ -119,7 +119,7 @@
flags |= 0x8000;
x = obj->xPos2 - _sceneAnimMovie[obj->animNum]->xAdd();
y = obj->yPos2 - _sceneAnimMovie[obj->animNum]->yAdd();
- _sceneAnimMovie[obj->animNum]->displayFrame(obj->shapeIndex3, 2, x, y, flags | layer);
+ _sceneAnimMovie[obj->animNum]->displayFrame(obj->shapeIndex3, 2, x, y, flags | layer, 0, 0);
}
}
}
Modified: scummvm/trunk/engines/kyra/gui.cpp
===================================================================
--- scummvm/trunk/engines/kyra/gui.cpp 2009-06-09 11:07:18 UTC (rev 41397)
+++ scummvm/trunk/engines/kyra/gui.cpp 2009-06-09 11:26:15 UTC (rev 41398)
@@ -404,7 +404,7 @@
if (now > _nextUpdate) {
_nextUpdate = now + _anim.delay * _vm->tickLength();
- _anim.anim->displayFrame(_animIntern.curFrame, 0, 0, 0);
+ _anim.anim->displayFrame(_animIntern.curFrame, 0, 0, 0, 0, 0, 0);
_animIntern.curFrame += _animIntern.direction ;
if (_animIntern.curFrame < _anim.startFrame) {
_animIntern.curFrame = _anim.startFrame;
Modified: scummvm/trunk/engines/kyra/gui_hof.cpp
===================================================================
--- scummvm/trunk/engines/kyra/gui_hof.cpp 2009-06-09 11:07:18 UTC (rev 41397)
+++ scummvm/trunk/engines/kyra/gui_hof.cpp 2009-06-09 11:26:15 UTC (rev 41398)
@@ -272,7 +272,7 @@
}
void KyraEngine_HoF::scrollInventoryWheel() {
- WSAMovie_v2 movie(this, _screen);
+ WSAMovie_v2 movie(this);
movie.open("INVWHEEL.WSA", 0, 0);
int frames = movie.opened() ? movie.frames() : 6;
memcpy(_screenBuffer, _screen->getCPagePtr(2), 64000);
@@ -287,7 +287,7 @@
for (int i = 0; i <= 6 && !breakFlag; ++i) {
if (movie.opened()) {
_screen->hideMouse();
- movie.displayFrame(i % frames, 0, 0, 0, 0);
+ movie.displayFrame(i % frames, 0, 0, 0, 0, 0, 0);
_screen->showMouse();
_screen->updateScreen();
}
Modified: scummvm/trunk/engines/kyra/gui_lol.cpp
===================================================================
--- scummvm/trunk/engines/kyra/gui_lol.cpp 2009-06-09 11:07:18 UTC (rev 41397)
+++ scummvm/trunk/engines/kyra/gui_lol.cpp 2009-06-09 11:26:15 UTC (rev 41398)
@@ -1364,7 +1364,7 @@
(_itemsInPlay[hItem].itemPropertyIndex == 220 || _itemsInPlay[slotItem].itemPropertyIndex == 220)) {
// merge ruby of truth
- WSAMovie_v2 *wsa = new WSAMovie_v2(this, _screen);
+ WSAMovie_v2 *wsa = new WSAMovie_v2(this);
wsa->open("truth.wsa", 0, 0);
_screen->hideMouse();
@@ -1377,7 +1377,7 @@
for (int i = 0; i < 25; i++) {
uint32 delayTimer = _system->getMillis() + 7 * _tickLength;
_screen->copyRegion(button->x, button->y - 3, 0, 0, 25, 27, 2, 2);
- wsa->displayFrame(i, 2, 0, 0, 0x4000);
+ wsa->displayFrame(i, 2, 0, 0, 0x4000, 0, 0);
_screen->copyRegion(0, 0, button->x, button->y - 3, 25, 27, 2, 0);
_screen->updateScreen();
delayUntil(delayTimer);
Modified: scummvm/trunk/engines/kyra/gui_mr.cpp
===================================================================
--- scummvm/trunk/engines/kyra/gui_mr.cpp 2009-06-09 11:07:18 UTC (rev 41397)
+++ scummvm/trunk/engines/kyra/gui_mr.cpp 2009-06-09 11:26:15 UTC (rev 41398)
@@ -352,10 +352,10 @@
frame = 13;
if (page == 0) {
- _invWsa->displayFrame(frame, 0, 0, 0, 0);
+ _invWsa->displayFrame(frame, 0, 0, 0, 0, 0, 0);
_screen->updateScreen();
} else if (page == 30) {
- _invWsa->displayFrame(frame, 2, 0, -144, 0);
+ _invWsa->displayFrame(frame, 2, 0, -144, 0, 0, 0);
}
_invWsaFrame = frame;
@@ -685,10 +685,10 @@
loadAlbumPageWSA();
if (_album.leftPage.wsa->opened())
- _album.leftPage.wsa->displayFrame(_album.leftPage.curFrame, 2, _albumWSAX[_album.nextPage+0], _albumWSAY[_album.nextPage+0], 0x4000);
+ _album.leftPage.wsa->displayFrame(_album.leftPage.curFrame, 2, _albumWSAX[_album.nextPage+0], _albumWSAY[_album.nextPage+0], 0x4000, 0, 0);
if (_album.rightPage.wsa->opened())
- _album.rightPage.wsa->displayFrame(_album.rightPage.curFrame, 2, _albumWSAX[_album.nextPage+1], _albumWSAY[_album.nextPage+1], 0x4000);
+ _album.rightPage.wsa->displayFrame(_album.rightPage.curFrame, 2, _albumWSAX[_album.nextPage+1], _albumWSAY[_album.nextPage+1], 0x4000, 0, 0);
printAlbumPageText();
_screen->copyRegion(0, 0, 0, 0, 320, 200, 2, 0, Screen::CR_NO_P_CHECK);
@@ -843,10 +843,10 @@
loadAlbumPageWSA();
if (_album.leftPage.wsa->opened())
- _album.leftPage.wsa->displayFrame(_album.leftPage.curFrame, 2, _albumWSAX[_album.nextPage+0], _albumWSAY[_album.nextPage+0], 0x4000);
+ _album.leftPage.wsa->displayFrame(_album.leftPage.curFrame, 2, _albumWSAX[_album.nextPage+0], _albumWSAY[_album.nextPage+0], 0x4000, 0, 0);
if (_album.rightPage.wsa->opened())
- _album.rightPage.wsa->displayFrame(_album.rightPage.curFrame, 2, _albumWSAX[_album.nextPage+1], _albumWSAY[_album.nextPage+1], 0x4000);
+ _album.rightPage.wsa->displayFrame(_album.rightPage.curFrame, 2, _albumWSAX[_album.nextPage+1], _albumWSAY[_album.nextPage+1], 0x4000, 0, 0);
printAlbumPageText();
@@ -899,7 +899,7 @@
nextRun = _album.leftPage.timer + 5 * _tickLength;
if (nextRun < _system->getMillis() && _album.leftPage.wsa->opened()) {
- _album.leftPage.wsa->displayFrame(_album.leftPage.curFrame, 2, _albumWSAX[_album.nextPage+0], _albumWSAY[_album.nextPage+0], 0x4000);
+ _album.leftPage.wsa->displayFrame(_album.leftPage.curFrame, 2, _albumWSAX[_album.nextPage+0], _albumWSAY[_album.nextPage+0], 0x4000, 0, 0);
_screen->copyRegion(40, 17, 40, 17, 87, 73, 2, 0, Screen::CR_NO_P_CHECK);
++_album.leftPage.curFrame;
@@ -918,7 +918,7 @@
nextRun = _album.rightPage.timer + 5 * _tickLength;
if (nextRun < _system->getMillis() && _album.rightPage.wsa->opened()) {
- _album.rightPage.wsa->displayFrame(_album.rightPage.curFrame, 2, _albumWSAX[_album.nextPage+1], _albumWSAY[_album.nextPage+1], 0x4000);
+ _album.rightPage.wsa->displayFrame(_album.rightPage.curFrame, 2, _albumWSAX[_album.nextPage+1], _albumWSAY[_album.nextPage+1], 0x4000, 0, 0);
_screen->copyRegion(194, 20, 194, 20, 85, 69, 2, 0, Screen::CR_NO_P_CHECK);
++_album.rightPage.curFrame;
@@ -936,13 +936,13 @@
void KyraEngine_MR::albumAnim1() {
for (int i = 6; i >= 3; --i) {
albumRestoreRect();
- _album.wsa->displayFrame(i, 2, -100, 90, 0x4000);
+ _album.wsa->displayFrame(i, 2, -100, 90, 0x4000, 0, 0);
albumUpdateRect();
delayWithTicks(1);
}
albumRestoreRect();
- _album.wsa->displayFrame(14, 2, -100, 90, 0x4000);
+ _album.wsa->displayFrame(14, 2, -100, 90, 0x4000, 0, 0);
albumUpdateRect();
delayWithTicks(1);
}
@@ -950,7 +950,7 @@
void KyraEngine_MR::albumAnim2() {
for (int i = 3; i <= 6; ++i) {
albumRestoreRect();
- _album.wsa->displayFrame(i, 2, -100, 90, 0x4000);
+ _album.wsa->displayFrame(i, 2, -100, 90, 0x4000, 0, 0);
albumUpdateRect();
delayWithTicks(1);
}
Modified: scummvm/trunk/engines/kyra/kyra_hof.cpp
===================================================================
--- scummvm/trunk/engines/kyra/kyra_hof.cpp 2009-06-09 11:07:18 UTC (rev 41397)
+++ scummvm/trunk/engines/kyra/kyra_hof.cpp 2009-06-09 11:26:15 UTC (rev 41398)
@@ -381,10 +381,10 @@
memset(_sceneAnims, 0, sizeof(_sceneAnims));
for (int i = 0; i < ARRAYSIZE(_sceneAnimMovie); ++i)
- _sceneAnimMovie[i] = new WSAMovie_v2(this, _screen);
+ _sceneAnimMovie[i] = new WSAMovie_v2(this);
memset(_wsaSlots, 0, sizeof(_wsaSlots));
for (int i = 0; i < ARRAYSIZE(_wsaSlots); ++i)
- _wsaSlots[i] = new WSAMovie_v2(this, _screen);
+ _wsaSlots[i] = new WSAMovie_v2(this);
_screen->_curPage = 0;
@@ -1550,7 +1550,7 @@
wsaFlags |= 2;
if (!_invWsa.wsa)
- _invWsa.wsa = new WSAMovie_v2(this, _screen);
+ _invWsa.wsa = new WSAMovie_v2(this);
if (!_invWsa.wsa->open(filename, wsaFlags, 0))
error("Couldn't open inventory WSA file '%s'", filename);
Modified: scummvm/trunk/engines/kyra/kyra_mr.cpp
===================================================================
--- scummvm/trunk/engines/kyra/kyra_mr.cpp 2009-06-09 11:07:18 UTC (rev 41397)
+++ scummvm/trunk/engines/kyra/kyra_mr.cpp 2009-06-09 11:26:15 UTC (rev 41398)
@@ -274,14 +274,14 @@
for (int i = 0; i < 64 && !shouldQuit(); ++i) {
uint32 nextRun = _system->getMillis() + 3 * _tickLength;
- _menuAnim->displayFrame(i, 0, 0, 0, 0);
+ _menuAnim->displayFrame(i, 0, 0, 0, 0, 0, 0);
_screen->updateScreen();
delayUntil(nextRun);
}
for (int i = 64; i > 29 && !shouldQuit(); --i) {
uint32 nextRun = _system->getMillis() + 3 * _tickLength;
- _menuAnim->displayFrame(i, 0, 0, 0, 0);
+ _menuAnim->displayFrame(i, 0, 0, 0, 0, 0, 0);
_screen->updateScreen();
delayUntil(nextRun);
}
@@ -327,7 +327,7 @@
}
void KyraEngine_MR::initMainMenu() {
- _menuAnim = new WSAMovie_v2(this, _screen);
+ _menuAnim = new WSAMovie_v2(this);
_menuAnim->open("REVENGE.WSA", 1, _screen->getPalette(0));
memset(_screen->getPalette(0), 0, 3);
@@ -541,11 +541,11 @@
}
void KyraEngine_MR::startup() {
- _album.wsa = new WSAMovie_v2(this, _screen);
+ _album.wsa = new WSAMovie_v2(this);
assert(_album.wsa);
- _album.leftPage.wsa = new WSAMovie_v2(this, _screen);
+ _album.leftPage.wsa = new WSAMovie_v2(this);
assert(_album.leftPage.wsa);
- _album.rightPage.wsa = new WSAMovie_v2(this, _screen);
+ _album.rightPage.wsa = new WSAMovie_v2(this);
assert(_album.rightPage.wsa);
musicUpdate(0);
@@ -598,7 +598,7 @@
for (int i = 0; i < 16; ++i) {
_sceneAnims[i].flags = 0;
- _sceneAnimMovie[i] = new WSAMovie_v2(this, _screen);
+ _sceneAnimMovie[i] = new WSAMovie_v2(this);
assert(_sceneAnimMovie[i]);
}
@@ -655,7 +655,7 @@
musicUpdate(0);
runStartupScript(1, 0);
_res->exists("MOODOMTR.WSA", true);
- _invWsa = new WSAMovie_v2(this, _screen);
+ _invWsa = new WSAMovie_v2(this);
assert(_invWsa);
_invWsa->open("MOODOMTR.WSA", 1, 0);
_invWsaFrame = 6;
Modified: scummvm/trunk/engines/kyra/lol.cpp
===================================================================
--- scummvm/trunk/engines/kyra/lol.cpp 2009-06-09 11:07:18 UTC (rev 41397)
+++ scummvm/trunk/engines/kyra/lol.cpp 2009-06-09 11:26:15 UTC (rev 41398)
@@ -1919,7 +1919,7 @@
}
int LoLEngine::processMagicSpark(int charNum, int spellLevel) {
- WSAMovie_v2 *mov = new WSAMovie_v2(this, _screen);
+ WSAMovie_v2 *mov = new WSAMovie_v2(this);
_screen->copyPage(0, 12);
mov->open("spark1.wsa", 0, 0);
@@ -2156,7 +2156,7 @@
int sX = 112;
int sY = 0;
- WSAMovie_v2 *mov = new WSAMovie_v2(this, _screen);
+ WSAMovie_v2 *mov = new WSAMovie_v2(this);
if (spellLevel == 0) {
sX = 0;
@@ -2417,7 +2417,7 @@
int cp = _screen->setCurPage(2);
_screen->copyPage(0, 12);
- WSAMovie_v2 *mov = new WSAMovie_v2(this, _screen);
+ WSAMovie_v2 *mov = new WSAMovie_v2(this);
mov->open("hand.wsa", 1, 0);
if (!mov->opened())
error("Hand: Unable to load HAND.WSA");
@@ -2509,7 +2509,7 @@
char wsafile[13];
snprintf(wsafile, 13, "mists%0d.wsa", spellLevel + 1);
- WSAMovie_v2 *mov = new WSAMovie_v2(this, _screen);
+ WSAMovie_v2 *mov = new WSAMovie_v2(this);
mov->open(wsafile, 1, 0);
if (!mov->opened())
error("Mist: Unable to load mists.wsa");
@@ -2541,7 +2541,7 @@
char wsafile[13];
snprintf(wsafile, 13, "litning%d.wsa", spellLevel + 1);
- WSAMovie_v2 *mov = new WSAMovie_v2(this, _screen);
+ WSAMovie_v2 *mov = new WSAMovie_v2(this);
mov->open(wsafile, 1, 0);
if (!mov->opened())
error("Litning: Unable to load litning.wsa");
@@ -2570,7 +2570,7 @@
int cp = _screen->setCurPage(2);
_screen->copyPage(0, 12);
- WSAMovie_v2 *mov = new WSAMovie_v2(this, _screen);
+ WSAMovie_v2 *mov = new WSAMovie_v2(this);
int numFrames = mov->open("fog.wsa", 0, 0);
if (!mov->opened())
error("Fog: Unable to load fog.wsa");
@@ -2646,7 +2646,7 @@
_monsters[destIds[i]].fightCurTick = destTicks[i];
}
- WSAMovie_v2 *mov = new WSAMovie_v2(this, _screen);
+ WSAMovie_v2 *mov = new WSAMovie_v2(this);
mov->open("swarm.wsa", 0, 0);
if (!mov->opened())
@@ -2734,7 +2734,7 @@
_screen->copyPage(0, 2);
_screen->copyPage(2, 12);
- WSAMovie_v2 *mov = new WSAMovie_v2(this, _screen);
+ WSAMovie_v2 *mov = new WSAMovie_v2(this);
mov->open("guardian.wsa", 0, 0);
if (!mov->opened())
error("Guardian: Unable to load guardian.wsa");
@@ -2871,7 +2871,7 @@
snd_playSoundEffect(_updateSpellBookAnimData[(spell << 2) + 3], -1);
snd_playSoundEffect(95, -1);
- WSAMovie_v2 *mov = new WSAMovie_v2(this, _screen);
+ WSAMovie_v2 *mov = new WSAMovie_v2(this);
mov->open("getspell.wsa", 0, 0);
if (!mov->opened())
@@ -3529,7 +3529,7 @@
_screen->copyPage(0, 12);
snd_playSoundEffect(148, -1);
- WSAMovie_v2 *mov = new WSAMovie_v2(this, _screen);
+ WSAMovie_v2 *mov = new WSAMovie_v2(this);
int numFrames = mov->open("viper.wsa", 1, 0);
if (!mov->opened())
error("Viper: Unable to load viper.wsa");
@@ -3579,7 +3579,7 @@
gui_drawScene(2);
_screen->copyPage(2, 10);
- WSAMovie_v2 *mov = new WSAMovie_v2(this, _screen);
+ WSAMovie_v2 *mov = new WSAMovie_v2(this);
int numFrames = mov->open("shatter.wsa", 1, 0);
if (!mov->opened())
error("Shatter: Unable to load shatter.wsa");
Modified: scummvm/trunk/engines/kyra/scene_lol.cpp
===================================================================
--- scummvm/trunk/engines/kyra/scene_lol.cpp 2009-06-09 11:07:18 UTC (rev 41397)
+++ scummvm/trunk/engines/kyra/scene_lol.cpp 2009-06-09 11:26:15 UTC (rev 41398)
@@ -1312,7 +1312,7 @@
uint8 *p2 = _screen->getPalette(3);
if (dist) {
- WSAMovie_v2 *mov = new WSAMovie_v2(this, _screen);
+ WSAMovie_v2 *mov = new WSAMovie_v2(this);
char file[13];
snprintf(file, 13, "gasexp%0d.wsa", dist);
mov->open(file, 1, 0);
Modified: scummvm/trunk/engines/kyra/screen.cpp
===================================================================
--- scummvm/trunk/engines/kyra/screen.cpp 2009-06-09 11:07:18 UTC (rev 41397)
+++ scummvm/trunk/engines/kyra/screen.cpp 2009-06-09 11:26:15 UTC (rev 41398)
@@ -339,6 +339,148 @@
clearOverlayPage(_curPage);
}
+void Screen::copyWsaRect(int x, int y, int w, int h, int dimState, int plotFunc, const uint8 *src,
+ int unk1, const uint8 *unkPtr1, const uint8 *unkPtr2) {
+ uint8 *dstPtr = getPagePtr(_curPage);
+ uint8 *origDst = dstPtr;
+
+ const ScreenDim *dim = getScreenDim(dimState);
+ int dimX1 = dim->sx << 3;
+ int dimX2 = dim->w << 3;
+ dimX2 += dimX1;
+
+ int dimY1 = dim->sy;
+ int dimY2 = dim->h;
+ dimY2 += dimY1;
+
+ int temp = y - dimY1;
+ if (temp < 0) {
+ if ((temp += h) <= 0)
+ return;
+ else {
+ SWAP(temp, h);
+ y += temp - h;
+ src += (temp - h) * w;
+ }
+ }
+
+ temp = dimY2 - y;
+ if (temp <= 0)
+ return;
+
+ if (temp < h)
+ h = temp;
+
+ int srcOffset = 0;
+ temp = x - dimX1;
+ if (temp < 0) {
+ temp = -temp;
+ srcOffset = temp;
+ x += temp;
+ w -= temp;
+ }
+
+ int srcAdd = 0;
+
+ temp = dimX2 - x;
+ if (temp <= 0)
+ return;
+
+ if (temp < w) {
+ SWAP(w, temp);
+ temp -= w;
+ srcAdd = temp;
+ }
+
+ dstPtr += y * SCREEN_W + x;
+ uint8 *dst = dstPtr;
+
+ if (_curPage == 0 || _curPage == 1)
+ addDirtyRect(x, y, w, h);
+
+ clearOverlayRect(_curPage, x, y, w, h);
+
+ temp = h;
+ int curY = y;
+ while (h--) {
+ src += srcOffset;
+ ++curY;
+ int cW = w;
+
+ switch (plotFunc) {
+ case 0:
+ memcpy(dst, src, cW);
+ dst += cW; src += cW;
+ break;
+
+ case 1:
+ while (cW--) {
+ uint8 d = *src++;
+ uint8 t = unkPtr1[d];
+ if (t != 0xFF)
+ d = unkPtr2[*dst + (t << 8)];
+ *dst++ = d;
+ }
+ break;
+
+ case 4:
+ while (cW--) {
+ uint8 d = *src++;
+ if (d)
+ *dst = d;
+ ++dst;
+ }
+ break;
+
+ case 5:
+ while (cW--) {
+ uint8 d = *src++;
+ if (d) {
+ uint8 t = unkPtr1[d];
+ if (t != 0xFF)
+ d = unkPtr2[*dst + (t << 8)];
+ *dst = d;
+ }
+ ++dst;
+ }
+ break;
+
+ case 8:
+ case 9:
+ while (cW--) {
+ uint8 d = *src++;
+ uint8 t = _shapePages[0][dst - origDst] & 7;
+ if (unk1 < t && (curY > _maskMinY && curY < _maskMaxY))
+ d = _shapePages[1][dst - origDst];
+ *dst++ = d;
+ }
+ break;
+
+ case 12:
+ case 13:
+ while (cW--) {
+ uint8 d = *src++;
+ if (d) {
+ uint8 t = _shapePages[0][dst - origDst] & 7;
+ if (unk1 < t && (curY > _maskMinY && curY < _maskMaxY))
+ d = _shapePages[1][dst - origDst];
+ *dst++ = d;
+ } else {
+ d = _shapePages[1][dst - origDst];
+ *dst++ = d;
+ }
+ }
+ break;
+
+ default:
+ break;
+ }
+
+ dst = (dstPtr += SCREEN_W);
+ src += srcAdd;
+ }
+}
+
uint8 Screen::getPagePixel(int pageNum, int x, int y) {
assert(pageNum < SCREEN_PAGE_NUM);
assert(x >= 0 && x < SCREEN_W && y >= 0 && y < SCREEN_H);
Modified: scummvm/trunk/engines/kyra/screen.h
===================================================================
--- scummvm/trunk/engines/kyra/screen.h 2009-06-09 11:07:18 UTC (rev 41397)
+++ scummvm/trunk/engines/kyra/screen.h 2009-06-09 11:26:15 UTC (rev 41398)
@@ -112,6 +112,9 @@
int setCurPage(int pageNum);
void clearCurPage();
+ void copyWsaRect(int x, int y, int w, int h, int dimState, int plotFunc, const uint8 *src,
+ int unk1, const uint8 *unkPtr1, const uint8 *unkPtr2);
+
// page 0 functions
void copyToPage0(int y, int h, uint8 page, uint8 *seqBuf);
void shakeScreen(int times);
Modified: scummvm/trunk/engines/kyra/screen_v2.cpp
===================================================================
--- scummvm/trunk/engines/kyra/screen_v2.cpp 2009-06-09 11:07:18 UTC (rev 41397)
+++ scummvm/trunk/engines/kyra/screen_v2.cpp 2009-06-09 11:26:15 UTC (rev 41398)
@@ -137,148 +137,6 @@
}
}
-void Screen_v2::copyWsaRect(int x, int y, int w, int h, int dimState, int plotFunc, const uint8 *src,
- int unk1, const uint8 *unkPtr1, const uint8 *unkPtr2) {
- uint8 *dstPtr = getPagePtr(_curPage);
- uint8 *origDst = dstPtr;
-
- const ScreenDim *dim = getScreenDim(dimState);
- int dimX1 = dim->sx << 3;
- int dimX2 = dim->w << 3;
- dimX2 += dimX1;
-
- int dimY1 = dim->sy;
- int dimY2 = dim->h;
- dimY2 += dimY1;
-
- int temp = y - dimY1;
- if (temp < 0) {
- if ((temp += h) <= 0)
- return;
- else {
- SWAP(temp, h);
- y += temp - h;
- src += (temp - h) * w;
- }
- }
-
- temp = dimY2 - y;
- if (temp <= 0)
- return;
-
- if (temp < h)
- h = temp;
-
- int srcOffset = 0;
- temp = x - dimX1;
- if (temp < 0) {
- temp = -temp;
- srcOffset = temp;
- x += temp;
- w -= temp;
- }
-
- int srcAdd = 0;
-
- temp = dimX2 - x;
- if (temp <= 0)
- return;
-
- if (temp < w) {
- SWAP(w, temp);
- temp -= w;
- srcAdd = temp;
- }
-
- dstPtr += y * SCREEN_W + x;
- uint8 *dst = dstPtr;
-
- if (_curPage == 0 || _curPage == 1)
- addDirtyRect(x, y, w, h);
-
- clearOverlayRect(_curPage, x, y, w, h);
-
- temp = h;
- int curY = y;
- while (h--) {
- src += srcOffset;
- ++curY;
- int cW = w;
-
- switch (plotFunc) {
- case 0:
- memcpy(dst, src, cW);
- dst += cW; src += cW;
- break;
-
- case 1:
- while (cW--) {
- uint8 d = *src++;
- uint8 t = unkPtr1[d];
- if (t != 0xFF)
- d = unkPtr2[*dst + (t << 8)];
- *dst++ = d;
- }
- break;
-
- case 4:
- while (cW--) {
- uint8 d = *src++;
- if (d)
- *dst = d;
- ++dst;
- }
- break;
-
- case 5:
- while (cW--) {
- uint8 d = *src++;
- if (d) {
- uint8 t = unkPtr1[d];
- if (t != 0xFF)
- d = unkPtr2[*dst + (t << 8)];
- *dst = d;
- }
- ++dst;
- }
- break;
-
- case 8:
- case 9:
- while (cW--) {
- uint8 d = *src++;
- uint8 t = _shapePages[0][dst - origDst] & 7;
- if (unk1 < t && (curY > _maskMinY && curY < _maskMaxY))
- d = _shapePages[1][dst - origDst];
- *dst++ = d;
- }
- break;
-
- case 12:
- case 13:
- while (cW--) {
- uint8 d = *src++;
- if (d) {
- uint8 t = _shapePages[0][dst - origDst] & 7;
- if (unk1 < t && (curY > _maskMinY && curY < _maskMaxY))
- d = _shapePages[1][dst - origDst];
- *dst++ = d;
- } else {
- d = _shapePages[1][dst - origDst];
- *dst++ = d;
- }
- }
- break;
-
- default:
- break;
- }
-
- dst = (dstPtr += SCREEN_W);
- src += srcAdd;
- }
-}
-
const uint8 *Screen_v2::getPtrToShape(const uint8 *shpFile, int shape) {
uint16 shapes = READ_LE_UINT16(shpFile);
Modified: scummvm/trunk/engines/kyra/screen_v2.h
===================================================================
--- scummvm/trunk/engines/kyra/screen_v2.h 2009-06-09 11:07:18 UTC (rev 41397)
+++ scummvm/trunk/engines/kyra/screen_v2.h 2009-06-09 11:26:15 UTC (rev 41398)
@@ -37,9 +37,6 @@
~Screen_v2();
// screen page handling
- void copyWsaRect(int x, int y, int w, int h, int dimState, int plotFunc, const uint8 *src,
- int unk1, const uint8 *unkPtr1, const uint8 *unkPtr2);
-
void checkedPageUpdate(int srcPage, int dstPage);
// palette handling
Modified: scummvm/trunk/engines/kyra/script_lok.cpp
===================================================================
--- scummvm/trunk/engines/kyra/script_lok.cpp 2009-06-09 11:07:18 UTC (rev 41397)
+++ scummvm/trunk/engines/kyra/script_lok.cpp 2009-06-09 11:26:15 UTC (rev 41398)
@@ -427,7 +427,7 @@
int wsaFrame = 0;
while (running) {
- _movieObjects[wsaIndex]->displayFrame(wsaFrame++, 0, xpos, ypos);
+ _movieObjects[wsaIndex]->displayFrame(wsaFrame++, 0, xpos, ypos, 0, 0, 0);
_animator->_updateScreen = true;
if (wsaFrame >= _movieObjects[wsaIndex]->frames())
running = false;
@@ -458,7 +458,7 @@
int waitTime = stackPos(3);
int wsaIndex = stackPos(4);
_screen->hideMouse();
- _movieObjects[wsaIndex]->displayFrame(frame, 0, xpos, ypos);
+ _movieObjects[wsaIndex]->displayFrame(frame, 0, xpos, ypos, 0, 0, 0);
_animator->_updateScreen = true;
uint32 continueTime = waitTime * _tickLength + _system->getMillis();
while (_system->getMillis() < continueTime) {
@@ -500,7 +500,7 @@
_screen->hideMouse();
for (; startFrame <= endFrame; ++startFrame) {
uint32 nextRun = _system->getMillis() + delayTime * _tickLength;
- _movieObjects[wsaIndex]->displayFrame(startFrame, 0, xpos, ypos);
+ _movieObjects[wsaIndex]->displayFrame(startFrame, 0, xpos, ypos, 0, 0, 0);
_animator->_updateScreen = true;
while (_system->getMillis() < nextRun) {
_sprites->updateSceneAnims();
@@ -682,7 +682,7 @@
_screen->hideMouse();
uint32 continueTime = waitTime * _tickLength + _system->getMillis();
- _movieObjects[wsaIndex]->displayFrame(frame, 2, xpos, ypos);
+ _movieObjects[wsaIndex]->displayFrame(frame, 2, xpos, ypos, 0, 0, 0);
_animator->_updateScreen = true;
while (_system->getMillis() < continueTime) {
_sprites->updateSceneAnims();
@@ -753,7 +753,7 @@
// what shouldn't happen. So we're not updating the screen for this special
// case too.
if (startFrame == 18 && endFrame == 18 && _currentRoom == 45) {
- _movieObjects[wsaIndex]->displayFrame(18, 0, xpos, ypos);
+ _movieObjects[wsaIndex]->displayFrame(18, 0, xpos, ypos, 0, 0, 0);
delay(waitTime * _tickLength);
return 0;
}
@@ -765,7 +765,7 @@
int frame = startFrame;
while (endFrame >= frame) {
uint32 continueTime = waitTime * _tickLength + _system->getMillis();
- _movieObjects[wsaIndex]->displayFrame(frame, 0, xpos, ypos);
+ _movieObjects[wsaIndex]->displayFrame(frame, 0, xpos, ypos, 0, 0, 0);
if (waitTime)
_animator->_updateScreen = true;
while (_system->getMillis() < continueTime) {
@@ -783,7 +783,7 @@
int frame = startFrame;
while (endFrame <= frame) {
uint32 continueTime = waitTime * _tickLength + _system->getMillis();
- _movieObjects[wsaIndex]->displayFrame(frame, 0, xpos, ypos);
+ _movieObjects[wsaIndex]->displayFrame(frame, 0, xpos, ypos, 0, 0, 0);
if (waitTime)
_animator->_updateScreen = true;
while (_system->getMillis() < continueTime) {
@@ -1276,7 +1276,7 @@
if (code == 14)
snd_playSoundEffect(0x73);
- amulet.displayFrame(code, 0, 224, 152);
+ amulet.displayFrame(code, 0, 224, 152, 0, 0, 0);
_animator->_updateScreen = true;
while (_system->getMillis() < nextTime) {
Modified: scummvm/trunk/engines/kyra/script_lol.cpp
===================================================================
--- scummvm/trunk/engines/kyra/script_lol.cpp 2009-06-09 11:07:18 UTC (rev 41397)
+++ scummvm/trunk/engines/kyra/script_lol.cpp 2009-06-09 11:26:15 UTC (rev 41398)
@@ -2126,7 +2126,7 @@
int LoLEngine::olol_restoreMagicShroud(EMCState *script) {
debugC(3, kDebugLevelScriptFuncs, "LoLEngine::olol_restoreMagicShroud(%p)", (const void *)script);
- WSAMovie_v2 *mov = new WSAMovie_v2(this, _screen);
+ WSAMovie_v2 *mov = new WSAMovie_v2(this);
mov->open("DARKLITE.WSA", 2, 0);
if (!mov->opened())
return 0;
@@ -2148,7 +2148,7 @@
for (int i = 0; i < 21; i++) {
uint32 etime = _system->getMillis() + 20 * _tickLength;
- mov->displayFrame(i, 0, 0, 0, 0);
+ mov->displayFrame(i, 0, 0, 0, 0, 0, 0);
_screen->updateScreen();
_screen->setScreenPalette(tpal3);
tpal3 += 768;
@@ -2163,7 +2163,7 @@
for (int i = 22; i < 38; i++) {
uint32 etime = _system->getMillis() + 12 * _tickLength;
- mov->displayFrame(i, 0, 0, 0, 0);
+ mov->displayFrame(i, 0, 0, 0, 0, 0, 0);
_screen->updateScreen();
if (i == 22 || i == 24 || i == 28 || i == 32) {
snd_playSoundEffect(131, -1);
@@ -2566,7 +2566,7 @@
if (param[1] == 0xFFFF) {
_screen->copyRegion(0, 0, 0, 0, 320, 200, 0, 2, Screen::CR_NO_P_CHECK);
} else {
- anim->wsa->displayFrame(param[1], 2, anim->x, anim->y, 0);
+ anim->wsa->displayFrame(param[1], 2, anim->x, anim->y, 0, 0, 0);
_screen->copyRegion(anim->wsa->xAdd(), anim->wsa->yAdd(), anim->wsa->xAdd(), anim->wsa->yAdd(), anim->wsa->width(), anim->wsa->height(), 2, 0);
}
Modified: scummvm/trunk/engines/kyra/script_tim.cpp
===================================================================
--- scummvm/trunk/engines/kyra/script_tim.cpp 2009-06-09 11:07:18 UTC (rev 41397)
+++ scummvm/trunk/engines/kyra/script_tim.cpp 2009-06-09 11:26:15 UTC (rev 41398)
@@ -471,7 +471,7 @@
if (isLoLDemo)
anim->wsa = new WSAMovie_v1(_vm);
else
- anim->wsa = new WSAMovie_v2(_vm, _screen);
+ anim->wsa = new WSAMovie_v2(_vm);
assert(anim->wsa);
anim->wsa->open(file, wsaOpenFlags, (index == 1) ? _screen->getPalette(0) : 0);
@@ -518,7 +518,7 @@
_screen->updateScreen();
}
- anim->wsa->displayFrame(0, 0, x, y, 0);
+ anim->wsa->displayFrame(0, 0, x, y, 0, 0, 0);
}
if (wsaFlags & 2)
@@ -941,7 +941,7 @@
snprintf(file, 32, "%s.WSA", filename);
if (_vm->resource()->exists(file)) {
- anim->wsa = new WSAMovie_v2(_vm, TIMInterpreter::_screen);
+ anim->wsa = new WSAMovie_v2(_vm);
assert(anim->wsa);
anim->wsa->open(file, wsaOpenFlags, _screen->getPalette(3));
}
@@ -955,7 +955,7 @@
}
if (wsaFlags & 7)
- anim->wsa->displayFrame(0, 0, x, y, 0);
+ anim->wsa->displayFrame(0, 0, x, y, 0, 0, 0);
if (wsaFlags & 3) {
_screen->loadSpecialColors(_screen->getPalette(3));
@@ -1051,7 +1051,7 @@
// WORKAROUND for some bugged scripts that will try to display frames of non-existent animations
if (anim->wsa)
- anim->wsa->displayFrame(anim->curFrame - 1, 0, anim->x, anim->y, 0);
+ anim->wsa->displayFrame(anim->curFrame - 1, 0, anim->x, anim->y, 0, 0, 0);
}
void TIMInterpreter_LoL::stopBackgroundAnimation(int animIndex) {
@@ -1110,7 +1110,7 @@
anim->nextFrame += (anim->frameDelay * _vm->_tickLength);
- anim->wsa->displayFrame(anim->curFrame - 1, 0, anim->x, anim->y, 0);
+ anim->wsa->displayFrame(anim->curFrame - 1, 0, anim->x, anim->y, 0, 0, 0);
anim->nextFrame += _system->getMillis();
}
@@ -1126,7 +1126,7 @@
_screen->copyRegion(112, 0, 112, 0, 176, 120, 2, 0);
_screen->updateScreen();
} else {
- anim->wsa->displayFrame(i - 1, 0, anim->x, anim->y, 0);
+ anim->wsa->displayFrame(i - 1, 0, anim->x, anim->y, 0, 0, 0);
_screen->updateScreen();
}
_vm->delayUntil(next);
Modified: scummvm/trunk/engines/kyra/seqplayer.cpp
===================================================================
--- scummvm/trunk/engines/kyra/seqplayer.cpp 2009-06-09 11:07:18 UTC (rev 41397)
+++ scummvm/trunk/engines/kyra/seqplayer.cpp 2009-06-09 11:26:15 UTC (rev 41398)
@@ -148,7 +148,7 @@
_seqMovies[wsaObj].pos.x = READ_LE_UINT16(_seqData); _seqData += 2;
_seqMovies[wsaObj].pos.y = *_seqData++;
assert(_seqMovies[wsaObj].movie);
- _seqMovies[wsaObj].movie->displayFrame(frame, _seqMovies[wsaObj].page, _seqMovies[wsaObj].pos.x, _seqMovies[wsaObj].pos.y);
+ _seqMovies[wsaObj].movie->displayFrame(frame, _seqMovies[wsaObj].page, _seqMovies[wsaObj].pos.x, _seqMovies[wsaObj].pos.y, 0, 0, 0);
_seqMovies[wsaObj].frame = frame;
}
@@ -160,7 +160,7 @@
frame = 0;
_seqMovies[wsaObj].frame = 0;
}
- _seqMovies[wsaObj].movie->displayFrame(frame, _seqMovies[wsaObj].page, _seqMovies[wsaObj].pos.x, _seqMovies[wsaObj].pos.y);
+ _seqMovies[wsaObj].movie->displayFrame(frame, _seqMovies[wsaObj].page, _seqMovies[wsaObj].pos.x, _seqMovies[wsaObj].pos.y, 0, 0, 0);
}
void SeqPlayer::s1_wsaPlayPrevFrame() {
@@ -171,7 +171,7 @@
frame = _seqMovies[wsaObj].numFrames;
_seqMovies[wsaObj].frame = frame;
} else {
- _seqMovies[wsaObj].movie->displayFrame(frame, _seqMovies[wsaObj].page, _seqMovies[wsaObj].pos.x, _seqMovies[wsaObj].pos.y);
+ _seqMovies[wsaObj].movie->displayFrame(frame, _seqMovies[wsaObj].page, _seqMovies[wsaObj].pos.x, _seqMovies[wsaObj].pos.y, 0, 0, 0);
}
}
Modified: scummvm/trunk/engines/kyra/sequences_hof.cpp
===================================================================
--- scummvm/trunk/engines/kyra/sequences_hof.cpp 2009-06-09 11:07:18 UTC (rev 41397)
+++ scummvm/trunk/engines/kyra/sequences_hof.cpp 2009-06-09 11:26:15 UTC (rev 41398)
@@ -102,7 +102,7 @@
_seqWsa->close();
_seqWsa->open(cseq.wsaFile, 0, _screen->getPalette(0));
_screen->setScreenPalette(_screen->getPalette(0));
- _seqWsa->displayFrame(0, 2, cseq.xPos, cseq.yPos, 0);
+ _seqWsa->displayFrame(0, 2, cseq.xPos, cseq.yPos, 0, 0, 0);
}
if (cseq.flags & 4) {
@@ -174,7 +174,7 @@
if (_seqWsa) {
int f = _seqWsaCurrentFrame % _seqWsa->frames();
- _seqWsa->displayFrame(f, 2, cseq.xPos, cseq.yPos, 0);
+ _seqWsa->displayFrame(f, 2, cseq.xPos, cseq.yPos, 0, 0, 0);
}
_screen->copyPage(2, 12);
@@ -2201,7 +2201,7 @@
NestedSequence s = _sequences->seqn[seqNum];
if (!_activeWSA[wsaNum].movie) {
- _activeWSA[wsaNum].movie = new WSAMovie_v2(this, _screen);
+ _activeWSA[wsaNum].movie = new WSAMovie_v2(this);
assert(_activeWSA[wsaNum].movie);
}
@@ -2246,7 +2246,7 @@
case 0:
xa = -_activeWSA[wsaNum].movie->xAdd();
ya = -_activeWSA[wsaNum].movie->yAdd();
- _activeWSA[wsaNum].movie->displayFrame(0, 8, xa, ya, 0);
+ _activeWSA[wsaNum].movie->displayFrame(0, 8, xa, ya, 0, 0, 0);
seq_animatedSubFrame(8, 2, 7, 8, _activeWSA[wsaNum].movie->xAdd(), _activeWSA[wsaNum].movie->yAdd(),
_activeWSA[wsaNum].movie->width(), _activeWSA[wsaNum].movie->height(), 1, 2);
break;
@@ -2254,7 +2254,7 @@
case 1:
xa = -_activeWSA[wsaNum].movie->xAdd();
ya = -_activeWSA[wsaNum].movie->yAdd();
- _activeWSA[wsaNum].movie->displayFrame(0, 8, xa, ya, 0);
+ _activeWSA[wsaNum].movie->displayFrame(0, 8, xa, ya, 0, 0, 0);
seq_animatedSubFrame(8, 2, 7, 8, _activeWSA[wsaNum].movie->xAdd(), _activeWSA[wsaNum].movie->yAdd(),
_activeWSA[wsaNum].movie->width(), _activeWSA[wsaNum].movie->height(), 1, 1);
break;
@@ -2263,21 +2263,21 @@
seq_waitForTextsTimeout();
xa = -_activeWSA[wsaNum].movie->xAdd();
ya = -_activeWSA[wsaNum].movie->yAdd();
- _activeWSA[wsaNum].movie->displayFrame(0x15, 8, xa, ya, 0);
+ _activeWSA[wsaNum].movie->displayFrame(0x15, 8, xa, ya, 0, 0, 0);
seq_animatedSubFrame(8, 2, 7, 8, _activeWSA[wsaNum].movie->xAdd(), _activeWSA[wsaNum].movie->yAdd(),
_activeWSA[wsaNum].movie->width(), _activeWSA[wsaNum].movie->height(), 0, 2);
break;
case 3:
_screen->copyPage(2, 10);
- _activeWSA[wsaNum].movie->displayFrame(0, 2, 0, 0, 0);
+ _activeWSA[wsaNum].movie->displayFrame(0, 2, 0, 0, 0, 0, 0);
_screen->copyPage(2, 12);
seq_cmpFadeFrame("scene2.cmp");
break;
case 4:
_screen->copyPage(2, 10);
- _activeWSA[wsaNum].movie->displayFrame(0, 2, 0, 0, 0);
+ _activeWSA[wsaNum].movie->displayFrame(0, 2, 0, 0, 0, 0, 0);
_screen->copyPage(2, 12);
seq_cmpFadeFrame("scene3.cmp");
break;
@@ -2364,10 +2364,10 @@
if (_activeWSA[wsaNum].movie) {
if (_activeWSA[wsaNum].flags & 0x20) {
- _activeWSA[wsaNum].movie->displayFrame(_activeWSA[wsaNum].control[currentFrame].index, 2, _activeWSA[wsaNum].x, _activeWSA[wsaNum].y, 0x4000);
+ _activeWSA[wsaNum].movie->displayFrame(_activeWSA[wsaNum].control[currentFrame].index, 2, _activeWSA[wsaNum].x, _activeWSA[wsaNum].y, 0x4000, 0, 0);
_activeWSA[wsaNum].frameDelay = _activeWSA[wsaNum].control[currentFrame].delay;
} else {
- _activeWSA[wsaNum].movie->displayFrame(currentFrame % _activeWSA[wsaNum].movie->frames(), 2, _activeWSA[wsaNum].x, _activeWSA[wsaNum].y, 0x4000);
+ _activeWSA[wsaNum].movie->displayFrame(currentFrame % _activeWSA[wsaNum].movie->frames(), 2, _activeWSA[wsaNum].x, _activeWSA[wsaNum].y, 0x4000, 0, 0);
}
}
@@ -2477,7 +2477,7 @@
_seqWsaChatFrameTimeout = _seqEndTime = _system->getMillis() + _seqFrameDelay * _tickLength;
if (wsa)
- wsa->displayFrame(curframe % wsa->frames(), 2, wsaXpos, wsaYpos, 0);
+ wsa->displayFrame(curframe % wsa->frames(), 2, wsaXpos, wsaYpos, 0, 0, 0);
_screen->copyPage(2, 12);
@@ -2721,7 +2721,7 @@
}
void KyraEngine_HoF::seq_showStarcraftLogo() {
- WSAMovie_v2 *ci = new WSAMovie_v2(this, _screen);
+ WSAMovie_v2 *ci = new WSAMovie_v2(this);
assert(ci);
_screen->clearPage(2);
_res->loadPakFile("INTROGEN.PAK");
@@ -2732,21 +2732,21 @@
return;
}
_screen->hideMouse();
- ci->displayFrame(0, 2, 0, 0, 0);
+ ci->displayFrame(0, 2, 0, 0, 0, 0, 0);
_screen->copyPage(2, 0);
_screen->fadeFromBlack();
for (int i = 1; i < endframe; i++) {
_seqEndTime = _system->getMillis() + 50;
if (skipFlag())
break;
- ci->displayFrame(i, 2, 0, 0, 0);
+ ci->displayFrame(i, 2, 0, 0, 0, 0, 0);
_screen->copyPage(2, 0);
_screen->updateScreen();
delay(_seqEndTime - _system->getMillis());
}
if (!skipFlag()) {
_seqEndTime = _system->getMillis() + 50;
- ci->displayFrame(0, 2, 0, 0, 0);
+ ci->displayFrame(0, 2, 0, 0, 0, 0, 0);
_screen->copyPage(2, 0);
_screen->updateScreen();
delay(_seqEndTime - _system->getMillis());
@@ -2760,7 +2760,7 @@
void KyraEngine_HoF::seq_init() {
_seqProcessedString = new char[200];
- _seqWsa = new WSAMovie_v2(this, _screen);
+ _seqWsa = new WSAMovie_v2(this);
_activeWSA = new ActiveWSA[8];
_activeText = new ActiveText[10];
Modified: scummvm/trunk/engines/kyra/sequences_lok.cpp
===================================================================
--- scummvm/trunk/engines/kyra/sequences_lok.cpp 2009-06-09 11:07:18 UTC (rev 41397)
+++ scummvm/trunk/engines/kyra/sequences_lok.cpp 2009-06-09 11:26:15 UTC (rev 41398)
@@ -966,7 +966,7 @@
else if (i == 20)
snd_playSoundEffect(0x0E);
nextTime = _system->getMillis() + 8 * _tickLength;
- _finalA->displayFrame(i, 0, 8, 8);
+ _finalA->displayFrame(i, 0, 8, 8, 0, 0, 0);
_screen->updateScreen();
}
delete _finalA;
@@ -1198,7 +1198,7 @@
case 2:
if (_system->getMillis() >= timer2) {
- _finalA->displayFrame(frame, 0, 8, 46);
+ _finalA->displayFrame(frame, 0, 8, 46, 0, 0, 0);
_screen->updateScreen();
timer2 = _system->getMillis() + 8 * _tickLength;
++frame;
@@ -1213,7 +1213,7 @@
if (_system->getMillis() < timer1) {
if (_system->getMillis() >= timer2) {
frame = _rnd.getRandomNumberRng(14, 17);
- _finalA->displayFrame(frame, 0, 8, 46);
+ _finalA->displayFrame(frame, 0, 8, 46, 0, 0, 0);
_screen->updateScreen();
timer2 = _system->getMillis() + 8 * _tickLength;
}
@@ -1225,7 +1225,7 @@
case 4:
if (_system->getMillis() >= timer2) {
- _finalA->displayFrame(frame, 0, 8, 46);
+ _finalA->displayFrame(frame, 0, 8, 46, 0, 0, 0);
_screen->updateScreen();
timer2 = _system->getMillis() + 8 * _tickLength;
++frame;
@@ -1239,7 +1239,7 @@
case 5:
if (_system->getMillis() >= timer2) {
- _finalA->displayFrame(frame, 0, 8, 46);
+ _finalA->displayFrame(frame, 0, 8, 46, 0, 0, 0);
_screen->updateScreen();
timer2 = _system->getMillis() + 8 * _tickLength;
++frame;
@@ -1253,7 +1253,7 @@
case 6:
if (_unkEndSeqVar4) {
if (frame <= 33 && _system->getMillis() >= timer2) {
- _finalA->displayFrame(frame, 0, 8, 46);
+ _finalA->displayFrame(frame, 0, 8, 46, 0, 0, 0);
_screen->updateScreen();
timer2 = _system->getMillis() + 8 * _tickLength;
++frame;
@@ -1278,7 +1278,7 @@
case 8:
if (_system->getMillis() >= timer2) {
- _finalA->displayFrame(frame, 0, 8, 46);
+ _finalA->displayFrame(frame, 0, 8, 46, 0, 0, 0);
_screen->updateScreen();
timer2 = _system->getMillis() + 8 * _tickLength;
++frame;
@@ -1295,7 +1295,7 @@
snd_playSoundEffect(12);
for (int i = 0; i < 18; ++i) {
timer2 = _system->getMillis() + 4 * _tickLength;
- _finalC->displayFrame(i, 0, 16, 50);
+ _finalC->displayFrame(i, 0, 16, 50, 0, 0, 0);
_screen->updateScreen();
delayUntil(timer2);
}
@@ -1500,14 +1500,14 @@
uint32 nextRun = 0;
for (int i = 0; i < 8; ++i) {
nextRun = _system->getMillis() + _tickLength;
- _finalB->displayFrame(i, 0, 224, 8);
+ _finalB->displayFrame(i, 0, 224, 8, 0, 0, 0);
_screen->updateScreen();
delayUntil(nextRun);
}
snd_playSoundEffect(0x0D);
for (int i = 7; i >= 0; --i) {
nextRun = _system->getMillis() + _tickLength;
- _finalB->displayFrame(i, 0, 224, 8);
+ _finalB->displayFrame(i, 0, 224, 8, 0, 0, 0);
_screen->updateScreen();
delayUntil(nextRun);
}
Modified: scummvm/trunk/engines/kyra/sequences_lol.cpp
===================================================================
--- scummvm/trunk/engines/kyra/sequences_lol.cpp 2009-06-09 11:07:18 UTC (rev 41397)
+++ scummvm/trunk/engines/kyra/sequences_lol.cpp 2009-06-09 11:26:15 UTC (rev 41398)
@@ -155,7 +155,7 @@
_screen->clearPage(3);
if (load) {
- _chargenWSA = new WSAMovie_v2(this, _screen);
+ _chargenWSA = new WSAMovie_v2(this);
assert(_chargenWSA);
//_charSelection = -1;
@@ -641,7 +641,7 @@
}
void LoLEngine::showStarcraftLogo() {
- WSAMovie_v2 *ci = new WSAMovie_v2(this, _screen);
+ WSAMovie_v2 *ci = new WSAMovie_v2(this);
assert(ci);
_screen->clearPage(0);
@@ -653,7 +653,7 @@
return;
}
_screen->hideMouse();
- ci->displayFrame(0, 2, 32, 80, 0);
+ ci->displayFrame(0, 2, 32, 80, 0, 0, 0);
_screen->copyPage(2, 0);
_screen->fadeFromBlack();
int inputFlag = 0;
@@ -661,7 +661,7 @@
inputFlag = checkInput(0) & 0xff;
if (shouldQuit() || inputFlag)
break;
- ci->displayFrame(i, 2, 32, 80, 0);
+ ci->displayFrame(i, 2, 32, 80, 0, 0, 0);
_screen->copyPage(2, 0);
_screen->updateScreen();
delay(4 * _tickLength);
Modified: scummvm/trunk/engines/kyra/text_mr.cpp
===================================================================
--- scummvm/trunk/engines/kyra/text_mr.cpp 2009-06-09 11:07:18 UTC (rev 41397)
+++ scummvm/trunk/engines/kyra/text_mr.cpp 2009-06-09 11:26:15 UTC (rev 41398)
@@ -581,7 +581,7 @@
frame = 13;
albumRestoreRect();
- _album.wsa->displayFrame(frame, 2, -100, 90, 0x4000);
+ _album.wsa->displayFrame(frame, 2, -100, 90, 0x4000, 0, 0);
albumUpdateRect();
nextFrame = _system->getMillis() + _rnd.getRandomNumberRng(4, 8) * _tickLength;
Modified: scummvm/trunk/engines/kyra/wsamovie.cpp
===================================================================
--- scummvm/trunk/engines/kyra/wsamovie.cpp 2009-06-09 11:07:18 UTC (rev 41397)
+++ scummvm/trunk/engines/kyra/wsamovie.cpp 2009-06-09 11:26:15 UTC (rev 41398)
@@ -137,19 +137,19 @@
}
}
-void WSAMovie_v1::displayFrame(int frameNum, int pageNum, int x, int y, ...) {
- if (frameNum >= _numFrames || !_opened)
+void WSAMovie_v1::displayFrame(int frameNum, int pageNum, int x, int y, uint16 flags, const uint8 *table1, const uint8 *table2) {
+ if (frameNum >= _numFrames || frameNum < 0 || !_opened)
return;
_x = x;
_y = y;
_drawPage = pageNum;
- uint8 *dst;
+ uint8 *dst = 0;
if (_flags & WF_OFFSCREEN_DECODE)
dst = _offscreenBuffer;
else
- dst = _vm->screen()->getPageRect(_drawPage, _x, _y, _width, _height);
+ dst = _screen->getPageRect(_drawPage, _x, _y, _width, _height);
if (_currentFrame == _numFrames) {
if (!(_flags & WF_NO_FIRST_FRAME)) {
@@ -200,8 +200,16 @@
// display
_currentFrame = frameNum;
- if (_flags & WF_OFFSCREEN_DECODE)
- _vm->screen()->copyBlockToPage(_drawPage, _x, _y, _width, _height, _offscreenBuffer);
+ if (_flags & WF_OFFSCREEN_DECODE) {
+ int pageBackUp = _screen->setCurPage(_drawPage);
+
+ int plotFunc = (flags & 0xFF00) >> 12;
+ int unk1 = flags & 0xFF;
+
+ _screen->copyWsaRect(_x, _y, _width, _height, 0, plotFunc, _offscreenBuffer, unk1, table1, table2);
+
+ _screen->_curPage = pageBackUp;
+ }
}
void WSAMovie_v1::processFrame(int frameNum, uint8 *dst) {
@@ -239,7 +247,7 @@
WSAMovie_v1::close();
}
-void WSAMovieAmiga::displayFrame(int frameNum, int pageNum, int x, int y, ...) {
+void WSAMovieAmiga::displayFrame(int frameNum, int pageNum, int x, int y, uint16 flags, const uint8 *table1, const uint8 *table2) {
if (frameNum >= _numFrames || frameNum < 0 || !_opened)
return;
@@ -266,7 +274,7 @@
dst = _buffer;
} else {
- _vm->screen()->copyBlockToPage(_drawPage, _x, _y, _width, _height, _buffer);
+ _screen->copyBlockToPage(_drawPage, _x, _y, _width, _height, _buffer);
}
}
_currentFrame = 0;
@@ -311,8 +319,16 @@
// display
_currentFrame = frameNum;
- if (_flags & WF_OFFSCREEN_DECODE)
- _vm->screen()->copyBlockToPage(_drawPage, _x, _y, _width, _height, _offscreenBuffer);
+ if (_flags & WF_OFFSCREEN_DECODE) {
+ int pageBackUp = _screen->setCurPage(_drawPage);
+
+ int plotFunc = (flags & 0xFF00) >> 12;
+ int unk1 = flags & 0xFF;
+
+ _screen->copyWsaRect(_x, _y, _width, _height, 0, plotFunc, _offscreenBuffer, unk1, table1, table2);
+
+ _screen->_curPage = pageBackUp;
+ }
}
void WSAMovieAmiga::processFrame(int frameNum, uint8 *dst) {
@@ -334,7 +350,7 @@
dst = _offscreenBuffer;
dstPitch = _width;
} else {
- dst = _vm->screen()->getPageRect(_drawPage, _x, _y, _width, _height);
+ dst = _screen->getPageRect(_drawPage, _x, _y, _width, _height);
dstPitch = Screen::SCREEN_W;
}
@@ -347,7 +363,7 @@
#pragma mark -
-WSAMovie_v2::WSAMovie_v2(KyraEngine_v1 *vm, Screen_v2 *screen) : WSAMovie_v1(vm), _screen(screen), _xAdd(0), _yAdd(0) {}
+WSAMovie_v2::WSAMovie_v2(KyraEngine_v1 *vm) : WSAMovie_v1(vm), _xAdd(0), _yAdd(0) {}
int WSAMovie_v2::open(const char *filename, int unk1, uint8 *palBuf) {
close();
@@ -376,7 +392,7 @@
offsPal = 0x300;
_flags |= WF_HAS_PALETTE;
if (palBuf)
- _vm->screen()->loadPalette(wsaData + 8 + ((_numFrames << 2) & 0xFFFF), palBuf, 0x300);
+ _screen->loadPalette(wsaData + 8 + ((_numFrames << 2) & 0xFFFF), palBuf, 0x300);
}
if (flags & 2) {
@@ -384,7 +400,7 @@
offsPal = 0x30;
_flags |= WF_HAS_PALETTE;
if (palBuf)
- _vm->screen()->loadPalette(wsaData + 8 + ((_numFrames << 2) & 0xFFFF), palBuf, 0x30);
+ _screen->loadPalette(wsaData + 8 + ((_numFrames << 2) & 0xFFFF), palBuf, 0x30);
}
_flags |= WF_XOR;
@@ -448,90 +464,6 @@
return _numFrames;
}
-void WSAMovie_v2::displayFrame(int frameNum, int pageNum, int x, int y, ...) {
- if (frameNum >= _numFrames || frameNum < 0 || !_opened)
- return;
-
- _x = x + _xAdd;
- _y = y + _yAdd;
- _drawPage = pageNum;
-
- uint8 *dst = 0;
- if (_flags & WF_OFFSCREEN_DECODE)
- dst = _offscreenBuffer;
- else
- dst = _screen->getPageRect(_drawPage, _x, _y, _width, _height);
-
- if (_currentFrame == _numFrames) {
- if (!(_flags & WF_NO_FIRST_FRAME)) {
- if (_flags & WF_OFFSCREEN_DECODE)
- Screen::decodeFrameDelta(dst, _deltaBuffer);
- else
- Screen::decodeFrameDeltaPage(dst, _deltaBuffer, _width, (_flags & WF_XOR) == 0);
- }
- _currentFrame = 0;
- }
-
- // try to reduce the number of needed frame operations
- int diffCount = ABS(_currentFrame - frameNum);
- int frameStep = 1;
- int frameCount;
- if (_currentFrame < frameNum) {
- frameCount = _numFrames - frameNum + _currentFrame;
- if (diffCount > frameCount && !(_flags & WF_NO_LAST_FRAME))
- frameStep = -1;
- else
- frameCount = diffCount;
- } else {
- frameCount = _numFrames - _currentFrame + frameNum;
- if (frameCount >= diffCount || (_flags & WF_NO_LAST_FRAME)) {
- frameStep = -1;
- frameCount = diffCount;
- }
- }
-
- // process
- if (frameStep > 0) {
- uint16 cf = _currentFrame;
- while (frameCount--) {
- cf += frameStep;
- processFrame(cf, dst);
- if (cf == _numFrames)
- cf = 0;
- }
- } else {
- uint16 cf = _currentFrame;
- while (frameCount--) {
- if (cf == 0)
- cf = _numFrames;
- processFrame(cf, dst);
- cf += frameStep;
- }
- }
-
- // display
- _currentFrame = frameNum;
- if (_flags & WF_OFFSCREEN_DECODE) {
- int pageBackUp = _screen->_curPage;
- _screen->_curPage = _drawPage;
-
- va_list args;
- va_start(args, y);
-
- int copyParam = va_arg(args, int);
- int plotFunc = (copyParam & 0xFF00) >> 12;
- int unk1 = copyParam & 0xFF;
-
- const uint8 *unkPtr1 = va_arg(args, const uint8*);
- const uint8 *unkPtr2 = va_arg(args, const uint8*);
- va_end(args);
-
- _screen->copyWsaRect(_x, _y, _width, _height, 0, plotFunc, _offscreenBuffer, unk1, unkPtr1, unkPtr2);
-
- _screen->_curPage = pageBackUp;
- }
-}
-
} // end of namespace Kyra
Modified: scummvm/trunk/engines/kyra/wsamovie.h
===================================================================
--- scummvm/trunk/engines/kyra/wsamovie.h 2009-06-09 11:07:18 UTC (rev 41397)
+++ scummvm/trunk/engines/kyra/wsamovie.h 2009-06-09 11:26:15 UTC (rev 41398)
@@ -37,7 +37,7 @@
class Movie {
public:
- Movie(KyraEngine_v1 *vm) : _vm(vm), _opened(false), _x(-1), _y(-1), _drawPage(-1) {}
+ Movie(KyraEngine_v1 *vm) : _vm(vm), _screen(vm->screen()), _opened(false), _x(-1), _y(-1), _drawPage(-1) {}
virtual ~Movie() {}
virtual bool opened() { return _opened; }
@@ -53,10 +53,11 @@
virtual int frames() = 0;
- virtual void displayFrame(int frameNum, int pageNum, int x, int y, ...) = 0;
+ virtual void displayFrame(int frameNum, int pageNum, int x, int y, uint16 flags, const uint8 *table1, const uint8 *table2) = 0;
protected:
KyraEngine_v1 *_vm;
+ Screen *_screen;
bool _opened;
int _x, _y;
@@ -76,7 +77,7 @@
virtual int frames() { return _opened ? _numFrames : -1; }
- virtual void displayFrame(int frameNum, int pageNum, int x, int y, ...);
+ virtual void displayFrame(int frameNum, int pageNum, int x, int y, uint16 flags, const uint8 *table1, const uint8 *table2);
enum WSAFlags {
WF_OFFSCREEN_DECODE = 0x10,
@@ -107,7 +108,7 @@
int open(const char *filename, int offscreen, uint8 *palette);
void close();
- void displayFrame(int frameNum, int pageNum, int x, int y, ...);
+ void displayFrame(int frameNum, int pageNum, int x, int y, uint16 flags, const uint8 *table1, const uint8 *table2);
private:
void processFrame(int frameNum, uint8 *dst);
@@ -116,20 +117,19 @@
class WSAMovie_v2 : public WSAMovie_v1 {
public:
- WSAMovie_v2(KyraEngine_v1 *vm, Screen_v2 *screen);
+ WSAMovie_v2(KyraEngine_v1 *vm);
int open(const char *filename, int unk1, uint8 *palette);
+ virtual void displayFrame(int frameNum, int pageNum, int x, int y, uint16 flags, const uint8 *table1, const uint8 *table2) {
+ WSAMovie_v1::displayFrame(frameNum, pageNum, x + _xAdd, y + _yAdd, flags, table1, table2);
+ }
- virtual void displayFrame(int frameNum, int pageNum, int x, int y, ...);
-
int xAdd() const { return _xAdd; }
int yAdd() const { return _yAdd; }
void setWidth(int w) { _width = w; }
void setHeight(int h) { _height = h; }
protected:
- Screen_v2 *_screen;
-
int16 _xAdd;
int16 _yAdd;
};
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
More information about the Scummvm-git-logs
mailing list