diff options
-rw-r--r-- | engines/prince/prince.cpp | 98 | ||||
-rw-r--r-- | engines/prince/prince.h | 3 |
2 files changed, 83 insertions, 18 deletions
diff --git a/engines/prince/prince.cpp b/engines/prince/prince.cpp index 6e3b22e07b..7a716fd98a 100644 --- a/engines/prince/prince.cpp +++ b/engines/prince/prince.cpp @@ -80,7 +80,8 @@ PrinceEngine::PrinceEngine(OSystem *syst, const PrinceGameDescription *gameDesc) _frameNr(0), _cursor1(nullptr), _cursor2(nullptr), _font(nullptr), _suitcaseBmp(nullptr), _roomBmp(nullptr), _cursorNr(0), _picWindowX(0), _picWindowY(0), _randomSource("prince"), _invLineX(134), _invLineY(176), _invLine(5), _invLines(3), _invLineW(70), _invLineH(76), _maxInvW(72), _maxInvH(76), - _invLineSkipX(2), _invLineSkipY(3), _showInventoryFlag(false), _inventoryBackgroundRemember(false) { + _invLineSkipX(2), _invLineSkipY(3), _showInventoryFlag(false), _inventoryBackgroundRemember(false), + _mst_shadow(0), _mst_shadow2(0) { // Debug/console setup DebugMan.addDebugChannel(DebugChannel::kScript, "script", "Prince Script debug channel"); @@ -659,6 +660,7 @@ void PrinceEngine::keyHandler(Common::Event event) { break; case Common::KEYCODE_k: _mainHero->_middleY += 5; + addInvObj(); break; case Common::KEYCODE_j: _mainHero->_middleX -= 5; @@ -1261,6 +1263,55 @@ void PrinceEngine::drawScreen() { _graph->update(); } +void PrinceEngine::addInvObj() { + changeCursor(0); // turn on cursor later? + //prepareInventoryToView(); + //inventoryFlagChange(); + + if (!_flags->getFlagValue(Flags::CURSEBLINK)) { + + loadSample(27, "PRZEDMIO.WAV"); + playSample(27, 0); + + _mst_shadow2 = 1; + while (_mst_shadow2 < 512) { + uint32 currentTime = _system->getMillis(); + displayInventory(); + //getDebugger()->onFrame(); + _graph->update(); + _mst_shadow2 += 50; + int delay = 1000/15 - int32(_system->getMillis() - currentTime); + delay = delay < 0 ? 0 : delay; + _system->delayMillis(delay); + } + while (_mst_shadow2 > 256) { + uint32 currentTime = _system->getMillis(); + displayInventory(); + //getDebugger()->onFrame(); + _graph->update(); + _mst_shadow2 -= 42; + int delay = 1000/15 - int32(_system->getMillis() - currentTime); + delay = delay < 0 ? 0 : delay; + _system->delayMillis(delay); + } + _mst_shadow2 = 0; + + for (int i = 0; i < 20; i++) { + uint32 currentTime = _system->getMillis(); + displayInventory(); + //getDebugger()->onFrame(); + _graph->update(); + int delay = 1000/15 - int32(_system->getMillis() - currentTime); + delay = delay < 0 ? 0 : delay; + _system->delayMillis(delay); + } + + } else { + //CURSEBLINK: + + } +} + void PrinceEngine::rememberScreenInv() { } @@ -1323,26 +1374,37 @@ void PrinceEngine::drawInvItems() { for (int i = 0 ; i < _invLines; i++) { for (int j = 0; j < _invLine; j++) { if (item < _mainHero->_inventory.size()) { - //MST_Shadow - // TODO! - //shad0: - //if (_mainHero->_inventory[item] != 0) { - int itemNr = _mainHero->_inventory[item]; - if (itemNr != 68) { - Graphics::Surface *itemSurface = _allInvList[itemNr].getSurface(); - int drawX = currInvX; - int drawY = currInvY; - if (itemSurface->w < _maxInvW) { - drawX += (_maxInvW - itemSurface->w) / 2; - } - if (itemSurface->h < _maxInvH) { - drawY += (_maxInvH - itemSurface->h) / 2; + int itemNr = _mainHero->_inventory[item]; + _mst_shadow = 0; + if (_mst_shadow2 != 0) { + if (!_flags->getFlagValue(Flags::CURSEBLINK)) { + //normal: + if (item + 1 == _mainHero->_inventory.size()) { // last item in inventory + _mst_shadow = 1; } - _graph->drawTransparentSurface(drawX, drawY, itemSurface, 0); + } else if (itemNr == 1 || itemNr == 3 || itemNr == 4 || itemNr == 7) { + _mst_shadow = 1; + } + } + //shad0: + if (itemNr != 68) { + Graphics::Surface *itemSurface = _allInvList[itemNr].getSurface(); + int drawX = currInvX; + int drawY = currInvY; + if (itemSurface->w < _maxInvW) { + drawX += (_maxInvW - itemSurface->w) / 2; + } + if (itemSurface->h < _maxInvH) { + drawY += (_maxInvH - itemSurface->h) / 2; + } + if (!_mst_shadow) { + _graph->drawTransparentSurface(drawX, drawY, itemSurface, 0); //TODO - ShowSprite0 } else { - // candle item: + _graph->drawTransparentSurface(drawX, drawY, itemSurface, 0); //TODO - ShowSprite01 } - //} + } else { + // candle item: + } } currInvX += _invLineW + _invLineSkipX; item++; diff --git a/engines/prince/prince.h b/engines/prince/prince.h index 036043ff13..1694286f54 100644 --- a/engines/prince/prince.h +++ b/engines/prince/prince.h @@ -287,6 +287,8 @@ public: int _maxInvH; int _invLineSkipX; int _invLineSkipY; + int _mst_shadow; + int _mst_shadow2; // blinking after adding new item void inventoryFlagChange(); bool loadAllInv(); @@ -294,6 +296,7 @@ public: void prepareInventoryToView(); void drawInvItems(); void displayInventory(); + void addInvObj(); int testAnimNr; int testAnimFrame; |