From bc0fc246f047415837d7c7bccf82918303fcccaf Mon Sep 17 00:00:00 2001 From: Walter van Niftrik Date: Sun, 3 Apr 2016 19:26:34 +0200 Subject: ADL: Implement hires2 screen update routine --- engines/adl/hires1.cpp | 33 ++++++++++++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) (limited to 'engines/adl/hires1.cpp') diff --git a/engines/adl/hires1.cpp b/engines/adl/hires1.cpp index 1d7e50e123..cca2fe42e5 100644 --- a/engines/adl/hires1.cpp +++ b/engines/adl/hires1.cpp @@ -289,7 +289,35 @@ void HiRes1Engine::printMessage(uint idx) { printString(msg); } -void HiRes1Engine::drawItem(const Item &item, const Common::Point &pos) const { +void HiRes1Engine::drawItems() { + Common::List::iterator item; + + uint dropped = 0; + + for (item = _state.items.begin(); item != _state.items.end(); ++item) { + // Skip items not in this room + if (item->room != _state.room) + continue; + + if (item->state == IDI_ITEM_DROPPED) { + // Draw dropped item if in normal view + if (getCurRoom().picture == getCurRoom().curPicture) + drawItem(*item, _itemOffsets[dropped++]); + } else { + // Draw fixed item if current view is in the pic list + Common::Array::const_iterator pic; + + for (pic = item->roomPictures.begin(); pic != item->roomPictures.end(); ++pic) { + if (*pic == getCurRoom().curPicture) { + drawItem(*item, item->position); + break; + } + } + } + } +} + +void HiRes1Engine::drawItem(Item &item, const Common::Point &pos) { if (item.isLineArt) { StreamPtr stream(_corners[item.picture - 1]->createReadStream()); static_cast(_graphics)->drawCorners(*stream, pos); @@ -302,6 +330,9 @@ void HiRes1Engine::loadRoom(byte roomNr) { } void HiRes1Engine::showRoom() { + clearScreen(); + loadRoom(_state.room); + if (!_state.isDark) { drawPic(getCurRoom().curPicture); drawItems(); -- cgit v1.2.3