aboutsummaryrefslogtreecommitdiff
path: root/engines/kyra/scene_lol.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/kyra/scene_lol.cpp')
-rw-r--r--engines/kyra/scene_lol.cpp82
1 files changed, 46 insertions, 36 deletions
diff --git a/engines/kyra/scene_lol.cpp b/engines/kyra/scene_lol.cpp
index 68eb15fbb5..e2931c5098 100644
--- a/engines/kyra/scene_lol.cpp
+++ b/engines/kyra/scene_lol.cpp
@@ -850,8 +850,10 @@ bool LoLEngine::clickedShape(int shapeIndex) {
while (shapeIndex) {
uint16 s = _levelShapeProperties[shapeIndex].shapeIndex[1];
- if (s == 0xffff)
+ if (s == 0xffff) {
+ shapeIndex = _levelShapeProperties[shapeIndex].next;
continue;
+ }
int w = _levelShapes[s][3];
int h = _levelShapes[s][2];
@@ -1002,12 +1004,12 @@ void LoLEngine::movePartySmoothScrollUp(int speed) {
int d = 0;
if (_sceneDrawPage2 == 2) {
- d = smoothScrollDrawSpecialShape(6);
+ d = smoothScrollDrawSpecialGuiShape(6);
gui_drawScene(6);
_screen->backupSceneWindow(6, 12);
_screen->backupSceneWindow(2, 6);
} else {
- d = smoothScrollDrawSpecialShape(2);
+ d = smoothScrollDrawSpecialGuiShape(2);
gui_drawScene(2);
_screen->backupSceneWindow(2, 12);
_screen->backupSceneWindow(6, 6);
@@ -1018,8 +1020,8 @@ void LoLEngine::movePartySmoothScrollUp(int speed) {
_screen->smoothScrollZoomStepTop(6, 2, _scrollXTop[i], _scrollYTop[i]);
_screen->smoothScrollZoomStepBottom(6, 2, _scrollXBottom[i], _scrollYBottom[i]);
- //if (d)
- // unk(_tempBuffer5120, page2);
+ if (d)
+ _screen->copyGuiShapeToSurface(_tempBuffer5120, 2);
_screen->restoreSceneWindow(2, 0);
_screen->updateScreen();
@@ -1029,8 +1031,8 @@ void LoLEngine::movePartySmoothScrollUp(int speed) {
i++;
}
- //if (d)
- // unk(_tempBuffer5120, _scrollSceneBuffer);
+ if (d)
+ _screen->copyGuiShapeToSurface(_tempBuffer5120, 12);
if (_sceneDefaultUpdate != 2) {
_screen->restoreSceneWindow(12, 0);
@@ -1044,7 +1046,7 @@ void LoLEngine::movePartySmoothScrollDown(int speed) {
if (!_smoothScrollingEnabled)
return;
- //int d = smoothScrollDrawSpecialShape(2);
+ int d = smoothScrollDrawSpecialGuiShape(2);
gui_drawScene(2);
_screen->backupSceneWindow(2, 6);
@@ -1053,8 +1055,8 @@ void LoLEngine::movePartySmoothScrollDown(int speed) {
_screen->smoothScrollZoomStepTop(6, 2, _scrollXTop[i], _scrollYTop[i]);
_screen->smoothScrollZoomStepBottom(6, 2, _scrollXBottom[i], _scrollYBottom[i]);
- //if (d)
- // unk(_tempBuffer5120, page2);
+ if (d)
+ _screen->copyGuiShapeToSurface(_tempBuffer5120, 2);
_screen->restoreSceneWindow(2, 0);
_screen->updateScreen();
@@ -1064,8 +1066,8 @@ void LoLEngine::movePartySmoothScrollDown(int speed) {
i++;
}
- //if (d)
- // unk(_tempBuffer5120, _scrollSceneBuffer);
+ if (d)
+ _screen->copyGuiShapeToSurface(_tempBuffer5120, 12);
if (_sceneDefaultUpdate != 2) {
_screen->restoreSceneWindow(6, 0);
@@ -1146,14 +1148,14 @@ void LoLEngine::movePartySmoothScrollTurnLeft(int speed) {
speed <<= 1;
- //int d = smoothScrollDrawSpecialShape(_sceneDrawPage1);
+ int d = smoothScrollDrawSpecialGuiShape(_sceneDrawPage1);
gui_drawScene(_sceneDrawPage1);
- int dp = _sceneDrawPage2 == 2 ? _sceneDrawPage2 : _sceneDrawPage1;
+ int dp = _sceneDrawPage2 == 2 ? _sceneDrawPage2 : _sceneDrawPage1;
_smoothScrollTimer = _system->getMillis() + speed * _tickLength;
_screen->smoothScrollTurnStep1(_sceneDrawPage1, _sceneDrawPage2, dp);
- //if (d)
- // unk(_tempBuffer5120, _scrollSceneBuffer);
+ if (d)
+ _screen->copyGuiShapeToSurface(_tempBuffer5120, dp);
_screen->restoreSceneWindow(dp, 0);
_screen->updateScreen();
fadeText();
@@ -1161,8 +1163,8 @@ void LoLEngine::movePartySmoothScrollTurnLeft(int speed) {
_smoothScrollTimer = _system->getMillis() + speed * _tickLength;
_screen->smoothScrollTurnStep2(_sceneDrawPage1, _sceneDrawPage2, dp);
- //if (d)
- // unk(_tempBuffer5120, _scrollSceneBuffer);
+ if (d)
+ _screen->copyGuiShapeToSurface(_tempBuffer5120, dp);
_screen->restoreSceneWindow(dp, 0);
_screen->updateScreen();
fadeText();
@@ -1170,15 +1172,15 @@ void LoLEngine::movePartySmoothScrollTurnLeft(int speed) {
_smoothScrollTimer = _system->getMillis() + speed * _tickLength;
_screen->smoothScrollTurnStep3(_sceneDrawPage1, _sceneDrawPage2, dp);
- //if (d)
- // unk(_tempBuffer5120, _scrollSceneBuffer);
+ if (d)
+ _screen->copyGuiShapeToSurface(_tempBuffer5120, dp);
_screen->restoreSceneWindow(dp, 0);
_screen->updateScreen();
fadeText();
delayUntil(_smoothScrollTimer);
if (_sceneDefaultUpdate != 2) {
- drawScriptShapes(_sceneDrawPage1);
+ drawSpecialGuiShape(_sceneDrawPage1);
_screen->copyRegion(112, 0, 112, 0, 176, 120, _sceneDrawPage1, 0, Screen::CR_NO_P_CHECK);
_screen->updateScreen();
}
@@ -1190,14 +1192,14 @@ void LoLEngine::movePartySmoothScrollTurnRight(int speed) {
speed <<= 1;
- //int d = smoothScrollDrawSpecialShape(_sceneDrawPage1);
+ int d = smoothScrollDrawSpecialGuiShape(_sceneDrawPage1);
gui_drawScene(_sceneDrawPage1);
int dp = _sceneDrawPage2 == 2 ? _sceneDrawPage2 : _sceneDrawPage1;
_smoothScrollTimer = _system->getMillis() + speed * _tickLength;
_screen->smoothScrollTurnStep3(_sceneDrawPage2, _sceneDrawPage1, dp);
- //if (d)
- // unk(_tempBuffer5120, _scrollSceneBuffer);
+ if (d)
+ _screen->copyGuiShapeToSurface(_tempBuffer5120, dp);
_screen->restoreSceneWindow(dp, 0);
_screen->updateScreen();
fadeText();
@@ -1205,8 +1207,8 @@ void LoLEngine::movePartySmoothScrollTurnRight(int speed) {
_smoothScrollTimer = _system->getMillis() + speed * _tickLength;
_screen->smoothScrollTurnStep2(_sceneDrawPage2, _sceneDrawPage1, dp);
- //if (d)
- // unk(_tempBuffer5120, _scrollSceneBuffer);
+ if (d)
+ _screen->copyGuiShapeToSurface(_tempBuffer5120, dp);
_screen->restoreSceneWindow(dp, 0);
_screen->updateScreen();
fadeText();
@@ -1214,15 +1216,15 @@ void LoLEngine::movePartySmoothScrollTurnRight(int speed) {
_smoothScrollTimer = _system->getMillis() + speed * _tickLength;
_screen->smoothScrollTurnStep1(_sceneDrawPage2, _sceneDrawPage1, dp);
- //if (d)
- // unk(_tempBuffer5120, _scrollSceneBuffer);
+ if (d)
+ _screen->copyGuiShapeToSurface(_tempBuffer5120, dp);
_screen->restoreSceneWindow(dp, 0);
_screen->updateScreen();
fadeText();
delayUntil(_smoothScrollTimer);
if (_sceneDefaultUpdate != 2) {
- drawScriptShapes(_sceneDrawPage1);
+ drawSpecialGuiShape(_sceneDrawPage1);
_screen->copyRegion(112, 0, 112, 0, 176, 120, _sceneDrawPage1, 0, Screen::CR_NO_P_CHECK);
_screen->updateScreen();
}
@@ -1298,11 +1300,14 @@ void LoLEngine::shakeScene(int duration, int width, int height, int restore) {
}
}
-int LoLEngine::smoothScrollDrawSpecialShape(int pageNum) {
- // TODO
- if(!_scriptAssignedLevelShape)
+int LoLEngine::smoothScrollDrawSpecialGuiShape(int pageNum) {
+ if(!_specialGuiShape)
return 0;
- return 0;
+
+ _screen->clearGuiShapeMemory(pageNum);
+ _screen->drawShape(pageNum, _specialGuiShape, _specialGuiShapeX, _specialGuiShapeY, 2, 0);
+ _screen->copyGuiShapeFromSceneBackupBuffer(pageNum, _tempBuffer5120);
+ return 1;
}
void LoLEngine::drawScene(int pageNum) {
@@ -1321,7 +1326,7 @@ void LoLEngine::drawScene(int pageNum) {
drawSceneShapes();
if (!pageNum) {
- drawScriptShapes(_sceneDrawPage1);
+ drawSpecialGuiShape(_sceneDrawPage1);
_screen->copyRegion(112, 0, 112, 0, 176, 120, _sceneDrawPage1, _sceneDrawPage2, Screen::CR_NO_P_CHECK);
_screen->copyRegion(112, 0, 112, 0, 176, 120, _sceneDrawPage1, 0, Screen::CR_NO_P_CHECK);
_screen->updateScreen();
@@ -2036,9 +2041,14 @@ void LoLEngine::drawBlockEffects(int index, int type) {
}
}
-void LoLEngine::drawScriptShapes(int pageNum) {
- if (!_scriptAssignedLevelShape)
+void LoLEngine::drawSpecialGuiShape(int pageNum) {
+ if (!_specialGuiShape)
return;
+
+ _screen->drawShape(pageNum, _specialGuiShape, _specialGuiShapeX, _specialGuiShapeY, 2, 0);
+
+ if (_specialGuiShapeShadowFlag & 1)
+ _screen->drawShape(pageNum, _specialGuiShape, _specialGuiShapeX + _specialGuiShape[3], _specialGuiShapeY, 2, 1);
}
} // end of namespace Kyra