aboutsummaryrefslogtreecommitdiff
path: root/engines/kyra/gui_lol.cpp
diff options
context:
space:
mode:
authorFlorian Kagerer2009-03-28 11:58:22 +0000
committerFlorian Kagerer2009-03-28 11:58:22 +0000
commit8875fdcdedc08710517295f770acaf6931912041 (patch)
treed69bf788a25363be80aa7557b054bba63abe9e09 /engines/kyra/gui_lol.cpp
parent97abfc9181e0689aada9ee97cde5899e6b28c366 (diff)
downloadscummvm-rg350-8875fdcdedc08710517295f770acaf6931912041.tar.gz
scummvm-rg350-8875fdcdedc08710517295f770acaf6931912041.tar.bz2
scummvm-rg350-8875fdcdedc08710517295f770acaf6931912041.zip
LOL: - Level temp data now get stored in memory so you can now return to a level without everything being broken. Temp data isn't saved to disk. Since total memory requirement for storing this data won't exceed ~100kb I'd rather save memory in other places (like removing some screen page buffers)
- Implemented some more opcodes and fixed some bugs (You can now safely pick up coin pouches. The lamp seems to work fine, too). svn-id: r39719
Diffstat (limited to 'engines/kyra/gui_lol.cpp')
-rw-r--r--engines/kyra/gui_lol.cpp41
1 files changed, 33 insertions, 8 deletions
diff --git a/engines/kyra/gui_lol.cpp b/engines/kyra/gui_lol.cpp
index e7c3d6f138..51880b1199 100644
--- a/engines/kyra/gui_lol.cpp
+++ b/engines/kyra/gui_lol.cpp
@@ -56,6 +56,7 @@ void LoLEngine::gui_drawPlayField() {
if (_gameFlags[15] & 0x800)
resetLampStatus();
+ updateDrawPage2();
gui_drawScene(2);
gui_drawAllCharPortraitsWithStats();
@@ -63,9 +64,8 @@ void LoLEngine::gui_drawPlayField() {
gui_drawMoneyBox(_screen->_curPage);
_screen->setCurPage(cp);
- _screen->hideMouse();
_screen->copyPage(2, 0);
- _screen->showMouse();
+ updateDrawPage2();
}
void LoLEngine::gui_drawScene(int pageNum) {
@@ -74,7 +74,7 @@ void LoLEngine::gui_drawScene(int pageNum) {
}
void LoLEngine::gui_drawInventory() {
- if (!_currentControlMode || !_hideInventory) {
+ if (!_currentControlMode || !_needSceneRestore) {
for (int i = 0; i < 9; i++)
gui_drawInventoryItem(i);
}
@@ -603,7 +603,7 @@ void LoLEngine::gui_toggleButtonDisplayMode(int shapeIndex, int mode) {
if (shapeIndex == 78 && !(_gameFlags[15] & 0x1000))
return;
- if (_currentControlMode && _hideInventory)
+ if (_currentControlMode && _needSceneRestore)
return;
if (mode == 0)
@@ -1198,7 +1198,7 @@ int LoLEngine::clickedExitCharInventory(Button *button) {
_screen->copyBlockToPage(2, 0, 0, 320, 200, _pageBuffer2);
_lastCharInventory = -1;
- updateSceneWindow();
+ updateDrawPage2();
enableSysTimer(2);
return 1;
@@ -1356,11 +1356,11 @@ int LoLEngine::clickedWall(Button *button) {
break;
case 2:
- res = clickedLever(block, dir);
+ res = clickedLeverOn(block, dir);
break;
case 3:
- res = clicked3(block, dir);
+ res = clickedLeverOff(block, dir);
break;
case 4:
@@ -1454,11 +1454,36 @@ int LoLEngine::clickedAutomap(Button *button) {
// displayAutopmap();
gui_drawPlayField();
- setPaletteBrightness(_screen->_currentPalette, _brightness, _lampOilStatus);
+ setPaletteBrightness(_screen->_currentPalette, _brightness, _lampEffect);
return 1;
}
int LoLEngine::clickedLamp(Button *button) {
+ if (!(_gameFlags[15] & 0x800))
+ return 0;
+
+ if (_itemsInPlay[_itemInHand].itemPropertyIndex == 248) {
+ if (_lampOilStatus >= 100) {
+ _txt->printMessage(0, getLangString(0x4061));
+ return 1;
+ }
+
+ _txt->printMessage(0, getLangString(0x4062));
+
+ deleteItem(_itemInHand);
+ snd_playSoundEffect(181, -1);
+ setHandItem(0);
+
+ _lampOilStatus += 100;
+
+ } else {
+ uint16 s = (_lampOilStatus >= 100) ? 0x4060 : ((!_lampOilStatus) ? 0x405c : (_lampOilStatus / 33) + 0x405d);
+ _txt->printMessage(0, getLangString(0x405b), getLangString(s));
+ }
+
+ if (_brightness)
+ setPaletteBrightness(_screen->_currentPalette, _brightness, _lampEffect);
+
return 1;
}