From 2ca0235f44a1144aa248a497428fd59fd11840d7 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Wed, 29 Nov 2017 21:34:28 -0500 Subject: XEEN: Refactor FontSurface as ancestors of Window, not Screen This refactoring allowed Screen to now simply derive from Graphics::Screen, and several duplicated methods could be removed. --- engines/xeen/combat.cpp | 7 +- engines/xeen/cutscenes.cpp | 22 ++-- engines/xeen/dialogs.cpp | 5 +- engines/xeen/dialogs_automap.cpp | 33 +++--- engines/xeen/dialogs_char_info.cpp | 4 +- engines/xeen/dialogs_dismiss.cpp | 1 - engines/xeen/dialogs_error.cpp | 1 - engines/xeen/dialogs_exchange.cpp | 1 - engines/xeen/dialogs_input.cpp | 11 +- engines/xeen/dialogs_items.cpp | 22 ++-- engines/xeen/dialogs_party.cpp | 3 - engines/xeen/dialogs_query.cpp | 8 +- engines/xeen/dialogs_quests.cpp | 3 +- engines/xeen/dialogs_quick_ref.cpp | 1 - engines/xeen/dialogs_spells.cpp | 23 ++-- engines/xeen/font.cpp | 13 ++- engines/xeen/font.h | 18 +-- engines/xeen/interface.cpp | 61 +++++------ engines/xeen/party.cpp | 2 - engines/xeen/screen.cpp | 73 ------------ engines/xeen/screen.h | 26 ++--- engines/xeen/scripts.cpp | 2 - engines/xeen/sprites.cpp | 10 ++ engines/xeen/sprites.h | 23 ++++ engines/xeen/town.cpp | 60 +++++----- engines/xeen/window.cpp | 70 +++++++----- engines/xeen/window.h | 33 +++++- engines/xeen/worldofxeen/clouds_cutscenes.cpp | 74 ++++++------- engines/xeen/worldofxeen/darkside_cutscenes.cpp | 140 ++++++++++++------------ engines/xeen/worldofxeen/worldofxeen_menu.cpp | 7 +- 30 files changed, 351 insertions(+), 406 deletions(-) diff --git a/engines/xeen/combat.cpp b/engines/xeen/combat.cpp index 72db1812be..4a952fa79d 100644 --- a/engines/xeen/combat.cpp +++ b/engines/xeen/combat.cpp @@ -133,7 +133,6 @@ void Combat::clear() { void Combat::giveCharDamage(int damage, DamageType attackType, int charIndex) { Party &party = *_vm->_party; - Screen &screen = *_vm->_screen; Scripts &scripts = *_vm->_scripts; Sound &sound = *_vm->_sound; Windows &windows = *_vm->_windows; @@ -221,8 +220,7 @@ void Combat::giveCharDamage(int damage, DamageType attackType, int charIndex) { // Draw the attack effect on the character sprite sound.playFX(fx); - _powSprites.draw(screen, frame, - Common::Point(Res.CHAR_FACES_X[selectedIndex1], 150)); + _powSprites.draw(0, frame, Common::Point(Res.CHAR_FACES_X[selectedIndex1], 150)); windows[33].update(); // Reduce damage if power shield active, and set it zero @@ -265,7 +263,6 @@ void Combat::doCharDamage(Character &c, int charNum, int monsterDataIndex) { Interface &intf = *_vm->_interface; Map &map = *_vm->_map; Party &party = *_vm->_party; - Screen &screen = *_vm->_screen; Sound &sound = *_vm->_sound; Windows &windows = *_vm->_windows; MonsterStruct &monsterData = map._monsterData[monsterDataIndex]; @@ -322,7 +319,7 @@ void Combat::doCharDamage(Character &c, int charNum, int monsterDataIndex) { } sound.playFX(fx); - intf._charPowSprites.draw(screen, frame, Common::Point(Res.CHAR_FACES_X[charNum], 150)); + intf._charPowSprites.draw(0, frame, Common::Point(Res.CHAR_FACES_X[charNum], 150)); windows[33].update(); damage -= party._powerShield; diff --git a/engines/xeen/cutscenes.cpp b/engines/xeen/cutscenes.cpp index 0627519ad8..4df737263d 100644 --- a/engines/xeen/cutscenes.cpp +++ b/engines/xeen/cutscenes.cpp @@ -60,7 +60,7 @@ void Cutscenes::showSubtitles(uint windowIndex) { if (!_boxSprites) // Not already loaded, so load it _boxSprites = new SpriteResource("box.vga"); - _boxSprites->draw(screen, 0, Common::Point(36, 189)); + _boxSprites->draw(0, 0, Common::Point(36, 189)); // Write the subtitle line windows[windowIndex].writeString(_subtitleLine); @@ -150,15 +150,15 @@ bool Cutscenes::doScroll(bool rollUp, bool fadeIn) { screen.restoreBackground(); if (i > 14) { - hand[14]->draw(screen, 0, Common::Point(SCROLL_L[ctr], 0), SPRFLAG_800); - hand[15]->draw(screen, 0, Common::Point(SCROLL_R[ctr], 0), SPRFLAG_800); + hand[14]->draw(0, 0, Common::Point(SCROLL_L[ctr], 0), SPRFLAG_800); + hand[15]->draw(0, 0, Common::Point(SCROLL_R[ctr], 0), SPRFLAG_800); --ctr; } else if (i != 0) { - hand[i - 1]->draw(screen, 0); + hand[i - 1]->draw(0, 0); } if (i <= 20) - marb[(i - 1) / 5]->draw(screen, (i - 1) % 5); + marb[(i - 1) / 5]->draw(0, (i - 1) % 5); screen.update(); while (!_vm->shouldQuit() && events.timeElapsed() == 0) @@ -174,15 +174,15 @@ bool Cutscenes::doScroll(bool rollUp, bool fadeIn) { screen.restoreBackground(); if (i < 14) { - hand[i]->draw(screen, 0); + hand[i]->draw(0, 0); } else { - hand[14]->draw(screen, 0, Common::Point(SCROLL_L[ctr], 0), SPRFLAG_800); - hand[15]->draw(screen, 0, Common::Point(SCROLL_R[ctr], 0), SPRFLAG_800); + hand[14]->draw(0, 0, Common::Point(SCROLL_L[ctr], 0), SPRFLAG_800); + hand[15]->draw(0, 0, Common::Point(SCROLL_R[ctr], 0), SPRFLAG_800); ++ctr; } if (i < 20) { - marb[i / 5]->draw(screen, i % 5); + marb[i / 5]->draw(0, i % 5); } screen.update(); @@ -195,8 +195,8 @@ bool Cutscenes::doScroll(bool rollUp, bool fadeIn) { } if (rollUp) { - hand[0]->draw(screen, 0); - marb[0]->draw(screen, 0); + hand[0]->draw(0, 0); + marb[0]->draw(0, 0); } else { screen.restoreBackground(); } diff --git a/engines/xeen/dialogs.cpp b/engines/xeen/dialogs.cpp index 9141b89296..4875c2f0a9 100644 --- a/engines/xeen/dialogs.cpp +++ b/engines/xeen/dialogs.cpp @@ -63,7 +63,6 @@ void ButtonContainer::addPartyButtons(XeenEngine *vm) { bool ButtonContainer::checkEvents(XeenEngine *vm) { EventsManager &events = *vm->_events; - Screen &screen = *vm->_screen; Windows &windows = *_vm->_windows; _buttonValue = 0; @@ -107,7 +106,7 @@ bool ButtonContainer::checkEvents(XeenEngine *vm) { if (btn._draw && btn._value == _buttonValue) { // Found the correct button // Draw button depressed - btn._sprites->draw(screen, btnIndex * 2 + 1, + btn._sprites->draw(0, btnIndex * 2 + 1, Common::Point(btn._bounds.left, btn._bounds.top)); win.setBounds(btn._bounds); win.update(); @@ -117,7 +116,7 @@ bool ButtonContainer::checkEvents(XeenEngine *vm) { events.wait(2); // Redraw button in it's original non-depressed form - btn._sprites->draw(screen, btnIndex * 2, + btn._sprites->draw(0, btnIndex * 2, Common::Point(btn._bounds.left, btn._bounds.top)); win.setBounds(btn._bounds); win.update(); diff --git a/engines/xeen/dialogs_automap.cpp b/engines/xeen/dialogs_automap.cpp index 0138f3e340..cc76623deb 100644 --- a/engines/xeen/dialogs_automap.cpp +++ b/engines/xeen/dialogs_automap.cpp @@ -34,7 +34,6 @@ void AutoMapDialog::show(XeenEngine *vm) { } void AutoMapDialog::execute() { - Screen &screen = *_vm->_screen; EventsManager &events = *_vm->_events; Interface &intf = *_vm->_interface; Map &map = *_vm->_map; @@ -91,7 +90,7 @@ void AutoMapDialog::execute() { v = map.mazeLookup(Common::Point(xDiff, yDiff), 0); if (map._currentSteppedOn) { - map._tileSprites.draw(screen, map.mazeDataCurrent()._surfaceTypes[v], + map._tileSprites.draw(0, map.mazeDataCurrent()._surfaceTypes[v], Common::Point(xp, yp)); } } @@ -103,7 +102,7 @@ void AutoMapDialog::execute() { int wallType = map.mazeDataCurrent()._wallTypes[v]; if (wallType && map._currentSteppedOn) - map._tileSprites.draw(screen, wallType, Common::Point(xp, yp)); + map._tileSprites.draw(0, wallType, Common::Point(xp, yp)); } } @@ -112,7 +111,7 @@ void AutoMapDialog::execute() { v = map.mazeLookup(Common::Point(xDiff, yDiff), 8); if (v && map._currentSteppedOn) - map._tileSprites.draw(screen, 1, Common::Point(xp, yp)); + map._tileSprites.draw(0, 1, Common::Point(xp, yp)); } } } else { @@ -125,7 +124,7 @@ void AutoMapDialog::execute() { v = map.mazeLookup(Common::Point(xDiff, yDiff), 0, 0xffff); if (v != INVALID_CELL && map._currentSteppedOn) - map._tileSprites.draw(screen, 0, Common::Point(xp, yp)); + map._tileSprites.draw(0, 0, Common::Point(xp, yp)); } } @@ -134,14 +133,14 @@ void AutoMapDialog::execute() { v = map.mazeLookup(Common::Point(pt.x - 8, yDiff), 0, 0xffff); if (v != INVALID_CELL && map._currentSurfaceId != 0 && map._currentSteppedOn) - map._tileSprites.draw(screen, 36 + map.mazeData()._surfaceTypes[ + map._tileSprites.draw(0, 36 + map.mazeData()._surfaceTypes[ map._currentSurfaceId], Common::Point(75, yp)); } // Draw thin tile portion on top-left corner of map v = map.mazeLookup(Common::Point(pt.x - 8, pt.y + 8), 0, 0xffff); if (v != INVALID_CELL && map._currentSurfaceId != 0 && map._currentSteppedOn) - map._tileSprites.draw(screen, 36 + map.mazeData()._surfaceTypes[ + map._tileSprites.draw(0, 36 + map.mazeData()._surfaceTypes[ map._currentSurfaceId], Common::Point(75, 35)); // Draw any thin tiles at the very top of the map @@ -149,7 +148,7 @@ void AutoMapDialog::execute() { v = map.mazeLookup(Common::Point(xDiff, pt.y + 8), 0, 0xffff); if (v != INVALID_CELL && map._currentSurfaceId != 0 && map._currentSteppedOn) - map._tileSprites.draw(screen, 36 + map.mazeData()._surfaceTypes[ + map._tileSprites.draw(0, 36 + map.mazeData()._surfaceTypes[ map._currentSurfaceId], Common::Point(xp, 35)); } @@ -159,7 +158,7 @@ void AutoMapDialog::execute() { v = map.mazeLookup(Common::Point(xDiff, yDiff), 0, 0xffff); if (v != INVALID_CELL && map._currentSurfaceId && map._currentSteppedOn) - map._tileSprites.draw(screen, map.mazeData()._surfaceTypes[ + map._tileSprites.draw(0, map.mazeData()._surfaceTypes[ map._currentSurfaceId], Common::Point(xp, yp)); } } @@ -216,7 +215,7 @@ void AutoMapDialog::execute() { } if (frame != -1 && map._currentSteppedOn) - map._tileSprites.draw(screen, frame, Common::Point(70, yp)); + map._tileSprites.draw(0, frame, Common::Point(70, yp)); // Draw walls on top edge of map v = map.mazeLookup(Common::Point(xDiff, pt.y + 8), 0); @@ -269,7 +268,7 @@ void AutoMapDialog::execute() { } if (frame != -1 && map._currentSteppedOn) - map._tileSprites.draw(screen, frame, Common::Point(xp, 30)); + map._tileSprites.draw(0, frame, Common::Point(xp, 30)); } // Draw any walls on the cells @@ -277,7 +276,7 @@ void AutoMapDialog::execute() { for (int xCtr = 0, xp = 80, xDiff = pt.x - 7; xCtr < 16; ++xCtr, xp += 10, ++xDiff) { // Draw the arrow if at the correct position if ((arrowPt.x / 10) == xCtr && (14 - (arrowPt.y / 10)) == yCtr && frameEndFlag) { - globalSprites.draw(screen, party._mazeDirection + 1, + globalSprites.draw(0, party._mazeDirection + 1, Common::Point(arrowPt.x + 81, arrowPt.y + 29)); } @@ -331,7 +330,7 @@ void AutoMapDialog::execute() { } if (frame != -1 && map._currentSteppedOn) - map._tileSprites.draw(screen, frame, Common::Point(xp, yp)); + map._tileSprites.draw(0, frame, Common::Point(xp, yp)); v = map.mazeLookup(Common::Point(xDiff, yDiff), 0); switch (v) { @@ -382,7 +381,7 @@ void AutoMapDialog::execute() { } if (frame != -1 && map._currentSteppedOn) - map._tileSprites.draw(screen, frame, Common::Point(xp, yp)); + map._tileSprites.draw(0, frame, Common::Point(xp, yp)); } } @@ -392,16 +391,16 @@ void AutoMapDialog::execute() { v = map.mazeLookup(Common::Point(xDiff, yDiff), 0, 0xffff); if (v == INVALID_CELL || !map._currentSteppedOn) - map._tileSprites.draw(screen, 1, Common::Point(xp, yp)); + map._tileSprites.draw(0, 1, Common::Point(xp, yp)); } } } windows[5].frame(); if (!map._isOutdoors) { - map._tileSprites.draw(screen, 52, Common::Point(76, 30)); + map._tileSprites.draw(0, 52, Common::Point(76, 30)); } else if (frameEndFlag) { - globalSprites.draw(screen, party._mazeDirection + 1, + globalSprites.draw(0, party._mazeDirection + 1, Common::Point(arrowPt.x + 76, arrowPt.y + 25)); } diff --git a/engines/xeen/dialogs_char_info.cpp b/engines/xeen/dialogs_char_info.cpp index 36ed32a2e8..187845fe4e 100644 --- a/engines/xeen/dialogs_char_info.cpp +++ b/engines/xeen/dialogs_char_info.cpp @@ -40,7 +40,6 @@ void CharacterInfo::execute(int charIndex) { EventsManager &events = *_vm->_events; Interface &intf = *_vm->_interface; Party &party = *_vm->_party; - Screen &screen = *_vm->_screen; Windows &windows = *_vm->_windows; bool redrawFlag = true; @@ -319,12 +318,11 @@ Common::String CharacterInfo::loadCharacterDetails(const Character &c) { } void CharacterInfo::showCursor(bool flag) { - Screen &screen = *_vm->_screen; const int CURSOR_X[5] = { 9, 60, 111, 176, 0 }; const int CURSOR_Y[5] = { 23, 46, 69, 92, 115 }; if (_cursorCell < 20) { - _iconSprites.draw(screen, flag ? 49 : 48, + _iconSprites.draw(0, flag ? 49 : 48, Common::Point(CURSOR_X[_cursorCell / 5], CURSOR_Y[_cursorCell % 5])); } } diff --git a/engines/xeen/dialogs_dismiss.cpp b/engines/xeen/dialogs_dismiss.cpp index 9eb47bdcac..25edb6ba89 100644 --- a/engines/xeen/dialogs_dismiss.cpp +++ b/engines/xeen/dialogs_dismiss.cpp @@ -34,7 +34,6 @@ void Dismiss::show(XeenEngine *vm) { } void Dismiss::execute() { - Screen &screen = *_vm->_screen; EventsManager &events = *_vm->_events; Interface &intf = *_vm->_interface; Party &party = *_vm->_party; diff --git a/engines/xeen/dialogs_error.cpp b/engines/xeen/dialogs_error.cpp index d8697b05d9..7582f17986 100644 --- a/engines/xeen/dialogs_error.cpp +++ b/engines/xeen/dialogs_error.cpp @@ -34,7 +34,6 @@ void ErrorDialog::show(XeenEngine *vm, const Common::String &msg, ErrorWaitType } void ErrorDialog::execute(const Common::String &msg, ErrorWaitType waitType) { - Screen &screen = *_vm->_screen; EventsManager &events = *_vm->_events; Windows &windows = *_vm->_windows; Window &w = windows[6]; diff --git a/engines/xeen/dialogs_exchange.cpp b/engines/xeen/dialogs_exchange.cpp index d8b4ba27ff..dc994ac8b9 100644 --- a/engines/xeen/dialogs_exchange.cpp +++ b/engines/xeen/dialogs_exchange.cpp @@ -33,7 +33,6 @@ void ExchangeDialog::show(XeenEngine *vm, Character *&c, int &charIndex) { } void ExchangeDialog::execute(Character *&c, int &charIndex) { - Screen &screen = *_vm->_screen; EventsManager &events = *_vm->_events; Interface &intf = *_vm->_interface; Party &party = *_vm->_party; diff --git a/engines/xeen/dialogs_input.cpp b/engines/xeen/dialogs_input.cpp index c18b964e73..05f3754732 100644 --- a/engines/xeen/dialogs_input.cpp +++ b/engines/xeen/dialogs_input.cpp @@ -118,8 +118,6 @@ Common::KeyCode Input::waitForKey(const Common::String &msg) { } void Input::animateCursor() { - Screen &screen = *_vm->_screen; - // Iterate through each frame _cursorAnimIndex = _cursorAnimIndex ? _cursorAnimIndex - 1 : 5; static const int CURSOR_ANIMATION_IDS[] = { 32, 124, 126, 127, 126, 124 }; @@ -128,9 +126,9 @@ void Input::animateCursor() { Common::String cursorStr = Common::String::format("%c", CURSOR_ANIMATION_IDS[_cursorAnimIndex]); - Common::Point writePos = screen._writePos; + Common::Point writePos = _window->_writePos; _window->writeString(cursorStr); - screen._writePos = writePos; + _window->_writePos = writePos; } /*------------------------------------------------------------------------*/ @@ -227,7 +225,6 @@ int Choose123::show(XeenEngine *vm, int numOptions) { int Choose123::execute(int numOptions) { EventsManager &events = *_vm->_events; Interface &intf = *_vm->_interface; - Screen &screen = *_vm->_screen; Town &town = *_vm->_town; Windows &windows = *_vm->_windows; @@ -235,8 +232,8 @@ int Choose123::execute(int numOptions) { _vm->_mode = MODE_DIALOG_123; loadButtons(numOptions); - _iconSprites.draw(screen, 7, Common::Point(232, 74)); - drawButtons(&screen); + _iconSprites.draw(0, 7, Common::Point(232, 74)); + drawButtons(&windows[0]); windows[34].update(); int result = -1; diff --git a/engines/xeen/dialogs_items.cpp b/engines/xeen/dialogs_items.cpp index 41ba1e635e..84016358f6 100644 --- a/engines/xeen/dialogs_items.cpp +++ b/engines/xeen/dialogs_items.cpp @@ -41,7 +41,6 @@ Character *ItemsDialog::execute(Character *c, ItemsMode mode) { EventsManager &events = *_vm->_events; Interface &intf = *_vm->_interface; Party &party = *_vm->_party; - Screen &screen = *_vm->_screen; Windows &windows = *_vm->_windows; Character *startingChar = c; @@ -100,7 +99,7 @@ Character *ItemsDialog::execute(Character *c, ItemsMode mode) { } windows[29].writeString(msg); - drawButtons(&screen); + drawButtons(&windows[0]); Common::fill(&arr[0], &arr[40], 0); itemIndex = -1; @@ -110,26 +109,26 @@ Character *ItemsDialog::execute(Character *c, ItemsMode mode) { lines.clear(); if (mode == ITEMMODE_CHAR_INFO || category != 3) { - _iconSprites.draw(screen, 8, Common::Point(148, 109)); + _iconSprites.draw(0, 8, Common::Point(148, 109)); } if (mode != ITEMMODE_ENCHANT && mode != ITEMMODE_RECHARGE && mode != ITEMMODE_TO_GOLD) { - _iconSprites.draw(screen, 10, Common::Point(182, 109)); - _iconSprites.draw(screen, 12, Common::Point(216, 109)); - _iconSprites.draw(screen, 14, Common::Point(250, 109)); + _iconSprites.draw(0, 10, Common::Point(182, 109)); + _iconSprites.draw(0, 12, Common::Point(216, 109)); + _iconSprites.draw(0, 14, Common::Point(250, 109)); } switch (mode) { case ITEMMODE_CHAR_INFO: - _iconSprites.draw(screen, 9, Common::Point(148, 109)); + _iconSprites.draw(0, 9, Common::Point(148, 109)); break; case ITEMMODE_BLACKSMITH: - _iconSprites.draw(screen, 11, Common::Point(182, 109)); + _iconSprites.draw(0, 11, Common::Point(182, 109)); break; case ITEMMODE_REPAIR: - _iconSprites.draw(screen, 15, Common::Point(250, 109)); + _iconSprites.draw(0, 15, Common::Point(250, 109)); break; case ITEMMODE_IDENTIFY: - _iconSprites.draw(screen, 13, Common::Point(216, 109)); + _iconSprites.draw(0, 13, Common::Point(216, 109)); break; default: break; @@ -776,7 +775,6 @@ int ItemsDialog::doItemOptions(Character &c, int actionIndex, int itemIndex, Ite EventsManager &events = *_vm->_events; Interface &intf = *_vm->_interface; Party &party = *_vm->_party; - Screen &screen = *_vm->_screen; Sound &sound = *_vm->_sound; Spells &spells = *_vm->_spells; Windows &windows = *_vm->_windows; @@ -807,7 +805,7 @@ int ItemsDialog::doItemOptions(Character &c, int actionIndex, int itemIndex, Ite w.open(); w.writeString(Common::String::format(Res.WHICH_ITEM, Res.ITEM_ACTIONS[actionIndex])); - _iconSprites.draw(screen, 0, Common::Point(235, 111)); + _iconSprites.draw(0, 0, Common::Point(235, 111)); w.update(); while (!_vm->shouldQuit()) { diff --git a/engines/xeen/dialogs_party.cpp b/engines/xeen/dialogs_party.cpp index 02be827078..e1e080a1db 100644 --- a/engines/xeen/dialogs_party.cpp +++ b/engines/xeen/dialogs_party.cpp @@ -696,7 +696,6 @@ void PartyDialog::createChar() { int PartyDialog::selectCharacter(bool isDelete, int firstDisplayChar) { EventsManager &events = *_vm->_events; Party &party = *_vm->_party; - Screen &screen = *_vm->_screen; Windows &windows = *_vm->_windows; Window &w = windows[28]; @@ -899,7 +898,6 @@ void PartyDialog::drawDice(SpriteResource &dice) { int PartyDialog::exchangeAttribute(int srcAttr) { EventsManager &events = *_vm->_events; - Screen &screen = *_vm->_screen; Windows &windows = *_vm->_windows; SpriteResource icons; icons.load("create2.icn"); @@ -982,7 +980,6 @@ bool PartyDialog::saveCharacter(Character &c, int classId, Map &map = *_vm->_map; Party &party = *_vm->_party; - Screen &screen = *_vm->_screen; Windows &windows = *_vm->_windows; Window &w = windows[6]; Common::String name; diff --git a/engines/xeen/dialogs_query.cpp b/engines/xeen/dialogs_query.cpp index bd20da262b..f1dcbf1891 100644 --- a/engines/xeen/dialogs_query.cpp +++ b/engines/xeen/dialogs_query.cpp @@ -34,7 +34,6 @@ bool Confirm::show(XeenEngine *vm, const Common::String &msg, int mode) { } bool Confirm::execute(const Common::String &msg, int mode) { - Screen &screen = *_vm->_screen; EventsManager &events = *_vm->_events; Windows &windows = *_vm->_windows; SpriteResource confirmSprites; @@ -103,7 +102,6 @@ bool YesNo::execute(bool type, bool townFlag) { Map &map = *_vm->_map; Party &party = *_vm->_party; Resources &res = *_vm->_resources; - Screen &screen = *_vm->_screen; Town &town = *_vm->_town; Windows &windows = *_vm->_windows; SpriteResource confirmSprites; @@ -114,9 +112,9 @@ bool YesNo::execute(bool type, bool townFlag) { if (!type) { confirmSprites.load("confirm.icn"); - res._globalSprites.draw(screen, 7, Common::Point(232, 74)); - confirmSprites.draw(screen, 0, Common::Point(235, 75)); - confirmSprites.draw(screen, 2, Common::Point(260, 75)); + res._globalSprites.draw(0, 7, Common::Point(232, 74)); + confirmSprites.draw(0, 0, Common::Point(235, 75)); + confirmSprites.draw(0, 2, Common::Point(260, 75)); windows[34].update(); addButton(Common::Rect(235, 75, 259, 95), Common::KEYCODE_y, &confirmSprites); diff --git a/engines/xeen/dialogs_quests.cpp b/engines/xeen/dialogs_quests.cpp index 75b44669c8..6667bf5262 100644 --- a/engines/xeen/dialogs_quests.cpp +++ b/engines/xeen/dialogs_quests.cpp @@ -39,7 +39,6 @@ void Quests::show(XeenEngine *vm) { void Quests::execute() { EventsManager &events = *_vm->_events; Party &party = *_vm->_party; - Screen &screen = *_vm->_screen; Windows &windows = *_vm->_windows; Mode oldMode = _vm->_mode; int count = 0; @@ -60,7 +59,7 @@ void Quests::execute() { } windows[29].writeString(Res.QUESTS_DIALOG_TEXT); - drawButtons(&screen); + drawButtons(&windows[0]); while (!_vm->shouldQuit()) { Common::String lines[MAX_DIALOG_LINES]; diff --git a/engines/xeen/dialogs_quick_ref.cpp b/engines/xeen/dialogs_quick_ref.cpp index 118db09e84..9254aa21f2 100644 --- a/engines/xeen/dialogs_quick_ref.cpp +++ b/engines/xeen/dialogs_quick_ref.cpp @@ -36,7 +36,6 @@ void QuickReferenceDialog::execute() { Combat &combat = *_vm->_combat; EventsManager &events = *_vm->_events; Party &party = *_vm->_party; - Screen &screen = *_vm->_screen; Windows &windows = *_vm->_windows; Common::String lines[8]; diff --git a/engines/xeen/dialogs_spells.cpp b/engines/xeen/dialogs_spells.cpp index ed0857a152..f83a41cadc 100644 --- a/engines/xeen/dialogs_spells.cpp +++ b/engines/xeen/dialogs_spells.cpp @@ -43,7 +43,6 @@ Character *SpellsDialog::execute(ButtonContainer *priorDialog, Character *c, int EventsManager &events = *_vm->_events; Interface &intf = *_vm->_interface; Party &party = *_vm->_party; - Screen &screen = *_vm->_screen; Sound &sound = *_vm->_sound; Spells &spells = *_vm->_spells; Windows &windows = *_vm->_windows; @@ -108,9 +107,9 @@ Character *SpellsDialog::execute(ButtonContainer *priorDialog, Character *c, int isCasting ? c->_currentSp : party._gold )); - _scrollSprites.draw(screen, 4, Common::Point(39, 26)); - _scrollSprites.draw(screen, 0, Common::Point(187, 26)); - _scrollSprites.draw(screen, 2, Common::Point(187, 111)); + _scrollSprites.draw(0, 4, Common::Point(39, 26)); + _scrollSprites.draw(0, 0, Common::Point(187, 26)); + _scrollSprites.draw(0, 2, Common::Point(187, 111)); if (isCasting) _scrollSprites.draw(windows[25], 5, Common::Point(132, 123)); @@ -163,7 +162,7 @@ Character *SpellsDialog::execute(ButtonContainer *priorDialog, Character *c, int } if (priorDialog != nullptr) - priorDialog->drawButtons(&screen); + priorDialog->drawButtons(&windows[0]); windows[10].update(); } } @@ -479,7 +478,6 @@ int CastSpell::execute(Character *&c) { EventsManager &events = *_vm->_events; Interface &intf = *_vm->_interface; Party &party = *_vm->_party; - Screen &screen = *_vm->_screen; Spells &spells = *_vm->_spells; Windows &windows = *_vm->_windows; Window &w = windows[10]; @@ -503,7 +501,7 @@ int CastSpell::execute(Character *&c) { w.writeString(Common::String::format(Res.CAST_SPELL_DETAILS, c->_name.c_str(), spells._spellNames[spellId].c_str(), spCost, gemCost, c->_currentSp)); - drawButtons(&screen); + drawButtons(&windows[0]); w.update(); redrawFlag = false; @@ -666,7 +664,6 @@ int SelectElement::execute(int spellId) { Combat &combat = *_vm->_combat; EventsManager &events = *_vm->_events; Interface &intf = *_vm->_interface; - Screen &screen = *_vm->_screen; Spells &spells = *_vm->_spells; Windows &windows = *_vm->_windows; Window &w = windows[15]; @@ -678,7 +675,7 @@ int SelectElement::execute(int spellId) { w.open(); w.writeString(Res.WHICH_ELEMENT1); - drawButtons(&screen); + drawButtons(&windows[0]); w.update(); while (result == 999) { @@ -687,7 +684,7 @@ int SelectElement::execute(int spellId) { intf.draw3d(true); w.frame(); w.writeString(Res.WHICH_ELEMENT2); - drawButtons(&screen); + drawButtons(&windows[0]); w.update(); do { @@ -745,7 +742,6 @@ void NotWhileEngaged::show(XeenEngine *vm, int spellId) { void NotWhileEngaged::execute(int spellId) { EventsManager &events = *_vm->_events; - Screen &screen = *_vm->_screen; Spells &spells = *_vm->_spells; Windows &windows = *_vm->_windows; Window &w = windows[6]; @@ -781,7 +777,6 @@ bool LloydsBeacon::execute() { Interface &intf = *_vm->_interface; Map &map = *_vm->_map; Party &party = *_vm->_party; - Screen &screen = *_vm->_screen; Sound &sound = *_vm->_sound; Windows &windows = *_vm->_windows; Window &w = windows[10]; @@ -815,7 +810,7 @@ bool LloydsBeacon::execute() { w.open(); w.writeString(Common::String::format(Res.LLOYDS_BEACON, mapName.c_str(), c._lloydPosition.x, c._lloydPosition.y)); - drawButtons(&screen); + drawButtons(&windows[0]); w.update(); bool result = true; @@ -886,7 +881,6 @@ int Teleport::show(XeenEngine *vm) { int Teleport::execute() { Map &map = *_vm->_map; Party &party = *_vm->_party; - Screen &screen = *_vm->_screen; Windows &windows = *_vm->_windows; Window &w = windows[6]; Common::String num; @@ -993,7 +987,6 @@ void IdentifyMonster::execute() { EventsManager &events = *_vm->_events; Interface &intf = *_vm->_interface; Map &map = *_vm->_map; - Screen &screen = *_vm->_screen; Sound &sound = *_vm->_sound; Windows &windows = *_vm->_windows; Window &w = windows[17]; diff --git a/engines/xeen/font.cpp b/engines/xeen/font.cpp index cbb626970a..2a19a770f9 100644 --- a/engines/xeen/font.cpp +++ b/engines/xeen/font.cpp @@ -26,13 +26,18 @@ namespace Xeen { -FontSurface::FontSurface() : XSurface(), _fontData(nullptr), _bgColor(DEFAULT_BG_COLOR), - _fontReduced(false),_fontJustify(JUSTIFY_NONE), _msgWraps(false), _displayString(nullptr) { +const byte *FontData::_fontData; +Common::Point FontData::_writePos; +byte FontData::_textColors[4]; +byte FontData::_bgColor; +bool FontData::_fontReduced; +Justify FontData::_fontJustify; + +FontSurface::FontSurface() : XSurface() { setTextColor(0); } -FontSurface::FontSurface(int wv, int hv) : XSurface(wv, hv), _fontData(nullptr), _msgWraps(false), - _bgColor(DEFAULT_BG_COLOR), _fontReduced(false), _fontJustify(JUSTIFY_NONE), _displayString(nullptr) { +FontSurface::FontSurface(int wv, int hv) : XSurface(wv, hv), _msgWraps(false), _displayString(nullptr) { create(w, h); setTextColor(0); } diff --git a/engines/xeen/font.h b/engines/xeen/font.h index 021205d5e5..d4f10d64b9 100644 --- a/engines/xeen/font.h +++ b/engines/xeen/font.h @@ -33,7 +33,16 @@ namespace Xeen { enum Justify { JUSTIFY_NONE = 0, JUSTIFY_CENTER = 1, JUSTIFY_RIGHT = 2 }; -class FontSurface: public XSurface { +struct FontData { + static const byte *_fontData; + static Common::Point _writePos; + static byte _textColors[4]; + static byte _bgColor; + static bool _fontReduced; + static Justify _fontJustify; +}; + +class FontSurface: public XSurface, public FontData { private: const char *_displayString; bool _msgWraps; @@ -67,13 +76,6 @@ private: * Wrie a character to the surface */ void writeChar(char c, const Common::Rect &clipRect); -public: - const byte *_fontData; - Common::Point _writePos; - byte _textColors[4]; - byte _bgColor; - bool _fontReduced; - Justify _fontJustify; public: FontSurface(); FontSurface(int wv, int hv); diff --git a/engines/xeen/interface.cpp b/engines/xeen/interface.cpp index 21073bad5d..7db7e850c0 100644 --- a/engines/xeen/interface.cpp +++ b/engines/xeen/interface.cpp @@ -50,10 +50,9 @@ void PartyDrawer::drawParty(bool updateFlag) { Combat &combat = *_vm->_combat; Party &party = *_vm->_party; Resources &res = *_vm->_resources; - Screen &screen = *_vm->_screen; Windows &windows = *_vm->_windows; bool inCombat = _vm->_mode == MODE_COMBAT; - _restoreSprites.draw(screen, 0, Common::Point(8, 149)); + _restoreSprites.draw(0, 0, Common::Point(8, 149)); // Handle drawing the party faces uint partyCount = inCombat ? combat._combatParty.size() : party._activeParty.size(); @@ -66,7 +65,7 @@ void PartyDrawer::drawParty(bool updateFlag) { if (charFrame > 4) charFrame -= 5; - sprites->draw(screen, charFrame, Common::Point(Res.CHAR_FACES_X[idx], 150)); + sprites->draw(0, charFrame, Common::Point(Res.CHAR_FACES_X[idx], 150)); } for (uint idx = 0; idx < partyCount; ++idx) { @@ -86,11 +85,11 @@ void PartyDrawer::drawParty(bool updateFlag) { else frame = 1; - _hpSprites.draw(screen, frame, Common::Point(Res.HP_BARS_X[idx], 182)); + _hpSprites.draw(0, frame, Common::Point(Res.HP_BARS_X[idx], 182)); } if (_hiliteChar != HILIGHT_CHAR_NONE) - res._globalSprites.draw(screen, 8, Common::Point(Res.CHAR_FACES_X[_hiliteChar] - 1, 149)); + res._globalSprites.draw(0, 8, Common::Point(Res.CHAR_FACES_X[_hiliteChar] - 1, 149)); if (updateFlag) windows[33].update(); @@ -98,18 +97,17 @@ void PartyDrawer::drawParty(bool updateFlag) { void PartyDrawer::highlightChar(int charId) { Resources &res = *_vm->_resources; - Screen &screen = *_vm->_screen; Windows &windows = *_vm->_windows; if (charId != _hiliteChar && _hiliteChar != HILIGHT_CHAR_DISABLED) { // Handle deselecting any previusly selected char if (_hiliteChar != HILIGHT_CHAR_NONE) { - res._globalSprites.draw(screen, 9 + _hiliteChar, + res._globalSprites.draw(0, 9 + _hiliteChar, Common::Point(Res.CHAR_FACES_X[_hiliteChar] - 1, 149)); } // Highlight new character - res._globalSprites.draw(screen, 8, Common::Point(Res.CHAR_FACES_X[charId] - 1, 149)); + res._globalSprites.draw(0, 8, Common::Point(Res.CHAR_FACES_X[charId] - 1, 149)); _hiliteChar = charId; windows[33].update(); } @@ -117,11 +115,10 @@ void PartyDrawer::highlightChar(int charId) { void PartyDrawer::unhighlightChar() { Resources &res = *_vm->_resources; - Screen &screen = *_vm->_screen; Windows &windows = *_vm->_windows; if (_hiliteChar != HILIGHT_CHAR_NONE) { - res._globalSprites.draw(screen, _hiliteChar + 9, + res._globalSprites.draw(0, _hiliteChar + 9, Common::Point(Res.CHAR_FACES_X[_hiliteChar] - 1, 149)); _hiliteChar = HILIGHT_CHAR_NONE; windows[33].update(); @@ -1749,7 +1746,6 @@ void Interface::drawMiniMap() { void Interface::assembleBorder() { Combat &combat = *_vm->_combat; Resources &res = *_vm->_resources; - Screen &screen = *_vm->_screen; Windows &windows = *_vm->_windows; // Draw the outer frame @@ -1762,13 +1758,13 @@ void Interface::assembleBorder() { _levitateUIFrame = (_levitateUIFrame + 1) % 12; // Draw UI element to indicate whether can spot hidden doors - _borderSprites.draw(screen, + _borderSprites.draw(0, (_thinWall && _vm->_party->checkSkill(SPOT_DOORS)) ? _spotDoorsUIFrame + 28 : 28, Common::Point(194, 91)); _spotDoorsUIFrame = (_spotDoorsUIFrame + 1) % 12; // Draw UI element to indicate whether can sense danger - _borderSprites.draw(screen, + _borderSprites.draw(0, (combat._dangerPresent && _vm->_party->checkSkill(DANGER_SENSE)) ? _spotDoorsUIFrame + 40 : 40, Common::Point(107, 9)); _dangerSenseUIFrame = (_dangerSenseUIFrame + 1) % 12; @@ -1791,58 +1787,57 @@ void Interface::assembleBorder() { _face2UIFrame = 8; } - _borderSprites.draw(screen, _face1UIFrame, Common::Point(0, 32)); - _borderSprites.draw(screen, - windows[10]._enabled || windows[2]._enabled ? - 52 : _face2UIFrame, + _borderSprites.draw(0, _face1UIFrame, Common::Point(0, 32)); + _borderSprites.draw(0, + windows[10]._enabled || windows[2]._enabled ? 52 : _face2UIFrame, Common::Point(215, 32)); // Draw resistence indicators if (!windows[10]._enabled && !windows[2]._enabled && windows[38]._enabled) { - _fecpSprites.draw(screen, _vm->_party->_fireResistence ? 1 : 0, + _fecpSprites.draw(0, _vm->_party->_fireResistence ? 1 : 0, Common::Point(2, 2)); - _fecpSprites.draw(screen, _vm->_party->_electricityResistence ? 3 : 2, + _fecpSprites.draw(0, _vm->_party->_electricityResistence ? 3 : 2, Common::Point(219, 2)); - _fecpSprites.draw(screen, _vm->_party->_coldResistence ? 5 : 4, + _fecpSprites.draw(0, _vm->_party->_coldResistence ? 5 : 4, Common::Point(2, 134)); - _fecpSprites.draw(screen, _vm->_party->_poisonResistence ? 7 : 6, + _fecpSprites.draw(0, _vm->_party->_poisonResistence ? 7 : 6, Common::Point(219, 134)); } else { - _fecpSprites.draw(screen, _vm->_party->_fireResistence ? 9 : 8, + _fecpSprites.draw(0, _vm->_party->_fireResistence ? 9 : 8, Common::Point(8, 8)); - _fecpSprites.draw(screen, _vm->_party->_electricityResistence ? 10 : 11, + _fecpSprites.draw(0, _vm->_party->_electricityResistence ? 10 : 11, Common::Point(219, 8)); - _fecpSprites.draw(screen, _vm->_party->_coldResistence ? 12 : 13, + _fecpSprites.draw(0, _vm->_party->_coldResistence ? 12 : 13, Common::Point(8, 134)); - _fecpSprites.draw(screen, _vm->_party->_poisonResistence ? 14 : 15, + _fecpSprites.draw(0, _vm->_party->_poisonResistence ? 14 : 15, Common::Point(219, 134)); } // Draw UI element for blessed - _blessSprites.draw(screen, 16, Common::Point(33, 137)); + _blessSprites.draw(0, 16, Common::Point(33, 137)); if (_vm->_party->_blessed) { _blessedUIFrame = (_blessedUIFrame + 1) % 4; - _blessSprites.draw(screen, _blessedUIFrame, Common::Point(33, 137)); + _blessSprites.draw(0, _blessedUIFrame, Common::Point(33, 137)); } // Draw UI element for power shield if (_vm->_party->_powerShield) { _powerShieldUIFrame = (_powerShieldUIFrame + 1) % 4; - _blessSprites.draw(screen, _powerShieldUIFrame + 4, + _blessSprites.draw(0, _powerShieldUIFrame + 4, Common::Point(55, 137)); } // Draw UI element for holy bonus if (_vm->_party->_holyBonus) { _holyBonusUIFrame = (_holyBonusUIFrame + 1) % 4; - _blessSprites.draw(screen, _holyBonusUIFrame + 8, Common::Point(160, 137)); + _blessSprites.draw(0, _holyBonusUIFrame + 8, Common::Point(160, 137)); } // Draw UI element for heroism if (_vm->_party->_heroism) { _heroismUIFrame = (_heroismUIFrame + 1) % 4; - _blessSprites.draw(screen, _heroismUIFrame + 12, Common::Point(182, 137)); + _blessSprites.draw(0, _heroismUIFrame + 12, Common::Point(182, 137)); } // Draw direction character if direction sense is active @@ -1863,7 +1858,6 @@ void Interface::doCombat() { EventsManager &events = *_vm->_events; Map &map = *_vm->_map; Party &party = *_vm->_party; - Screen &screen = *_vm->_screen; Scripts &scripts = *_vm->_scripts; Spells &spells = *_vm->_spells; Sound &sound = *_vm->_sound; @@ -1926,7 +1920,7 @@ void Interface::doCombat() { // Write out the description of the monsters being battled w.writeString(combat.getMonsterDescriptions()); - _iconSprites.draw(screen, 32, Common::Point(233, combat._monsterIndex * 10 + 27), + _iconSprites.draw(0, 32, Common::Point(233, combat._monsterIndex * 10 + 27), 0x8010000); w.update(); @@ -2244,7 +2238,6 @@ void Interface::spellFX(Character *c) { Combat &combat = *_vm->_combat; EventsManager &events = *_vm->_events; Party &party = *_vm->_party; - Screen &screen = *_vm->_screen; Sound &sound = *_vm->_sound; Windows &windows = *_vm->_windows; @@ -2275,7 +2268,7 @@ void Interface::spellFX(Character *c) { for (int frameNum = 0; frameNum < 4; ++frameNum) { events.updateGameCounter(); - _spellFxSprites.draw(screen, frameNum, Common::Point( + _spellFxSprites.draw(0, frameNum, Common::Point( Res.CHAR_FACES_X[charIndex], 150)); if (!windows[11]._enabled) diff --git a/engines/xeen/party.cpp b/engines/xeen/party.cpp index e392c2e060..901fe619ea 100644 --- a/engines/xeen/party.cpp +++ b/engines/xeen/party.cpp @@ -568,7 +568,6 @@ void Party::giveTreasure() { Combat &combat = *_vm->_combat; EventsManager &events = *_vm->_events; Interface &intf = *_vm->_interface; - Screen &screen = *_vm->_screen; Scripts &scripts = *_vm->_scripts; Sound &sound = *_vm->_sound; Windows &windows = *_vm->_windows; @@ -704,7 +703,6 @@ bool Party::arePacksFull() const { void Party::giveTreasureToCharacter(Character &c, ItemCategory category, int itemIndex) { EventsManager &events = *_vm->_events; - Screen &screen = *_vm->_screen; Sound &sound = *_vm->_sound; Windows &windows = *_vm->_windows; Window &w = windows[10]; diff --git a/engines/xeen/screen.cpp b/engines/xeen/screen.cpp index b8cf1786b0..54d0b8f4fd 100644 --- a/engines/xeen/screen.cpp +++ b/engines/xeen/screen.cpp @@ -35,79 +35,6 @@ Screen::Screen(XeenEngine *vm) : _vm(vm) { create(SCREEN_WIDTH, SCREEN_HEIGHT); Common::fill(&_tempPalette[0], &_tempPalette[PALETTE_SIZE], 0); Common::fill(&_mainPalette[0], &_mainPalette[PALETTE_SIZE], 0); - - // Load font data for the screen - File f("fnt"); - byte *data = new byte[f.size()]; - f.read(data, f.size()); - _fontData = data; -} - -Screen::~Screen() { - delete[] _fontData; -} - -void Screen::update() { - // Merge the dirty rects - mergeDirtyRects(); - - // Loop through copying dirty areas to the physical screen - Common::List::iterator i; - for (i = _dirtyRects.begin(); i != _dirtyRects.end(); ++i) { - const Common::Rect &r = *i; - const byte *srcP = (const byte *)getBasePtr(r.left, r.top); - g_system->copyRectToScreen(srcP, this->pitch, r.left, r.top, - r.width(), r.height()); - } - - // Signal the physical screen to update - g_system->updateScreen(); - _dirtyRects.clear(); -} - -void Screen::addDirtyRect(const Common::Rect &r) { - assert(r.isValidRect() && r.width() > 0 && r.height() > 0 - && r.left >= 0 && r.top >= 0 - && r.right <= SCREEN_WIDTH && r.bottom <= SCREEN_HEIGHT); - _dirtyRects.push_back(r); -} - -void Screen::mergeDirtyRects() { - Common::List::iterator rOuter, rInner; - - // Ensure dirty rect list has at least two entries - rOuter = _dirtyRects.begin(); - for (int i = 0; i < 2; ++i, ++rOuter) { - if (rOuter == _dirtyRects.end()) - return; - } - - // Process the dirty rect list to find any rects to merge - for (rOuter = _dirtyRects.begin(); rOuter != _dirtyRects.end(); ++rOuter) { - rInner = rOuter; - while (++rInner != _dirtyRects.end()) { - - if ((*rOuter).intersects(*rInner)) { - // these two rectangles overlap or - // are next to each other - merge them - - unionRectangle(*rOuter, *rOuter, *rInner); - - // remove the inner rect from the list - _dirtyRects.erase(rInner); - - // move back to beginning of list - rInner = rOuter; - } - } - } -} - -bool Screen::unionRectangle(Common::Rect &destRect, const Common::Rect &src1, const Common::Rect &src2) { - destRect = src1; - destRect.extend(src2); - - return !destRect.isEmpty(); } void Screen::loadPalette(const Common::String &name) { diff --git a/engines/xeen/screen.h b/engines/xeen/screen.h index 8e72e723c9..eebc192712 100644 --- a/engines/xeen/screen.h +++ b/engines/xeen/screen.h @@ -23,11 +23,8 @@ #ifndef XEEN_SCREEN_H #define XEEN_SCREEN_H -//#include "common/scummsys.h" -//#include "common/system.h" -// #include "common/array.h" -//#include "common/keyboard.h" #include "common/rect.h" +#include "graphics/screen.h" #include "xeen/font.h" #include "xeen/sprites.h" @@ -40,20 +37,15 @@ namespace Xeen { class XeenEngine; -class Screen: public FontSurface { +class Screen: public Graphics::Screen { private: XeenEngine *_vm; - Common::List _dirtyRects; byte _mainPalette[PALETTE_SIZE]; byte _tempPalette[PALETTE_SIZE]; XSurface _pages[2]; XSurface _savedScreens[10]; bool _fadeIn; - void mergeDirtyRects(); - - bool unionRectangle(Common::Rect &destRect, const Common::Rect &src1, const Common::Rect &src2); - /** * Mark the entire screen for drawing */ @@ -64,17 +56,15 @@ private: void updatePalette(); void updatePalette(const byte *pal, int start, int count16); -public: - /** - * Adds an area that requires redrawing on the next frame update - */ - virtual void addDirtyRect(const Common::Rect &r); public: Screen(XeenEngine *vm); + virtual ~Screen() {} - virtual ~Screen(); - - void update(); + /** + * Base method that descendent classes can override for recording affected + * dirty areas of the surface + */ + virtual void addDirtyRect(const Common::Rect &r) { Graphics::Screen::addDirtyRect(r); } /** * Load a palette resource into the temporary palette diff --git a/engines/xeen/scripts.cpp b/engines/xeen/scripts.cpp index 9b28a0cc5e..5c09f9f5bd 100644 --- a/engines/xeen/scripts.cpp +++ b/engines/xeen/scripts.cpp @@ -136,7 +136,6 @@ int Scripts::checkEvents() { Interface &intf = *_vm->_interface; Map &map = *_vm->_map; Party &party = *_vm->_party; - Screen &screen = *_vm->_screen; Sound &sound = *_vm->_sound; Town &town = *_vm->_town; Windows &windows = *_vm->_windows; @@ -1819,7 +1818,6 @@ bool Scripts::copyProtectionCheck() { void Scripts::display(bool justifyFlag, int var46) { EventsManager &events = *_vm->_events; Interface &intf = *_vm->_interface; - Screen &screen = *_vm->_screen; Windows &windows = *_vm->_windows; Window &w = windows[_windowIndex]; diff --git a/engines/xeen/sprites.cpp b/engines/xeen/sprites.cpp index 8070368a30..430505e7d2 100644 --- a/engines/xeen/sprites.cpp +++ b/engines/xeen/sprites.cpp @@ -308,6 +308,12 @@ void SpriteResource::draw(Window &dest, int frame, const Common::Point &destPos, draw(dest, frame, destPos, dest.getBounds(), flags, scale); } +void SpriteResource::draw(int windowIndex, int frame, const Common::Point &destPos, + int flags, int scale) { + Window &win = (*g_vm->_windows)[windowIndex]; + draw(win, frame, destPos, flags, scale); +} + void SpriteResource::draw(XSurface &dest, int frame, const Common::Point &destPos, const Common::Rect &bounds, int flags, int scale) { @@ -320,6 +326,10 @@ void SpriteResource::draw(XSurface &dest, int frame) { draw(dest, frame, Common::Point()); } +void SpriteResource::draw(int windowIndex, int frame) { + draw((*g_vm->_windows)[windowIndex], frame, Common::Point()); +} + uint SpriteResource::getScaledVal(int xy, uint16 &scaleMask) { if (!xy) return 0; diff --git a/engines/xeen/sprites.h b/engines/xeen/sprites.h index b61ec83cd6..b94b7c9b7e 100644 --- a/engines/xeen/sprites.h +++ b/engines/xeen/sprites.h @@ -63,6 +63,12 @@ private: void draw(XSurface &dest, int frame, const Common::Point &destPos, const Common::Rect &bounds, int flags = 0, int scale = 0); + /** + * Draw the sprite onto a given window + */ + void draw(int windowNum, int frame, const Common::Point &destPos, + const Common::Rect &bounds, int flags = 0, int scale = 0); + /** * Draw a sprite frame based on a passed offset into the data stream */ @@ -99,17 +105,34 @@ public: */ void clear(); + /** + * Draw a sprite onto a surface + */ void draw(XSurface &dest, int frame, const Common::Point &destPos, int flags = 0, int scale = 0); + /** + * Draw a sprite onto a specific window + */ void draw(Window &dest, int frame, const Common::Point &destPos, int flags = 0, int scale = 0); + /** + * Draw a sprite onto a given window + */ + void draw(int windowIndex, int frame, const Common::Point &destPos, + int flags = 0, int scale = 0); + /** * Draw the sprite onto the given surface */ void draw(XSurface &dest, int frame); + /** + * Draw the sprite onto the given window + */ + void draw(int windowIndex, int frame); + int size() const { return _index.size(); } bool empty() const { return _index.size() == 0; } diff --git a/engines/xeen/town.cpp b/engines/xeen/town.cpp index d4877381dd..74aad09f1d 100644 --- a/engines/xeen/town.cpp +++ b/engines/xeen/town.cpp @@ -68,7 +68,6 @@ int Town::townAction(TownAction actionId) { Interface &intf = *_vm->_interface; Map &map = *_vm->_map; Party &party = *_vm->_party; - Screen &screen = *_vm->_screen; Sound &sound = *_vm->_sound; Windows &windows = *_vm->_windows; bool isDarkCc = _vm->_files->_isDarkCc; @@ -220,9 +219,9 @@ int Town::townAction(TownAction actionId) { intf._spotDoorsUIFrame = 0; intf._levitateUIFrame = 0; - _townSprites[_drawFrameIndex / 8].draw(screen, _drawFrameIndex % 8, _townPos); + _townSprites[_drawFrameIndex / 8].draw(0, _drawFrameIndex % 8, _townPos); if (actionId == BANK && isDarkCc) { - _townSprites[4].draw(screen, _vm->getRandomNumber(13, 18), + _townSprites[4].draw(0, _vm->getRandomNumber(13, 18), Common::Point(8, 30)); } @@ -231,7 +230,7 @@ int Town::townAction(TownAction actionId) { // Open up the window and write the string windows[10].open(); windows[10].writeString(title); - drawButtons(&screen); + drawButtons(&windows[0]); windows[0].update(); intf.highlightChar(0); @@ -250,7 +249,7 @@ int Town::townAction(TownAction actionId) { title = createTownText(*charP); windows[10].writeString(title); - drawButtons(&screen); + drawButtons(&windows[0]); } while (_buttonValue != Common::KEYCODE_ESCAPE); switch (actionId) { @@ -598,7 +597,6 @@ Character *Town::doTavernOptions(Character *c) { Interface &intf = *_vm->_interface; Map &map = *_vm->_map; Party &party = *_vm->_party; - Screen &screen = *_vm->_screen; Sound &sound = *_vm->_sound; Windows &windows = *_vm->_windows; bool isDarkCc = _vm->_files->_isDarkCc; @@ -747,7 +745,7 @@ Character *Town::doTavernOptions(Character *c) { windows[10].writeString(Common::String::format(Res.TAVERN_TEXT, c->_name.c_str(), Res.HAVE_A_DRINK, XeenEngine::printMil(party._gold).c_str())); - drawButtons(&screen); + drawButtons(&windows[0]); windows[10].update(); townWait(); } else { @@ -756,7 +754,7 @@ Character *Town::doTavernOptions(Character *c) { windows[10].writeString(Common::String::format(Res.TAVERN_TEXT, c->_name.c_str(), Res.YOURE_DRUNK, XeenEngine::printMil(party._gold).c_str())); - drawButtons(&screen); + drawButtons(&windows[0]); windows[10].update(); townWait(); } else if (party.subtract(0, 1, 0, WT_2)) { @@ -1062,7 +1060,6 @@ void Town::depositWithdrawl(int choice) { void Town::drawTownAnim(bool flag) { Interface &intf = *_vm->_interface; - Screen &screen = *_vm->_screen; Sound &sound = *_vm->_sound; Windows &windows = *_vm->_windows; bool isDarkCc = _vm->_files->_isDarkCc; @@ -1070,23 +1067,23 @@ void Town::drawTownAnim(bool flag) { if (_townActionId == 1) { if (sound.isPlaying()) { if (isDarkCc) { - _townSprites[_drawFrameIndex / 8].draw(screen, _drawFrameIndex % 8, _townPos); - _townSprites[2].draw(screen, _vm->getRandomNumber(11) == 1 ? 9 : 10, + _townSprites[_drawFrameIndex / 8].draw(0, _drawFrameIndex % 8, _townPos); + _townSprites[2].draw(0, _vm->getRandomNumber(11) == 1 ? 9 : 10, Common::Point(34, 33)); - _townSprites[2].draw(screen, _vm->getRandomNumber(5) + 3, + _townSprites[2].draw(0, _vm->getRandomNumber(5) + 3, Common::Point(34, 54)); } } else { - _townSprites[_drawFrameIndex / 8].draw(screen, _drawFrameIndex % 8, _townPos); + _townSprites[_drawFrameIndex / 8].draw(0, _drawFrameIndex % 8, _townPos); if (isDarkCc) { - _townSprites[2].draw(screen, _vm->getRandomNumber(11) == 1 ? 9 : 10, + _townSprites[2].draw(0, _vm->getRandomNumber(11) == 1 ? 9 : 10, Common::Point(34, 33)); } } } else { if (!isDarkCc || _townActionId != 5) { if (!_townSprites[_drawFrameIndex / 8].empty()) - _townSprites[_drawFrameIndex / 8].draw(screen, _drawFrameIndex % 8, _townPos); + _townSprites[_drawFrameIndex / 8].draw(0, _drawFrameIndex % 8, _townPos); } } @@ -1095,16 +1092,16 @@ void Town::drawTownAnim(bool flag) { if (sound.isPlaying() || (isDarkCc && intf._overallFrame)) { if (isDarkCc) { if (sound.isPlaying() || intf._overallFrame == 1) { - _townSprites[4].draw(screen, _vm->getRandomNumber(13, 18), + _townSprites[4].draw(0, _vm->getRandomNumber(13, 18), Common::Point(8, 30)); } else if (intf._overallFrame > 1) { - _townSprites[4].draw(screen, 13 - intf._overallFrame++, + _townSprites[4].draw(0, 13 - intf._overallFrame++, Common::Point(8, 30)); if (intf._overallFrame > 14) intf._overallFrame = 0; } } else { - _townSprites[2].draw(screen, _vm->getRandomNumber(7, 11), Common::Point(8, 8)); + _townSprites[2].draw(0, _vm->getRandomNumber(7, 11), Common::Point(8, 8)); } } break; @@ -1114,9 +1111,9 @@ void Town::drawTownAnim(bool flag) { if (isDarkCc) { if (intf._overallFrame) { intf._overallFrame ^= 1; - _townSprites[6].draw(screen, intf._overallFrame, Common::Point(8, 106)); + _townSprites[6].draw(0, intf._overallFrame, Common::Point(8, 106)); } else { - _townSprites[6].draw(screen, _vm->getRandomNumber(3), Common::Point(16, 48)); + _townSprites[6].draw(0, _vm->getRandomNumber(3), Common::Point(16, 48)); } } } @@ -1124,13 +1121,13 @@ void Town::drawTownAnim(bool flag) { case TAVERN: if (sound.isPlaying() && isDarkCc) { - _townSprites[4].draw(screen, _vm->getRandomNumber(7), Common::Point(153, 49)); + _townSprites[4].draw(0, _vm->getRandomNumber(7), Common::Point(153, 49)); } break; case TEMPLE: if (sound.isPlaying()) { - _townSprites[3].draw(screen, _vm->getRandomNumber(2, 4), Common::Point(8, 8)); + _townSprites[3].draw(0, _vm->getRandomNumber(2, 4), Common::Point(8, 8)); } break; @@ -1138,14 +1135,14 @@ void Town::drawTownAnim(bool flag) { case TRAINING: if (sound.isPlaying()) { if (isDarkCc) { - _townSprites[_drawFrameIndex / 8].draw(screen, _drawFrameIndex % 8, _townPos); + _townSprites[_drawFrameIndex / 8].draw(0, _drawFrameIndex % 8, _townPos); } } else { if (isDarkCc) { - _townSprites[0].draw(screen, ++intf._overallFrame % 8, Common::Point(8, 8)); - _townSprites[5].draw(screen, _vm->getRandomNumber(5), Common::Point(61, 74)); + _townSprites[0].draw(0, ++intf._overallFrame % 8, Common::Point(8, 8)); + _townSprites[5].draw(0, _vm->getRandomNumber(5), Common::Point(61, 74)); } else { - _townSprites[1].draw(screen, _vm->getRandomNumber(8, 12), Common::Point(8, 8)); + _townSprites[1].draw(0, _vm->getRandomNumber(8, 12), Common::Point(8, 8)); } } break; @@ -1221,7 +1218,6 @@ bool TownMessage::execute(int portrait, const Common::String &name, const Common Map &map = *_vm->_map; Party &party = *_vm->_party; Resources &res = *_vm->_resources; - Screen &screen = *_vm->_screen; Town &town = *_vm->_town; Windows &windows = *_vm->_windows; Window &w = windows[11]; @@ -1259,14 +1255,14 @@ bool TownMessage::execute(int portrait, const Common::String &name, const Common } town._drawCtr2 = wordCount * 2; // Set timeout - town._townSprites[1].draw(screen, 0, Common::Point(16, 16)); - town._townSprites[0].draw(screen, town._drawFrameIndex, Common::Point(23, 22)); + town._townSprites[1].draw(0, 0, Common::Point(16, 16)); + town._townSprites[0].draw(0, town._drawFrameIndex, Common::Point(23, 22)); w.update(); if (!msgEnd && !confirm) { - res._globalSprites.draw(screen, 7, Common::Point(232, 74)); - res._globalSprites.draw(screen, 0, Common::Point(235, 75)); - res._globalSprites.draw(screen, 2, Common::Point(260, 75)); + res._globalSprites.draw(0, 7, Common::Point(232, 74)); + res._globalSprites.draw(0, 0, Common::Point(235, 75)); + res._globalSprites.draw(0, 2, Common::Point(260, 75)); windows[34].update(); intf._face1State = map._headData[party._mazePosition.y][party._mazePosition.x]._left; diff --git a/engines/xeen/window.cpp b/engines/xeen/window.cpp index aeb8328d56..d4a798bc4b 100644 --- a/engines/xeen/window.cpp +++ b/engines/xeen/window.cpp @@ -26,6 +26,17 @@ namespace Xeen { Windows::Windows() { + // Load font data for the game + File f("fnt"); + byte *data = new byte[f.size()]; + f.read(data, f.size()); + _fontData = data; + + Common::fill(&_textColors[0], &_textColors[4], 0); + _bgColor = DEFAULT_BG_COLOR; + _fontReduced = false; + _fontJustify = JUSTIFY_NONE; + Window windows[40] = { Window(Common::Rect(0, 0, 320, 200), 0, 0, 0, 0, 320, 200), Window(Common::Rect(237, 9, 317, 74), 0, 0, 237, 12, 307, 68), @@ -71,6 +82,10 @@ Windows::Windows() { _windows = Common::Array(windows, 40); } +Windows::~Windows() { + delete[] _fontData; +} + void Windows::closeAll() { for (int i = (int)_windowStack.size() - 1; i >= 0; --i) _windowStack[i]->close(); @@ -92,11 +107,11 @@ void Windows::removeFromStack(Window *win) { /*------------------------------------------------------------------------*/ -Window::Window() : XSurface(), _enabled(false), +Window::Window() : FontSurface(), _enabled(false), _a(0), _border(0), _xLo(0), _xHi(0), _ycL(0), _ycH(0) { } -Window::Window(const Window &src) : XSurface(), _enabled(src._enabled), +Window::Window(const Window &src) : FontSurface(), _enabled(src._enabled), _a(src._a), _border(src._border), _xLo(src._xLo), _ycL(src._ycL), _xHi(src._xHi), _ycH(src._ycH) { @@ -105,7 +120,7 @@ Window::Window(const Window &src) : XSurface(), _enabled(src._enabled), } Window::Window(const Common::Rect &bounds, int a, int border, - int xLo, int ycL, int xHi, int ycH): XSurface(), + int xLo, int ycL, int xHi, int ycH): FontSurface(), _enabled(false), _a(a), _border(border), _xLo(xLo), _ycL(ycL), _xHi(xHi), _ycH(ycH) { setBounds(bounds); @@ -142,47 +157,46 @@ void Window::open2() { frame(); fill(); - screen._writePos.x = _bounds.right - 8; - screen.writeSymbol(19); + _writePos.x = _bounds.right - 8; + writeSymbol(19); - screen._writePos.x = _innerBounds.left; - screen._writePos.y = _innerBounds.top; - screen._fontJustify = JUSTIFY_NONE; - screen._fontReduced = false; + _writePos.x = _innerBounds.left; + _writePos.y = _innerBounds.top; + _fontJustify = JUSTIFY_NONE; + _fontReduced = false; } void Window::frame() { - Screen &screen = *g_vm->_screen; int xCount = (_bounds.width() - 9) / FONT_WIDTH; int yCount = (_bounds.height() - 9) / FONT_HEIGHT; // Write the top line - screen._writePos = Common::Point(_bounds.left, _bounds.top); - screen.writeSymbol(0); + _writePos = Common::Point(_bounds.left, _bounds.top); + writeSymbol(0); if (xCount > 0) { int symbolId = 1; for (int i = 0; i < xCount; ++i) { - screen.writeSymbol(symbolId); + writeSymbol(symbolId); if (++symbolId == 5) symbolId = 1; } } - screen._writePos.x = _bounds.right - FONT_WIDTH; - screen.writeSymbol(5); + _writePos.x = _bounds.right - FONT_WIDTH; + writeSymbol(5); // Write the vertical edges if (yCount > 0) { int symbolId = 6; for (int i = 0; i < yCount; ++i) { - screen._writePos.y += 8; + _writePos.y += 8; - screen._writePos.x = _bounds.left; - screen.writeSymbol(symbolId); + _writePos.x = _bounds.left; + writeSymbol(symbolId); - screen._writePos.x = _bounds.right - FONT_WIDTH; - screen.writeSymbol(symbolId + 4); + _writePos.x = _bounds.right - FONT_WIDTH; + writeSymbol(symbolId + 4); if (++symbolId == 10) symbolId = 6; @@ -190,20 +204,20 @@ void Window::frame() { } // Write the bottom line - screen._writePos = Common::Point(_bounds.left, _bounds.bottom - FONT_HEIGHT); - screen.writeSymbol(14); + _writePos = Common::Point(_bounds.left, _bounds.bottom - FONT_HEIGHT); + writeSymbol(14); if (xCount > 0) { int symbolId = 15; for (int i = 0; i < xCount; ++i) { - screen.writeSymbol(symbolId); + writeSymbol(symbolId); if (++symbolId == 19) symbolId = 15; } } - screen._writePos.x = _bounds.right - FONT_WIDTH; - screen.writeSymbol(19); + _writePos.x = _bounds.right - FONT_WIDTH; + writeSymbol(19); } void Window::close() { @@ -238,11 +252,7 @@ void Window::addDirtyRect(const Common::Rect &r) { } void Window::fill() { - fillRect(_innerBounds, g_vm->_screen->_bgColor); -} - -const char *Window::writeString(const Common::String &s) { - return g_vm->_screen->writeString(s, _innerBounds); + fillRect(_innerBounds, _bgColor); } void Window::drawList(DrawStruct *items, int count) { diff --git a/engines/xeen/window.h b/engines/xeen/window.h index ad447072cd..cd9a1dd2bf 100644 --- a/engines/xeen/window.h +++ b/engines/xeen/window.h @@ -25,8 +25,8 @@ #include "common/rect.h" #include "common/str.h" +#include "xeen/font.h" #include "xeen/sprites.h" -#include "xeen/xsurface.h" namespace Xeen { @@ -48,7 +48,7 @@ struct DrawStruct { DrawStruct(): _sprites(nullptr), _frame(0), _x(0), _y(0), _scale(0), _flags(0) {} }; -class Windows { +class Windows : public FontData { friend class Window; private: Common::Array _windows; @@ -65,6 +65,7 @@ private: void removeFromStack(Window *win); public: Windows(); + ~Windows(); /** * Returns a specified window @@ -77,7 +78,7 @@ public: void closeAll(); }; -class Window: public XSurface { +class Window: public FontSurface { private: Common::Rect _bounds; Common::Rect _innerBounds; @@ -95,6 +96,7 @@ public: Window(const Window &src); Window(const Common::Rect &bounds, int a, int border, int xLo, int ycL, int xHi, int ycH); + virtual ~Window() {} virtual void addDirtyRect(const Common::Rect &r); @@ -118,11 +120,32 @@ public: */ void fill(); - const char *writeString(const Common::String &s); - void drawList(DrawStruct *items, int count); int getString(Common::String &line, uint maxLen, int maxWidth); + + /** + * Write a string to the window + * @param s String to display + * @param clipRect Window bounds to display string within + * @returns Any string remainder that couldn't be displayed + * @remarks Note that bounds is just used for wrapping purposes. Unless + * justification is set, the message will be written at _writePos + */ + const char *writeString(const Common::String &s, const Common::Rect &clipRect) { + return FontSurface::writeString(s, clipRect); + } + + /** + * Write a string to the window + * @param s String to display + * @returns Any string remainder that couldn't be displayed + * @remarks Note that bounds is just used for wrapping purposes. Unless + * justification is set, the message will be written at _writePos + */ + const char *writeString(const Common::String &s) { + return FontSurface::writeString(s, _innerBounds); + } }; } // End of namespace Xeen diff --git a/engines/xeen/worldofxeen/clouds_cutscenes.cpp b/engines/xeen/worldofxeen/clouds_cutscenes.cpp index 30795c199f..3d85a6ce22 100644 --- a/engines/xeen/worldofxeen/clouds_cutscenes.cpp +++ b/engines/xeen/worldofxeen/clouds_cutscenes.cpp @@ -46,7 +46,7 @@ bool CloudsCutscenes::showCloudsTitle() { for (int idx = 0; idx < 80; ++idx) { screen.restoreBackground(); - logo[idx / 65].draw(screen, idx % 65); + logo[idx / 65].draw(0, idx % 65); screen.update(); switch (idx) { @@ -110,21 +110,21 @@ bool CloudsCutscenes::showCloudsIntro() { screen.loadPalette("intro.pal"); screen.loadBackground("blank.raw"); screen.saveBackground(); - stars.draw(screen, 0); - stars.draw(screen, 1, Common::Point(160, 0)); + stars.draw(0, 0); + stars.draw(0, 1, Common::Point(160, 0)); screen.loadPage(0); - intro1.draw(screen, 0); + intro1.draw(0, 0); screen.loadPage(1); bool fadeFlag = true; for (int yCtr = SCREEN_HEIGHT, yScroll = 0, xeenCtr = -1; yCtr > 0; --yCtr, ++yScroll) { screen.vertMerge(yScroll); if (yCtr < 160) { - xeen.draw(screen, 0); + xeen.draw(0, 0); } else if (yCtr < 100) { - xeen.draw(screen, 0); + xeen.draw(0, 0); if (++xeenCtr < 14) - xeen1.draw(screen, xeenCtr); + xeen1.draw(0, xeenCtr); } screen.update(); @@ -138,9 +138,9 @@ bool CloudsCutscenes::showCloudsIntro() { // Remainder of vertical scrolling of background screen.restoreBackground(); - intro1.draw(screen, 0); + intro1.draw(0, 0); screen.loadPage(0); - lake.draw(screen, 0); + lake.draw(0, 0); screen.loadPage(1); bool drawFlag = false; @@ -152,11 +152,11 @@ bool CloudsCutscenes::showCloudsIntro() { lakeCtr = 0; drawFlag = true; } else { - lake3.draw(screen, lakeCtr, Common::Point(0, yCtr)); + lake3.draw(0, lakeCtr, Common::Point(0, yCtr)); } } - xeen.draw(screen, 0); + xeen.draw(0, 0); screen.update(); WAIT(1); } @@ -164,7 +164,7 @@ bool CloudsCutscenes::showCloudsIntro() { screen.freePages(); // Flying creatures moving horizontally - lake.draw(screen, 0); + lake.draw(0, 0); screen.saveBackground(); int frameNum = 0; @@ -172,7 +172,7 @@ bool CloudsCutscenes::showCloudsIntro() { for (int idx = 0; idx < 100; ++idx) { frameNum = (frameNum + 1) % 43; screen.restoreBackground(); - lake2.draw(screen, frameNum, Common::Point(0, 0), SPRFLAG_800); + lake2.draw(0, frameNum, Common::Point(0, 0), SPRFLAG_800); WAIT(1); } @@ -185,22 +185,22 @@ bool CloudsCutscenes::showCloudsIntro() { events.updateGameCounter(); screen.restoreBackground(); - lake2.draw(screen, frameNum, Common::Point(0, 0), SPRFLAG_800); + lake2.draw(0, frameNum, Common::Point(0, 0), SPRFLAG_800); frameNum = (frameNum + 1) % 43; - wizTower.draw(screen, 0, Common::Point(XLIST1[idx], YLIST[idx]), 0, idx); - wizTower.draw(screen, 1, Common::Point(XLIST2[idx], YLIST[idx]), 0, idx); + wizTower.draw(0, 0, Common::Point(XLIST1[idx], YLIST[idx]), 0, idx); + wizTower.draw(0, 1, Common::Point(XLIST2[idx], YLIST[idx]), 0, idx); screen.update(); WAIT(1); } // Cloaked figure walks horizontally - wizTower.draw(screen, 0); - wizTower.draw(screen, 1, Common::Point(160, 0)); + wizTower.draw(0, 0); + wizTower.draw(0, 1, Common::Point(160, 0)); screen.saveBackground(); for (int idx = 0; idx < 39; ++idx) { screen.restoreBackground(); - wizTower2.draw(screen, idx); + wizTower2.draw(0, idx); screen.update(); WAIT(2); @@ -215,9 +215,9 @@ bool CloudsCutscenes::showCloudsIntro() { SpriteResource groupo("groupo.vga"), group("group.vga"), crodo("crodo.vga"), box("box.vga"); - groupo.draw(screen, 0); - groupo.draw(screen, 1, Common::Point(160, 0)); - crodo.draw(screen, 0, Common::Point(0, -5)); + groupo.draw(0, 0); + groupo.draw(0, 1, Common::Point(160, 0)); + crodo.draw(0, 0, Common::Point(0, -5)); windows[0].writeString(Res.CLOUDS_INTRO1); // Unroll a scroll @@ -237,13 +237,13 @@ bool CloudsCutscenes::showCloudsIntro() { } for (int frameCtr = 0, lookup = 0; sound.isPlaying() || _subtitleSize; ) { - groupo.draw(screen, 0); - groupo.draw(screen, 1, Common::Point(160, 0)); + groupo.draw(0, 0); + groupo.draw(0, 1, Common::Point(160, 0)); switch (lineCtr) { case 2: ctr1 = (ctr1 + 1) % 5; - group.draw(screen, ctr1); + group.draw(0, ctr1); ctr4 = (ctr4 + 1) % 9; break; @@ -261,7 +261,7 @@ bool CloudsCutscenes::showCloudsIntro() { case 9: case 13: ctr3 = (ctr3 + 1) % 3; - group.draw(screen, ctr3 + 43, Common::Point(178, 134)); + group.draw(0, ctr3 + 43, Common::Point(178, 134)); ctr4 = (ctr4 + 1) % 9; ctr2 = (ctr2 % 15) + 3; break; @@ -273,10 +273,10 @@ bool CloudsCutscenes::showCloudsIntro() { break; } - group.draw(screen, ctr4 + 5, Common::Point(0, 99)); - group.draw(screen, ctr2 + 24, Common::Point(202, 12)); + group.draw(0, ctr4 + 5, Common::Point(0, 99)); + group.draw(0, ctr2 + 24, Common::Point(202, 12)); if ((++totalCtr % 30) == 0) - group.draw(screen, 43, Common::Point(178, 134)); + group.draw(0, 43, Common::Point(178, 134)); switch (lineCtr) { case 2: @@ -285,7 +285,7 @@ bool CloudsCutscenes::showCloudsIntro() { case 9: case 12: case 13: { - crodo.draw(screen, 0, Common::Point(0, -5)); + crodo.draw(0, 0, Common::Point(0, -5)); windows[0].writeString(Res.CLOUDS_INTRO1); ctr5 = (ctr5 + 1) % 19; @@ -295,7 +295,7 @@ bool CloudsCutscenes::showCloudsIntro() { } default: - crodo.draw(screen, frameCtr, Common::Point(0, -5)); + crodo.draw(0, frameCtr, Common::Point(0, -5)); if (lookup > 30) lookup = 30; frameCtr = _INTRO_FRAMES_VALS[_INTRO_FRAMES_LOOKUP[lineCtr]][lookup]; @@ -352,8 +352,8 @@ bool CloudsCutscenes::showCloudsEnding() { screen.loadPalette("mm4e.pal"); loadScreen(Common::String::format("prec00%02u.frm", 1)); - prec.draw(screen, 0); - prec.draw(screen, 1, Common::Point(160, 0)); + prec.draw(0, 0); + prec.draw(0, 1, Common::Point(160, 0)); screen.update(); screen.fadeIn(); WAIT(15); @@ -366,8 +366,8 @@ bool CloudsCutscenes::showCloudsEnding() { loadScreen(Common::String::format("prec00%02u.frm", idx)); // Render castle in front of it - prec.draw(screen, 0); - prec.draw(screen, 1, Common::Point(160, 0)); + prec.draw(0, 0); + prec.draw(0, 1, Common::Point(160, 0)); screen.update(); switch (idx) { @@ -401,8 +401,8 @@ bool CloudsCutscenes::showCloudsEnding() { for (int idx = 1; idx < 16; ++idx) { loadScreen(Common::String::format("vort%02u.frm", idx)); - cast[0].draw(screen, 0); - cast[idx - 1].draw(screen, 0, Common::Point(0, 100)); + cast[0].draw(0, 0); + cast[idx - 1].draw(0, 0, Common::Point(0, 100)); } // TODO diff --git a/engines/xeen/worldofxeen/darkside_cutscenes.cpp b/engines/xeen/worldofxeen/darkside_cutscenes.cpp index b3029463b9..d0fe869fd0 100644 --- a/engines/xeen/worldofxeen/darkside_cutscenes.cpp +++ b/engines/xeen/worldofxeen/darkside_cutscenes.cpp @@ -73,7 +73,7 @@ bool DarkSideCutscenes::showDarkSideTitle() { for (int idx = 0; idx < 55 && !_vm->shouldQuit(); ++idx) { // Render the next frame screen.vertMerge(0); - nwc[nwcIndex].draw(screen, nwcFrame); + nwc[nwcIndex].draw(0, nwcFrame); screen.draw(); switch (idx) { @@ -98,7 +98,7 @@ bool DarkSideCutscenes::showDarkSideTitle() { // Loop for dragon using flyspray for (int idx = 0; idx < 42 && !_vm->shouldQuit(); ++idx) { screen.vertMerge(SCREEN_HEIGHT); - nwc[3].draw(screen, idx); + nwc[3].draw(0, idx); screen.draw(); switch (idx) { @@ -188,9 +188,9 @@ bool DarkSideCutscenes::showDarkSideIntro() { for (int yCtr = SCREEN_HEIGHT, frameNum = 0; yCtr > 0; ) { screen.vertMerge(yp); - title.draw(screen, 0); + title.draw(0, 0); if (frameNum) - title.draw(screen, frameNum); + title.draw(0, frameNum); idx1 = (idx1 + 1) % 4; if (!idx1) @@ -222,8 +222,8 @@ bool DarkSideCutscenes::showDarkSideIntro() { // Zoom into the Pharoah's base closeup view for (int idx = 14; idx >= 0; --idx) { - pyraTop.draw(screen, 0, Common::Point(XLIST1[idx], YLIST1[idx])); - pyraTop.draw(screen, 1, Common::Point(XLIST2[idx], YLIST1[idx])); + pyraTop.draw(0, 0, Common::Point(XLIST1[idx], YLIST1[idx])); + pyraTop.draw(0, 1, Common::Point(XLIST2[idx], YLIST1[idx])); screen.draw(); if (idx == 2) @@ -242,7 +242,7 @@ bool DarkSideCutscenes::showDarkSideIntro() { bool phar2 = false; for (int idx = 0; idx < 19; ++idx) { screen.restoreBackground(); - pyramid.draw(screen, idx, Common::Point(132, 62)); + pyramid.draw(0, idx, Common::Point(132, 62)); showSubtitles(); if (!sound.isPlaying() && !phar2) @@ -289,13 +289,13 @@ bool DarkSideCutscenes::showDarkSideIntro() { screen.loadPage(0); screen.loadBackground("1room.raw"); screen.horizMerge(SCREEN_WIDTH); - dragon.draw(screen, 0, Common::Point(XLIST3[0], YLIST3[0]), SPRFLAG_800); + dragon.draw(0, 0, Common::Point(XLIST3[0], YLIST3[0]), SPRFLAG_800); int posNum = 0, phar2Index = 0, ctr = 0; for (int idx = SCREEN_WIDTH, frameNum = 0; idx >= 0; --idx) { events.updateGameCounter(); screen.horizMerge(idx); - dragon.draw(screen, FRAMES3[frameNum], Common::Point(XLIST3[posNum], YLIST3[posNum]), SPRFLAG_800); + dragon.draw(0, FRAMES3[frameNum], Common::Point(XLIST3[posNum], YLIST3[posNum]), SPRFLAG_800); showSubtitles(); events.pollEventsAndWait(); if (events.isKeyMousePressed()) @@ -348,7 +348,7 @@ bool DarkSideCutscenes::showDarkSideEnding() { SpriteResource faceEnd("face.end"); screen.restoreBackground(); - faceEnd.draw(screen, 0, Common::Point(29, 76), SPRFLAG_4000); + faceEnd.draw(0, 0, Common::Point(29, 76), SPRFLAG_4000); screen.update(); screen.fadeIn(); @@ -365,7 +365,7 @@ bool DarkSideCutscenes::showDarkSideEnding() { sound.stopSong(); screen.restoreBackground(); - faceEnd.draw(screen, 0, Common::Point(29, idx), SPRFLAG_4000); + faceEnd.draw(0, 0, Common::Point(29, idx), SPRFLAG_4000); screen.update(); WAIT(2); @@ -379,7 +379,7 @@ bool DarkSideCutscenes::showDarkSideEnding() { // Show the entire throne room screen.loadBackground("mainback.raw"); SpriteResource sc03a("sc03a.end"), sc03b("sc03b.end"), sc03c("sc03c.end"); - sc03a.draw(screen, 0, Common::Point(250, 0)); + sc03a.draw(0, 0, Common::Point(250, 0)); screen.saveBackground(); screen.update(); @@ -389,7 +389,7 @@ bool DarkSideCutscenes::showDarkSideEnding() { sound.playSound("door.voc"); for (int idx = 0; idx < 6; ++idx) { screen.restoreBackground(); - sc03b.draw(screen, idx, Common::Point(72, 125)); + sc03b.draw(0, idx, Common::Point(72, 125)); screen.update(); WAIT(4); @@ -398,7 +398,7 @@ bool DarkSideCutscenes::showDarkSideEnding() { // Silhouette of playing entering for (int idx = 0; idx < 19; ++idx) { screen.restoreBackground(); - sc03c.draw(screen, idx, Common::Point(72, 125)); + sc03c.draw(0, idx, Common::Point(72, 125)); screen.update(); if (idx == 3 || idx == 11) @@ -426,10 +426,10 @@ bool DarkSideCutscenes::showDarkSideEnding() { for (int xp = 0; xp < 320; xp += 2) { screen.horizMerge(xp); - disk.draw(screen, frameNum, Common::Point(xp / 2, yp)); + disk.draw(0, frameNum, Common::Point(xp / 2, yp)); if (xp < 44) - disk.draw(screen, 11, Common::Point(-xp, 22), SPRFLAG_800); - disk.draw(screen, 10, Common::Point(0, 134)); + disk.draw(0, 11, Common::Point(-xp, 22), SPRFLAG_800); + disk.draw(0, 10, Common::Point(0, 134)); if (!(xp % 22)) sound.playSound(whoosh); @@ -474,7 +474,7 @@ bool DarkSideCutscenes::showDarkSideEnding() { for (int idx = 0; idx < 34; ++idx) { screen.restoreBackground(); - diskOpen[idx / 8].draw(screen, idx % 8, Common::Point(28, 11)); + diskOpen[idx / 8].draw(0, idx % 8, Common::Point(28, 11)); WAIT(3); if (idx == 0 || idx == 2 || idx == 4 || idx == 6) @@ -495,7 +495,7 @@ bool DarkSideCutscenes::showDarkSideEnding() { }; screen.loadBackground("mainback.raw"); screen.saveBackground(); - sc06[0].draw(screen, 0); + sc06[0].draw(0, 0); screen.update(); sound.playSound("alien2.voc"); @@ -506,7 +506,7 @@ bool DarkSideCutscenes::showDarkSideEnding() { sound.playFX(3); screen.restoreBackground(); - sc06[idx / 10].draw(screen, idx % 10); + sc06[idx / 10].draw(0, idx % 10); screen.update(); WAIT(3); @@ -534,7 +534,7 @@ bool DarkSideCutscenes::showDarkSideEnding() { for (int idx = 0; idx < 45; ++idx) { screen.restoreBackground(); - sc07[idx / 6].draw(screen, idx % 6, Common::Point(61, 12)); + sc07[idx / 6].draw(0, idx % 6, Common::Point(61, 12)); if (_subtitleSize == 0) screen.update(); @@ -566,13 +566,13 @@ bool DarkSideCutscenes::showDarkSideEnding() { sound.playSound("yes1.voc"); // Animate Corak speaking - sc08.draw(screen, sound.isPlaying() ? getSpeakingFrame(0, 2) : 0); + sc08.draw(0, sound.isPlaying() ? getSpeakingFrame(0, 2) : 0); showSubtitles(); WAIT(3); } do { - sc08.draw(screen, 0); + sc08.draw(0, 0); showSubtitles(); } while (_subtitleSize); @@ -592,7 +592,7 @@ bool DarkSideCutscenes::showDarkSideEnding() { sound.playSound("nowre1.voc"); screen.restoreBackground(); - sc09.draw(screen, getSpeakingFrame(0, 8)); + sc09.draw(0, getSpeakingFrame(0, 8)); showSubtitles(); WAIT(3); } @@ -613,7 +613,7 @@ bool DarkSideCutscenes::showDarkSideEnding() { sound.playSound("nordo2.voc"); screen.restoreBackground(); - sc10.draw(screen, getSpeakingFrame(0, 1)); + sc10.draw(0, getSpeakingFrame(0, 1)); showSubtitles(); WAIT(3); } @@ -635,7 +635,7 @@ bool DarkSideCutscenes::showDarkSideEnding() { for (int idx = 0; idx < 15; ++idx) { screen.restoreBackground(); - sc11.draw(screen, idx, Common::Point(100, 44)); + sc11.draw(0, idx, Common::Point(100, 44)); if (idx == 0) screen.fadeIn(); @@ -652,9 +652,9 @@ bool DarkSideCutscenes::showDarkSideEnding() { // Helmet raises, we see the face appear for (int idx = 80; idx > 20; idx -= 2) { screen.restoreBackground(); - sc11.draw(screen, 15, Common::Point(60, 80)); - sc11.draw(screen, 16, Common::Point(61, idx)); - sc11.draw(screen, 17); + sc11.draw(0, 15, Common::Point(60, 80)); + sc11.draw(0, 16, Common::Point(61, idx)); + sc11.draw(0, 17); screen.update(); if (idx == 80) @@ -681,7 +681,7 @@ bool DarkSideCutscenes::showDarkSideEnding() { if (idx == 1) sound.playSound("ready2.voc"); - sc13.draw(screen, getSpeakingFrame(0, 3)); + sc13.draw(0, getSpeakingFrame(0, 3)); showSubtitles(); if (idx == 0) @@ -690,7 +690,7 @@ bool DarkSideCutscenes::showDarkSideEnding() { } do { - sc13.draw(screen, 0); + sc13.draw(0, 0); showSubtitles(); events.pollEventsAndWait(); } while (_subtitleSize); @@ -705,7 +705,7 @@ bool DarkSideCutscenes::showDarkSideEnding() { screen.loadBackground("blank.raw"); screen.saveBackground(); - sc14.draw(screen, 0, Common::Point(37, 37)); + sc14.draw(0, 0, Common::Point(37, 37)); screen.update(); screen.fadeIn(); @@ -715,7 +715,7 @@ bool DarkSideCutscenes::showDarkSideEnding() { sound.playSound("fight2.voc"); screen.restoreBackground(); - sc14.draw(screen, idx, Common::Point(37, 37)); + sc14.draw(0, idx, Common::Point(37, 37)); showSubtitles(); WAIT(3); } @@ -732,12 +732,12 @@ bool DarkSideCutscenes::showDarkSideEnding() { SpriteResource sc15("sc15.end"); screen.loadBackground("mainback.raw"); screen.saveBackground(); - sc15.draw(screen, 0, Common::Point(52, 84)); + sc15.draw(0, 0, Common::Point(52, 84)); screen.update(); for (int idx = 0; idx < 21; ++idx) { screen.restoreBackground(); - sc15.draw(screen, idx, Common::Point(52, 84)); + sc15.draw(0, idx, Common::Point(52, 84)); screen.update(); WAIT(3); @@ -761,13 +761,13 @@ bool DarkSideCutscenes::showDarkSideEnding() { screen.loadBackground("sc170001.raw"); screen.saveBackground(); screen.horizMerge(0); - sc16.draw(screen, 0, Common::Point(7, 29)); + sc16.draw(0, 0, Common::Point(7, 29)); showSubtitles(); sound.playSound("fail1.voc"); for (int idx = 0; idx < 5; ++idx) { screen.horizMerge(0); - sc16.draw(screen, idx, Common::Point(7, 29)); + sc16.draw(0, idx, Common::Point(7, 29)); showSubtitles(); WAIT(4); } @@ -776,11 +776,11 @@ bool DarkSideCutscenes::showDarkSideEnding() { int val = 5; for (int idx = 0; idx < 320; idx += 16) { screen.horizMerge(idx); - sc16.draw(screen, (val >= 12) ? 11 : val++, + sc16.draw(0, (val >= 12) ? 11 : val++, Common::Point(idx * -1 + 7, 29)); if (val > 10) - sc16.draw(screen, 12, Common::Point(273, 70)); + sc16.draw(0, 12, Common::Point(273, 70)); showSubtitles(); WAIT(2); @@ -801,7 +801,7 @@ bool DarkSideCutscenes::showDarkSideEnding() { for (int idx = 0; idx < 16; ++idx) { screen.restoreBackground(); - sc17[idx / 8].draw(screen, idx % 8, Common::Point(44, 19)); + sc17[idx / 8].draw(0, idx % 8, Common::Point(44, 19)); screen.update(); WAIT(3); @@ -825,7 +825,7 @@ bool DarkSideCutscenes::showDarkSideEnding() { for (int idx = 0; idx < 31; ++idx) { screen.restoreBackground(); - sc18[idx / 8].draw(screen, idx % 8, Common::Point(29, 12)); + sc18[idx / 8].draw(0, idx % 8, Common::Point(29, 12)); screen.update(); WAIT(3); @@ -847,7 +847,7 @@ bool DarkSideCutscenes::showDarkSideEnding() { sound.songCommand(207); screen.restoreBackground(); - sc19.draw(screen, idx, Common::Point(33, 10)); + sc19.draw(0, idx, Common::Point(33, 10)); WAIT(3); } @@ -869,7 +869,7 @@ bool DarkSideCutscenes::showDarkSideEnding() { for (int idx = 0; idx < 9; ++idx) { screen.restoreBackground(); - sc20.draw(screen, idx, Common::Point(80, 18)); + sc20.draw(0, idx, Common::Point(80, 18)); screen.update(); WAIT(3); } @@ -882,7 +882,7 @@ bool DarkSideCutscenes::showDarkSideEnding() { File alien2("alien2.voc"); screen.loadBackground("mainback.raw"); screen.saveBackground(); - sc21.draw(screen, 0, Common::Point(133, 81)); + sc21.draw(0, 0, Common::Point(133, 81)); screen.update(); for (int boltNum = 0; boltNum < 4; ++boltNum) { @@ -890,13 +890,13 @@ bool DarkSideCutscenes::showDarkSideEnding() { for (int idx = (boltNum == 0) ? 0 : 3; idx < 13; ++idx) { screen.restoreBackground(); - sc21.draw(screen, idx, Common::Point(133, 81)); + sc21.draw(0, idx, Common::Point(133, 81)); WAIT(2); } } screen.restoreBackground(); - sc21.draw(screen, 0, Common::Point(133, 81)); + sc21.draw(0, 0, Common::Point(133, 81)); screen.update(); sc21.clear(); @@ -916,13 +916,13 @@ bool DarkSideCutscenes::showDarkSideEnding() { WAIT(1); } - sc22.draw(screen, 0, Common::Point(156, 28)); + sc22.draw(0, 0, Common::Point(156, 28)); screen.update(); sound.playSound("cast.voc"); for (int idx = 0; idx < 5; ++idx) { screen.horizMerge(SCREEN_WIDTH); - sc22.draw(screen, idx, Common::Point(156, 28)); + sc22.draw(0, idx, Common::Point(156, 28)); screen.update(); WAIT(3); } @@ -933,10 +933,10 @@ bool DarkSideCutscenes::showDarkSideEnding() { int ctr = 5; for (int idx = SCREEN_WIDTH, xOffset = 0; idx >= 0; idx -= 16, xOffset += 16) { screen.horizMerge(idx); - sc22.draw(screen, (ctr >= 8) ? 7 : ctr++, + sc22.draw(0, (ctr >= 8) ? 7 : ctr++, Common::Point(xOffset + 156, 28), SPRFLAG_800); if (ctr > 7) - sc22.draw(screen, 8, Common::Point(136, 64)); + sc22.draw(0, 8, Common::Point(136, 64)); screen.update(); WAIT(2); @@ -956,7 +956,7 @@ bool DarkSideCutscenes::showDarkSideEnding() { for (int idx = 0; idx < 19; ++idx) { screen.restoreBackground(); - sc23[idx / 12].draw(screen, idx % 12, Common::Point(72, 4)); + sc23[idx / 12].draw(0, idx % 12, Common::Point(72, 4)); screen.update(); WAIT(3); @@ -967,7 +967,7 @@ bool DarkSideCutscenes::showDarkSideEnding() { } screen.restoreBackground(); - sc23[0].draw(screen, 0, Common::Point(72, 4)); + sc23[0].draw(0, 0, Common::Point(72, 4)); screen.update(); screen.fadeOut(); @@ -981,14 +981,14 @@ bool DarkSideCutscenes::showDarkSideEnding() { screen.loadBackground("mainback.raw"); screen.saveBackground(); - sc24[0].draw(screen, 0, Common::Point(148, 0)); + sc24[0].draw(0, 0, Common::Point(148, 0)); screen.update(); screen.fadeIn(4); sound.playSound("cast.voc"); for (int idx = 0; idx < 30; ++idx) { screen.restoreBackground(); - sc24[idx / 15].draw(screen, idx % 15, Common::Point(148, 0)); + sc24[idx / 15].draw(0, idx % 15, Common::Point(148, 0)); screen.update(); WAIT(3); @@ -1012,7 +1012,7 @@ bool DarkSideCutscenes::showDarkSideEnding() { screen.loadBackground("sc250001.raw"); screen.saveBackground(); - sc25.draw(screen, 0, Common::Point(27, 30)); + sc25.draw(0, 0, Common::Point(27, 30)); screen.update(); for (int struggleNum = 0; struggleNum < 2; ++struggleNum) { @@ -1020,7 +1020,7 @@ bool DarkSideCutscenes::showDarkSideEnding() { if (struggleNum == 0 && idx == 2) sound.playSound("admit2.voc"); - sc25.draw(screen, idx, Common::Point(27, 30)); + sc25.draw(0, idx, Common::Point(27, 30)); showSubtitles(); WAIT(3); } @@ -1042,7 +1042,7 @@ bool DarkSideCutscenes::showDarkSideEnding() { for (int idx = 0; sound.isPlaying() || _subtitleSize; ) { screen.restoreBackground(); - sc26[idx / 8].draw(screen, idx % 8, Common::Point(58, 25)); + sc26[idx / 8].draw(0, idx % 8, Common::Point(58, 25)); WAIT(2); idx = (idx == 31) ? 22 : idx + 1; @@ -1070,7 +1070,7 @@ bool DarkSideCutscenes::showDarkSideEnding() { sound.playSound("what3.voc"); screen.restoreBackground(); - sc27.draw(screen, idx, Common::Point(65, 22)); + sc27.draw(0, idx, Common::Point(65, 22)); showSubtitles(); WAIT(3); } @@ -1093,13 +1093,13 @@ bool DarkSideCutscenes::showDarkSideEnding() { screen.loadBackground("mainback.raw"); screen.saveBackground(); - sc28[0].draw(screen, 0, Common::Point(74, 0)); + sc28[0].draw(0, 0, Common::Point(74, 0)); screen.update(); screen.fadeIn(); for (int idx = 0; idx < 44; ++idx) { screen.restoreBackground(); - sc28[idx / 4].draw(screen, idx % 4, Common::Point(74, 0)); + sc28[idx / 4].draw(0, idx % 4, Common::Point(74, 0)); screen.update(); WAIT(3); @@ -1131,7 +1131,7 @@ bool DarkSideCutscenes::showDarkSideEnding() { if (idx == 40) sound.songCommand(207); - sc29[idx / 10].draw(screen, idx % 10, Common::Point(92, 10)); + sc29[idx / 10].draw(0, idx % 10, Common::Point(92, 10)); screen.update(); WAIT(3); @@ -1143,7 +1143,7 @@ bool DarkSideCutscenes::showDarkSideEnding() { for (int loopNum = 0; loopNum < 4; ++loopNum) { for (int idx = 49; idx < 54; ++idx) { screen.restoreBackground(); - sc29[idx / 10].draw(screen, idx % 10, Common::Point(92, 10)); + sc29[idx / 10].draw(0, idx % 10, Common::Point(92, 10)); screen.update(); WAIT(3); } @@ -1191,10 +1191,10 @@ void DarkSideCutscenes::showPharaohEndText(const char *msg1, const char *msg2, c screen.loadBackground("3room.raw"); screen.saveBackground(); screen.loadPalette("dark.pal"); - claw.draw(screen, 5, Common::Point(CUTSCENES_XLIST[0], CUTSCENES_YLIST[0]), SPRFLAG_800); - claw.draw(screen, 6, Common::Point(149, 184)); - dragon1.draw(screen, FRAMES[0], Common::Point(139, YLIST[0]), SPRFLAG_800); - claw.draw(screen, 0, Common::Point(XLIST2[0], YLIST2[0]), SPRFLAG_800); + claw.draw(0, 5, Common::Point(CUTSCENES_XLIST[0], CUTSCENES_YLIST[0]), SPRFLAG_800); + claw.draw(0, 6, Common::Point(149, 184)); + dragon1.draw(0, FRAMES[0], Common::Point(139, YLIST[0]), SPRFLAG_800); + claw.draw(0, 0, Common::Point(XLIST2[0], YLIST2[0]), SPRFLAG_800); screen.update(); screen.fadeIn(); events.clearEvents(); @@ -1206,10 +1206,10 @@ void DarkSideCutscenes::showPharaohEndText(const char *msg1, const char *msg2, c do { // Draw the dragon pharoah screen.restoreBackground(); - claw.draw(screen, 5, Common::Point(CUTSCENES_XLIST[idx], CUTSCENES_YLIST[idx]), SPRFLAG_800); - claw.draw(screen, 6, Common::Point(145, 185)); - dragon1.draw(screen, FRAMES[idx], Common::Point(139, YLIST[idx]), SPRFLAG_800); - claw.draw(screen, idx % 5, Common::Point(XLIST2[idx], YLIST2[idx]), SPRFLAG_800); + claw.draw(0, 5, Common::Point(CUTSCENES_XLIST[idx], CUTSCENES_YLIST[idx]), SPRFLAG_800); + claw.draw(0, 6, Common::Point(145, 185)); + dragon1.draw(0, FRAMES[idx], Common::Point(139, YLIST[idx]), SPRFLAG_800); + claw.draw(0, idx % 5, Common::Point(XLIST2[idx], YLIST2[idx]), SPRFLAG_800); // Form the text string to display the text Common::String str1 = Common::String::format(Res.PHAROAH_ENDING_TEXT1, diff --git a/engines/xeen/worldofxeen/worldofxeen_menu.cpp b/engines/xeen/worldofxeen/worldofxeen_menu.cpp index 919b003b1c..54cde36d46 100644 --- a/engines/xeen/worldofxeen/worldofxeen_menu.cpp +++ b/engines/xeen/worldofxeen/worldofxeen_menu.cpp @@ -52,7 +52,6 @@ void WorldOfXeenMenu::show(XeenEngine *vm) { void WorldOfXeenMenu::execute() { SpriteResource special("special.icn"); - Screen &screen = *_vm->_screen; Windows &windows = *_vm->_windows; EventsManager &events = *_vm->_events; @@ -120,7 +119,7 @@ void WorldOfXeenMenu::showTitles1(SpriteResource &sprites) { frameNum = (frameNum + 1) % (_vm->getGameID() == GType_WorldOfXeen ? 5 : 10); screen.restoreBackground(); - sprites.draw(screen, frameNum); + sprites.draw(0, frameNum); events.wait(4); } @@ -141,14 +140,14 @@ void WorldOfXeenMenu::showTitles2() { SpriteResource("title2h.int"), SpriteResource("title2i.int"), }; - kludgeSprites.draw(screen, 0); + kludgeSprites.draw(0, 0); screen.saveBackground(); sound.playSound("elect.voc"); for (int i = 0; i < 30 && !_vm->shouldQuit(); ++i) { events.updateGameCounter(); screen.restoreBackground(); - title2Sprites[i / 4].draw(screen, i % 4); + title2Sprites[i / 4].draw(0, i % 4); windows[0].update(); if (i == 19) -- cgit v1.2.3