diff options
Diffstat (limited to 'engines')
-rw-r--r-- | engines/sword2/d_draw.cpp | 73 | ||||
-rw-r--r-- | engines/sword2/module.mk | 2 | ||||
-rw-r--r-- | engines/sword2/rdwin.cpp | 120 | ||||
-rw-r--r-- | engines/sword2/screen.cpp | 132 |
4 files changed, 132 insertions, 195 deletions
diff --git a/engines/sword2/d_draw.cpp b/engines/sword2/d_draw.cpp deleted file mode 100644 index 3e23c4a8af..0000000000 --- a/engines/sword2/d_draw.cpp +++ /dev/null @@ -1,73 +0,0 @@ -/* Copyright (C) 1994-1998 Revolution Software Ltd. - * Copyright (C) 2003-2006 The ScummVM project - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - */ - -#include "common/stdafx.h" -#include "common/system.h" - -#include "sword2/sword2.h" -#include "sword2/mouse.h" -#include "sword2/screen.h" - -namespace Sword2 { - -/** - * @return the graphics detail setting - */ - -int8 Screen::getRenderLevel() { - return _renderLevel; -} - -void Screen::setRenderLevel(int8 level) { - _renderLevel = level; - - switch (_renderLevel) { - case 0: - // Lowest setting: no fancy stuff - _renderCaps = 0; - break; - case 1: - // Medium-low setting: transparency-blending - _renderCaps = RDBLTFX_SPRITEBLEND; - break; - case 2: - // Medium-high setting: transparency-blending + shading - _renderCaps = RDBLTFX_SPRITEBLEND | RDBLTFX_SHADOWBLEND; - break; - case 3: - // Highest setting: transparency-blending + shading + - // edge-blending + improved stretching - _renderCaps = RDBLTFX_SPRITEBLEND | RDBLTFX_SHADOWBLEND | RDBLTFX_EDGEBLEND; - break; - } -} - -/** - * Fill the screen buffer with palette colour zero. Note that it does not - * touch the menu areas of the screen. - */ - -void Screen::clearScene() { - memset(_buffer + MENUDEEP * _screenWide, 0, _screenWide * RENDERDEEP); - _needFullRedraw = true; -} - -} // End of namespace Sword2 diff --git a/engines/sword2/module.mk b/engines/sword2/module.mk index 7cdd0a976d..f5e79af317 100644 --- a/engines/sword2/module.mk +++ b/engines/sword2/module.mk @@ -5,7 +5,6 @@ MODULE_OBJS := \ anims.o \ console.o \ controls.o \ - d_draw.o \ debug.o \ events.o \ function.o \ @@ -20,7 +19,6 @@ MODULE_OBJS := \ music.o \ palette.o \ protocol.o \ - rdwin.o \ render.o \ resman.o \ router.o \ diff --git a/engines/sword2/rdwin.cpp b/engines/sword2/rdwin.cpp deleted file mode 100644 index 6184df7671..0000000000 --- a/engines/sword2/rdwin.cpp +++ /dev/null @@ -1,120 +0,0 @@ -/* Copyright (C) 1994-1998 Revolution Software Ltd. - * Copyright (C) 2003-2006 The ScummVM project - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - */ - -#include "common/stdafx.h" -#include "common/system.h" - -#include "sword2/sword2.h" -#include "sword2/screen.h" - -namespace Sword2 { - -/** - * Tell updateDisplay() that the scene needs to be completely updated. - */ - -void Screen::setNeedFullRedraw() { - _needFullRedraw = true; -} - -/** - * Mark an area of the screen as dirty, first generation. - */ - -void Screen::markAsDirty(int16 x0, int16 y0, int16 x1, int16 y1) { - int16 gridX0 = x0 / CELLWIDE; - int16 gridY0 = y0 / CELLDEEP; - int16 gridX1 = x1 / CELLWIDE; - int16 gridY1 = y1 / CELLDEEP; - - for (int16 i = gridY0; i <= gridY1; i++) - for (int16 j = gridX0; j <= gridX1; j++) - _dirtyGrid[i * _gridWide + j] = 2; -} - -/** - * This function has two purposes: It redraws the scene, and it handles input - * events, palette fading, etc. It should be called at a high rate (> 20 per - * second), but the scene is usually only redrawn about 12 times per second, - * except when then screen is scrolling. - * - * @param redrawScene If true, redraw the scene. - */ - -void Screen::updateDisplay(bool redrawScene) { - _vm->parseInputEvents(); - fadeServer(); - - if (redrawScene) { - int i; - - // Note that the entire scene is always rendered, which is less - // than optimal, but at least we can try to be intelligent - // about updating the screen afterwards. - - if (_needFullRedraw) { - // Update the entire screen. This is necessary when - // scrolling, fading, etc. - - _vm->_system->copyRectToScreen(_buffer + MENUDEEP * _screenWide, _screenWide, 0, MENUDEEP, _screenWide, _screenDeep - 2 * MENUDEEP); - _needFullRedraw = false; - } else { - // Update only the dirty areas of the screen - - int j, x, y; - int stripWide; - - for (i = 0; i < _gridDeep; i++) { - stripWide = 0; - - for (j = 0; j < _gridWide; j++) { - if (_dirtyGrid[i * _gridWide + j]) { - stripWide++; - } else if (stripWide) { - x = CELLWIDE * (j - stripWide); - y = CELLDEEP * i; - _vm->_system->copyRectToScreen(_buffer + y * _screenWide + x, _screenWide, x, y, stripWide * CELLWIDE, CELLDEEP); - stripWide = 0; - } - } - - if (stripWide) { - x = CELLWIDE * (j - stripWide); - y = CELLDEEP * i; - _vm->_system->copyRectToScreen(_buffer + y * _screenWide + x, _screenWide, x, y, stripWide * CELLWIDE, CELLDEEP); - stripWide = 0; - } - } - } - - // Age the dirty cells one generation. This way we keep track - // of both the cells that were updated this time, and the ones - // that were updated the last time. - - for (i = 0; i < _gridWide * _gridDeep; i++) - _dirtyGrid[i] >>= 1; - } - - // We always need to update because of fades, menu animations, etc. - _vm->_system->updateScreen(); -} - -} // End of namespace Sword2 diff --git a/engines/sword2/screen.cpp b/engines/sword2/screen.cpp index 8d62d2fa8d..8ed583d242 100644 --- a/engines/sword2/screen.cpp +++ b/engines/sword2/screen.cpp @@ -99,6 +99,138 @@ Screen::~Screen() { free(_lightMask); } +/** + * @return the graphics detail setting + */ + +int8 Screen::getRenderLevel() { + return _renderLevel; +} + +void Screen::setRenderLevel(int8 level) { + _renderLevel = level; + + switch (_renderLevel) { + case 0: + // Lowest setting: no fancy stuff + _renderCaps = 0; + break; + case 1: + // Medium-low setting: transparency-blending + _renderCaps = RDBLTFX_SPRITEBLEND; + break; + case 2: + // Medium-high setting: transparency-blending + shading + _renderCaps = RDBLTFX_SPRITEBLEND | RDBLTFX_SHADOWBLEND; + break; + case 3: + // Highest setting: transparency-blending + shading + + // edge-blending + improved stretching + _renderCaps = RDBLTFX_SPRITEBLEND | RDBLTFX_SHADOWBLEND | RDBLTFX_EDGEBLEND; + break; + } +} + +/** + * Tell updateDisplay() that the scene needs to be completely updated. + */ + +void Screen::setNeedFullRedraw() { + _needFullRedraw = true; +} + +/** + * Mark an area of the screen as dirty, first generation. + */ + +void Screen::markAsDirty(int16 x0, int16 y0, int16 x1, int16 y1) { + int16 gridX0 = x0 / CELLWIDE; + int16 gridY0 = y0 / CELLDEEP; + int16 gridX1 = x1 / CELLWIDE; + int16 gridY1 = y1 / CELLDEEP; + + for (int16 i = gridY0; i <= gridY1; i++) + for (int16 j = gridX0; j <= gridX1; j++) + _dirtyGrid[i * _gridWide + j] = 2; +} + +/** + * This function has two purposes: It redraws the scene, and it handles input + * events, palette fading, etc. It should be called at a high rate (> 20 per + * second), but the scene is usually only redrawn about 12 times per second, + * except when then screen is scrolling. + * + * @param redrawScene If true, redraw the scene. + */ + +void Screen::updateDisplay(bool redrawScene) { + _vm->parseInputEvents(); + fadeServer(); + + if (redrawScene) { + int i; + + // Note that the entire scene is always rendered, which is less + // than optimal, but at least we can try to be intelligent + // about updating the screen afterwards. + + if (_needFullRedraw) { + // Update the entire screen. This is necessary when + // scrolling, fading, etc. + + _vm->_system->copyRectToScreen(_buffer + MENUDEEP * _screenWide, _screenWide, 0, MENUDEEP, _screenWide, _screenDeep - 2 * MENUDEEP); + _needFullRedraw = false; + } else { + // Update only the dirty areas of the screen + + int j, x, y; + int stripWide; + + for (i = 0; i < _gridDeep; i++) { + stripWide = 0; + + for (j = 0; j < _gridWide; j++) { + if (_dirtyGrid[i * _gridWide + j]) { + stripWide++; + } else if (stripWide) { + x = CELLWIDE * (j - stripWide); + y = CELLDEEP * i; + _vm->_system->copyRectToScreen(_buffer + y * _screenWide + x, _screenWide, x, y, stripWide * CELLWIDE, CELLDEEP); + stripWide = 0; + } + } + + if (stripWide) { + x = CELLWIDE * (j - stripWide); + y = CELLDEEP * i; + _vm->_system->copyRectToScreen(_buffer + y * _screenWide + x, _screenWide, x, y, stripWide * CELLWIDE, CELLDEEP); + stripWide = 0; + } + } + } + + // Age the dirty cells one generation. This way we keep track + // of both the cells that were updated this time, and the ones + // that were updated the last time. + + for (i = 0; i < _gridWide * _gridDeep; i++) + _dirtyGrid[i] >>= 1; + } + + // We always need to update because of fades, menu animations, etc. + _vm->_system->updateScreen(); +} + +/** + * Fill the screen buffer with palette colour zero. Note that it does not + * touch the menu areas of the screen. + */ + +void Screen::clearScene() { + memset(_buffer + MENUDEEP * _screenWide, 0, _screenWide * RENDERDEEP); + _needFullRedraw = true; +} + void Screen::buildDisplay() { if (_thisScreen.new_palette) { // start the layer palette fading up |