From a94bf197ef512eb7bf4dcb96ffcd459959c0d57c Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Sat, 2 Aug 2014 10:07:54 -0400 Subject: ACCESS: Implement fading routines --- engines/access/screen.cpp | 100 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 100 insertions(+) create mode 100644 engines/access/screen.cpp (limited to 'engines/access/screen.cpp') diff --git a/engines/access/screen.cpp b/engines/access/screen.cpp new file mode 100644 index 0000000000..3f8dc4ecda --- /dev/null +++ b/engines/access/screen.cpp @@ -0,0 +1,100 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * 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. + * + */ + +#include "common/algorithm.h" +#include "common/textconsole.h" +#include "common/system.h" +#include "graphics/palette.h" +#include "access/screen.h" +#include "access/resources.h" + +namespace Access { + +Screen::Screen(AccessEngine *vm) : _vm(vm) { + create(320, 200, Graphics::PixelFormat::createFormatCLUT8()); + Common::fill(&_tempPalette[0], &_tempPalette[PALETTE_SIZE], 0); +} + +void Screen::setDisplayScan() { + warning("TODO: setDisplayScan"); +} + +void Screen::updateScreen() { + g_system->updateScreen(); +} + +void Screen::setInitialPalettte() { + Common::copy(&INITIAL_PALETTE[0], &INITIAL_PALETTE[18 * 3], _rawPalette); + Common::fill(&_rawPalette[18 * 3], &_rawPalette[PALETTE_SIZE], 0); + + g_system->getPaletteManager()->setPalette(INITIAL_PALETTE, 0, 18); +} + +void Screen::updatePalette() { + g_system->getPaletteManager()->setPalette(&_tempPalette[0], 0, PALETTE_COUNT); + updateScreen(); +} + +void Screen::forceFadeOut() { + const int FADE_AMOUNT = 2; + bool repeatFlag; + byte *srcP; + int count; + + do { + repeatFlag = false; + for (srcP = &_tempPalette[0], count = 0; count < PALETTE_COUNT; ++count, ++srcP) { + int v = *srcP; + if (v) { + repeatFlag = true; + *srcP = MAX(*srcP - FADE_AMOUNT, 0); + } + } + + updatePalette(); + g_system->delayMillis(10); + } while (repeatFlag); +} + +void Screen::forceFadeIn() { + Common::fill(&_tempPalette[0], &_tempPalette[PALETTE_SIZE], 0); + + const int FADE_AMOUNT = 2; + bool repeatFlag; + do { + repeatFlag = false; + const byte *srcP = &_rawPalette[0]; + byte *destP = &_tempPalette[0]; + + for (int idx = 0; idx < PALETTE_SIZE; ++idx, ++srcP, ++destP) { + if (*destP != *srcP) { + repeatFlag = true; + *destP = MAX((int)*destP + FADE_AMOUNT, (int)*srcP); + } + } + + updatePalette(); + g_system->delayMillis(10); + } while (repeatFlag); +} + +} // End of namespace Access -- cgit v1.2.3 From 7a63e12edb98f47d9a262601d9d26d9444975314 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Sat, 2 Aug 2014 17:09:28 -0400 Subject: ACCESS: Added screen loading and file index load fixes --- engines/access/screen.cpp | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) (limited to 'engines/access/screen.cpp') diff --git a/engines/access/screen.cpp b/engines/access/screen.cpp index 3f8dc4ecda..4059cab070 100644 --- a/engines/access/screen.cpp +++ b/engines/access/screen.cpp @@ -32,6 +32,7 @@ namespace Access { Screen::Screen(AccessEngine *vm) : _vm(vm) { create(320, 200, Graphics::PixelFormat::createFormatCLUT8()); Common::fill(&_tempPalette[0], &_tempPalette[PALETTE_SIZE], 0); + _loadPalFlag = false; } void Screen::setDisplayScan() { @@ -49,6 +50,16 @@ void Screen::setInitialPalettte() { g_system->getPaletteManager()->setPalette(INITIAL_PALETTE, 0, 18); } +void Screen::loadPalette(Common::SeekableReadStream *stream) { + stream->read(&_rawPalette[0], PALETTE_SIZE); + setPalette(); + _loadPalFlag = true; +} + +void Screen::setPalette() { + g_system->getPaletteManager()->setPalette(&_rawPalette[0], 0, PALETTE_COUNT); +} + void Screen::updatePalette() { g_system->getPaletteManager()->setPalette(&_tempPalette[0], 0, PALETTE_COUNT); updateScreen(); @@ -97,4 +108,10 @@ void Screen::forceFadeIn() { } while (repeatFlag); } +void Screen::copyBuffer(const byte *data) { + byte *destP = (byte *)getPixels(); + Common::copy(data, data + (h * w), destP); + g_system->copyRectToScreen(destP, w, 0, 0, w, h); +} + } // End of namespace Access -- cgit v1.2.3 From 04d42638cde9022523910b9ec75130bd85ec1fa5 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Mon, 4 Aug 2014 09:21:39 -0400 Subject: ACCESS: Fleshed out beginning of title sequence, added Screen::clip --- engines/access/screen.cpp | 59 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) (limited to 'engines/access/screen.cpp') diff --git a/engines/access/screen.cpp b/engines/access/screen.cpp index 4059cab070..cb0154d56e 100644 --- a/engines/access/screen.cpp +++ b/engines/access/screen.cpp @@ -21,6 +21,8 @@ */ #include "common/algorithm.h" +#include "common/endian.h" +#include "common/rect.h" #include "common/textconsole.h" #include "common/system.h" #include "graphics/palette.h" @@ -33,6 +35,9 @@ Screen::Screen(AccessEngine *vm) : _vm(vm) { create(320, 200, Graphics::PixelFormat::createFormatCLUT8()); Common::fill(&_tempPalette[0], &_tempPalette[PALETTE_SIZE], 0); _loadPalFlag = false; + _leftSkip = _rightSkip = 0; + _topSkip = _bottomSkip = 0; + _clipWidth = _clipHeight = 0; } void Screen::setDisplayScan() { @@ -114,4 +119,58 @@ void Screen::copyBuffer(const byte *data) { g_system->copyRectToScreen(destP, w, 0, 0, w, h); } +void Screen::plotImage(const byte *pData, int idx, const Common::Point &pt) { + const byte *sizeP = pData + READ_LE_UINT16(pData + idx * 4); + int w = READ_LE_UINT16(sizeP); + int h = READ_LE_UINT16(sizeP + 2); + Common::Rect r(pt.x, pt.y, pt.x + w, pt.y + h); + + if (!clip(r)) { + _lastBounds = r; + //plotf(); + } +} + +bool Screen::clip(Common::Rect &r) { + int skip; + _leftSkip = _rightSkip = 0; + _topSkip = _bottomSkip = 0; + + if (r.left > _clipWidth) { + skip = -r.left; + r.setWidth(r.width() - skip); + _leftSkip = skip; + r.moveTo(0, r.top); + } else if (r.left >= 0) + return true; + + int right = r.right - 1; + if (right < 0) + return true; + else if (right > _clipWidth) { + skip = right - _clipWidth; + r.setWidth(r.width() - skip); + _rightSkip = skip; + } + + if (r.top > _clipHeight) { + skip = -r.top; + r.setHeight(r.height() - skip); + _topSkip = skip; + r.moveTo(r.left, 0); + } else if (r.top >= 0) + return true; + + int bottom = r.bottom - 1; + if (bottom < 0) + return true; + else if (bottom > _clipHeight) { + skip = bottom - _clipHeight; + _bottomSkip = skip; + r.setHeight(r.height() - skip); + } + + return false; +} + } // End of namespace Access -- cgit v1.2.3 From bb48a153a6479e08fe37c3547e14622226efeeb2 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Mon, 4 Aug 2014 21:35:49 -0400 Subject: ACCESS: Remove graphics manager, and added more skeleton for Amazon intro --- engines/access/screen.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'engines/access/screen.cpp') diff --git a/engines/access/screen.cpp b/engines/access/screen.cpp index cb0154d56e..591bb67a7f 100644 --- a/engines/access/screen.cpp +++ b/engines/access/screen.cpp @@ -34,6 +34,9 @@ namespace Access { Screen::Screen(AccessEngine *vm) : _vm(vm) { create(320, 200, Graphics::PixelFormat::createFormatCLUT8()); Common::fill(&_tempPalette[0], &_tempPalette[PALETTE_SIZE], 0); + _vesaCurrentWin = 0; + _currentPanel = 0; + _hideFlag = true; _loadPalFlag = false; _leftSkip = _rightSkip = 0; _topSkip = _bottomSkip = 0; @@ -44,6 +47,12 @@ void Screen::setDisplayScan() { warning("TODO: setDisplayScan"); } +void Screen::setPanel(int num) { + assert(num < 4); + _currentPanel = num; + _msVirtualOffset = _virtualOffsetsTable[num]; +} + void Screen::updateScreen() { g_system->updateScreen(); } -- cgit v1.2.3 From 7d605ce57316c86a247cf978e6b123b23045659c Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Tue, 5 Aug 2014 22:17:30 -0400 Subject: ACCESS: Implement outer room handler --- engines/access/screen.cpp | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) (limited to 'engines/access/screen.cpp') diff --git a/engines/access/screen.cpp b/engines/access/screen.cpp index 591bb67a7f..8c87638937 100644 --- a/engines/access/screen.cpp +++ b/engines/access/screen.cpp @@ -41,6 +41,7 @@ Screen::Screen(AccessEngine *vm) : _vm(vm) { _leftSkip = _rightSkip = 0; _topSkip = _bottomSkip = 0; _clipWidth = _clipHeight = 0; + _scrollFlag = false; } void Screen::setDisplayScan() { @@ -182,4 +183,28 @@ bool Screen::clip(Common::Rect &r) { return false; } +void Screen::checkScroll() { + // TODO +} + +void Screen::copyBF1BF2() { + // TODO +} + +void Screen::copyBF2Vid() { + // TODO +} + +void Screen::plotList() { + // TODO +} + +void Screen::copyBlocks() { + // TODO +} + +void Screen::copyRects() { + // TODO +} + } // End of namespace Access -- cgit v1.2.3 From 8e43a6c5280e2b695753d4a0b6810811f1bd393f Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Tue, 5 Aug 2014 23:23:49 -0400 Subject: ACCESS: Add scripts classes and Amazon room setup --- engines/access/screen.cpp | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'engines/access/screen.cpp') diff --git a/engines/access/screen.cpp b/engines/access/screen.cpp index 8c87638937..8dcc9f1db9 100644 --- a/engines/access/screen.cpp +++ b/engines/access/screen.cpp @@ -207,4 +207,8 @@ void Screen::copyRects() { // TODO } +void Screen::setBufferScan() { + // TODO +} + } // End of namespace Access -- cgit v1.2.3 From 031cc32c847bf7387859e273069f8efd3b6d4ed0 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Wed, 6 Aug 2014 22:43:40 -0400 Subject: ACCESS: Implemented room data loading --- engines/access/screen.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'engines/access/screen.cpp') diff --git a/engines/access/screen.cpp b/engines/access/screen.cpp index 8dcc9f1db9..3823267bc0 100644 --- a/engines/access/screen.cpp +++ b/engines/access/screen.cpp @@ -26,6 +26,7 @@ #include "common/textconsole.h" #include "common/system.h" #include "graphics/palette.h" +#include "access/access.h" #include "access/screen.h" #include "access/resources.h" @@ -42,6 +43,8 @@ Screen::Screen(AccessEngine *vm) : _vm(vm) { _topSkip = _bottomSkip = 0; _clipWidth = _clipHeight = 0; _scrollFlag = false; + _scrollThreshold = 0; + _startColor = _numColors = 0; } void Screen::setDisplayScan() { @@ -71,6 +74,12 @@ void Screen::loadPalette(Common::SeekableReadStream *stream) { _loadPalFlag = true; } +void Screen::loadPalette(int fileNum, int subfile) { + byte *palette = _vm->_files->loadFile(fileNum, subfile); + Common::copy(palette, palette + (_numColors * 3), &_rawPalette[_startColor * 3]); + delete[] palette; +} + void Screen::setPalette() { g_system->getPaletteManager()->setPalette(&_rawPalette[0], 0, PALETTE_COUNT); } -- cgit v1.2.3 From bea93f3441154197a8f599912a1102ac11688d7f Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Thu, 7 Aug 2014 09:23:31 -0400 Subject: ACCESS: Implemented setupRoom method --- engines/access/screen.cpp | 3 +++ 1 file changed, 3 insertions(+) (limited to 'engines/access/screen.cpp') diff --git a/engines/access/screen.cpp b/engines/access/screen.cpp index 3823267bc0..1974b1a981 100644 --- a/engines/access/screen.cpp +++ b/engines/access/screen.cpp @@ -45,6 +45,9 @@ Screen::Screen(AccessEngine *vm) : _vm(vm) { _scrollFlag = false; _scrollThreshold = 0; _startColor = _numColors = 0; + _scrollX = _scrollY = 0; + _scrollCol = _scrollRow = 0; + } void Screen::setDisplayScan() { -- cgit v1.2.3 From 1171400ccb65025a77f04dae3a224a3aec5920a3 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Sat, 9 Aug 2014 15:54:35 -0400 Subject: ACCESS: Beginnings of animation manager --- engines/access/screen.cpp | 1 + 1 file changed, 1 insertion(+) (limited to 'engines/access/screen.cpp') diff --git a/engines/access/screen.cpp b/engines/access/screen.cpp index 1974b1a981..428c3d5df8 100644 --- a/engines/access/screen.cpp +++ b/engines/access/screen.cpp @@ -35,6 +35,7 @@ namespace Access { Screen::Screen(AccessEngine *vm) : _vm(vm) { create(320, 200, Graphics::PixelFormat::createFormatCLUT8()); Common::fill(&_tempPalette[0], &_tempPalette[PALETTE_SIZE], 0); + _vesaMode = 0; _vesaCurrentWin = 0; _currentPanel = 0; _hideFlag = true; -- cgit v1.2.3 From c1613178c3c89d6a088814eeeeffc6935852140f Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Sat, 9 Aug 2014 22:07:28 -0400 Subject: ACCESS: Implemented player loading --- engines/access/screen.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'engines/access/screen.cpp') diff --git a/engines/access/screen.cpp b/engines/access/screen.cpp index 428c3d5df8..45379b6a51 100644 --- a/engines/access/screen.cpp +++ b/engines/access/screen.cpp @@ -35,6 +35,9 @@ namespace Access { Screen::Screen(AccessEngine *vm) : _vm(vm) { create(320, 200, Graphics::PixelFormat::createFormatCLUT8()); Common::fill(&_tempPalette[0], &_tempPalette[PALETTE_SIZE], 0); + Common::fill(&_manPal[0], &_manPal[0x60], 0); + Common::fill(&_scaleTable1[0], &_scaleTable1[256], 0); + Common::fill(&_scaleTable2[0], &_scaleTable2[256], 0); _vesaMode = 0; _vesaCurrentWin = 0; _currentPanel = 0; @@ -224,4 +227,13 @@ void Screen::setBufferScan() { // TODO } +void Screen::setScaleTable(int scale) { + int total = 0; + for (int idx = 0; idx < 256; ++idx) { + _scaleTable1[idx] = total >> 8; + _scaleTable2[idx] = total & 0xff; + total += scale; + } +} + } // End of namespace Access -- cgit v1.2.3 From 9d590687e99cfee4b20dce5224edd78b33d61fd5 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Sat, 9 Aug 2014 22:24:35 -0400 Subject: ACCESS: Implemented roomMenu --- engines/access/screen.cpp | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) (limited to 'engines/access/screen.cpp') diff --git a/engines/access/screen.cpp b/engines/access/screen.cpp index 45379b6a51..6a241d0c2b 100644 --- a/engines/access/screen.cpp +++ b/engines/access/screen.cpp @@ -200,31 +200,35 @@ bool Screen::clip(Common::Rect &r) { } void Screen::checkScroll() { - // TODO + warning("TODO"); } void Screen::copyBF1BF2() { - // TODO + warning("TODO"); } void Screen::copyBF2Vid() { - // TODO + warning("TODO"); } void Screen::plotList() { - // TODO + warning("TODO: plotList"); } void Screen::copyBlocks() { - // TODO + warning("TODO: copyBlocks"); } void Screen::copyRects() { - // TODO + warning("TODO: copyRects"); } void Screen::setBufferScan() { - // TODO + warning("TODO: setBufferScan"); +} + +void Screen::restoreScan() { + warning("TODO: restoreScan"); } void Screen::setScaleTable(int scale) { @@ -236,4 +240,8 @@ void Screen::setScaleTable(int scale) { } } +void Screen::saveScreen() { + warning("TODO: saveScreen"); +} + } // End of namespace Access -- cgit v1.2.3 From cce0c2ff97878b2b0b8a87e25395c3ef98bc584e Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Sun, 10 Aug 2014 11:47:15 -0400 Subject: ACCESS: Adding sprite resources and screen saving --- engines/access/screen.cpp | 90 ++++++++++++++--------------------------------- 1 file changed, 27 insertions(+), 63 deletions(-) (limited to 'engines/access/screen.cpp') diff --git a/engines/access/screen.cpp b/engines/access/screen.cpp index 6a241d0c2b..c1a4d9143c 100644 --- a/engines/access/screen.cpp +++ b/engines/access/screen.cpp @@ -43,15 +43,13 @@ Screen::Screen(AccessEngine *vm) : _vm(vm) { _currentPanel = 0; _hideFlag = true; _loadPalFlag = false; - _leftSkip = _rightSkip = 0; - _topSkip = _bottomSkip = 0; - _clipWidth = _clipHeight = 0; _scrollFlag = false; _scrollThreshold = 0; _startColor = _numColors = 0; _scrollX = _scrollY = 0; _scrollCol = _scrollRow = 0; - + _windowXAdd = _windowYAdd = 0; + _screenYOff = 0; } void Screen::setDisplayScan() { @@ -145,60 +143,6 @@ void Screen::copyBuffer(const byte *data) { g_system->copyRectToScreen(destP, w, 0, 0, w, h); } -void Screen::plotImage(const byte *pData, int idx, const Common::Point &pt) { - const byte *sizeP = pData + READ_LE_UINT16(pData + idx * 4); - int w = READ_LE_UINT16(sizeP); - int h = READ_LE_UINT16(sizeP + 2); - Common::Rect r(pt.x, pt.y, pt.x + w, pt.y + h); - - if (!clip(r)) { - _lastBounds = r; - //plotf(); - } -} - -bool Screen::clip(Common::Rect &r) { - int skip; - _leftSkip = _rightSkip = 0; - _topSkip = _bottomSkip = 0; - - if (r.left > _clipWidth) { - skip = -r.left; - r.setWidth(r.width() - skip); - _leftSkip = skip; - r.moveTo(0, r.top); - } else if (r.left >= 0) - return true; - - int right = r.right - 1; - if (right < 0) - return true; - else if (right > _clipWidth) { - skip = right - _clipWidth; - r.setWidth(r.width() - skip); - _rightSkip = skip; - } - - if (r.top > _clipHeight) { - skip = -r.top; - r.setHeight(r.height() - skip); - _topSkip = skip; - r.moveTo(r.left, 0); - } else if (r.top >= 0) - return true; - - int bottom = r.bottom - 1; - if (bottom < 0) - return true; - else if (bottom > _clipHeight) { - skip = bottom - _clipHeight; - _bottomSkip = skip; - r.setHeight(r.height() - skip); - } - - return false; -} - void Screen::checkScroll() { warning("TODO"); } @@ -227,10 +171,6 @@ void Screen::setBufferScan() { warning("TODO: setBufferScan"); } -void Screen::restoreScan() { - warning("TODO: restoreScan"); -} - void Screen::setScaleTable(int scale) { int total = 0; for (int idx = 0; idx < 256; ++idx) { @@ -241,7 +181,31 @@ void Screen::setScaleTable(int scale) { } void Screen::saveScreen() { - warning("TODO: saveScreen"); + _screenSave._clipWidth = _clipWidth; + _screenSave._clipHeight = _clipHeight; + _screenSave._windowXAdd = _windowXAdd; + _screenSave._windowYAdd = _windowYAdd; + _screenSave._scroll.x = _scrollX; + _screenSave._scroll.y = _scrollY; + _screenSave._scrollCol = _scrollCol; + _screenSave._scrollRow = _scrollRow; + _screenSave._bufferStart.x = _bufferStart.x; + _screenSave._bufferStart.y = _bufferStart.y; + _screenSave._screenYOff = _screenYOff; +} + +void Screen::restoreScreen() { + _clipWidth = _screenSave._clipWidth; + _clipHeight = _screenSave._clipHeight; + _windowXAdd = _screenSave._windowXAdd; + _windowYAdd = _screenSave._windowYAdd; + _scrollX = _screenSave._scroll.x; + _scrollY = _screenSave._scroll.y; + _scrollCol = _screenSave._scrollCol; + _scrollRow = _screenSave._scrollRow; + _bufferStart.x = _screenSave._bufferStart.x; + _bufferStart.y = _screenSave._bufferStart.y; + _screenYOff = _screenSave._screenYOff; } } // End of namespace Access -- cgit v1.2.3 From 47d75ae128d2b29ace73925373901cf7bbc6325d Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Sun, 10 Aug 2014 15:50:22 -0400 Subject: ACCESS: Beginnings of logic for drawing sprite frames --- engines/access/screen.cpp | 1 - 1 file changed, 1 deletion(-) (limited to 'engines/access/screen.cpp') diff --git a/engines/access/screen.cpp b/engines/access/screen.cpp index c1a4d9143c..63fd98b566 100644 --- a/engines/access/screen.cpp +++ b/engines/access/screen.cpp @@ -46,7 +46,6 @@ Screen::Screen(AccessEngine *vm) : _vm(vm) { _scrollFlag = false; _scrollThreshold = 0; _startColor = _numColors = 0; - _scrollX = _scrollY = 0; _scrollCol = _scrollRow = 0; _windowXAdd = _windowYAdd = 0; _screenYOff = 0; -- cgit v1.2.3 From b2596cab0edc0a4709fba872ca0c20a782caabe4 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Sun, 10 Aug 2014 18:36:34 -0400 Subject: ACCESS: Implement loadPlayField --- engines/access/screen.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'engines/access/screen.cpp') diff --git a/engines/access/screen.cpp b/engines/access/screen.cpp index 63fd98b566..b2cb7da8cc 100644 --- a/engines/access/screen.cpp +++ b/engines/access/screen.cpp @@ -73,7 +73,7 @@ void Screen::setInitialPalettte() { } void Screen::loadPalette(Common::SeekableReadStream *stream) { - stream->read(&_rawPalette[0], PALETTE_SIZE); + loadRawPalette(stream); setPalette(); _loadPalFlag = true; } @@ -88,6 +88,10 @@ void Screen::setPalette() { g_system->getPaletteManager()->setPalette(&_rawPalette[0], 0, PALETTE_COUNT); } +void Screen::loadRawPalette(Common::SeekableReadStream *stream) { + stream->read(&_rawPalette[0], PALETTE_SIZE); +} + void Screen::updatePalette() { g_system->getPaletteManager()->setPalette(&_tempPalette[0], 0, PALETTE_COUNT); updateScreen(); -- cgit v1.2.3 From b6c946003198d84112e87cc2974eac6e9dc7c4f4 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Sun, 10 Aug 2014 19:42:33 -0400 Subject: ACCESS: Fix palette translation during loading --- engines/access/screen.cpp | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'engines/access/screen.cpp') diff --git a/engines/access/screen.cpp b/engines/access/screen.cpp index b2cb7da8cc..bc913c5e78 100644 --- a/engines/access/screen.cpp +++ b/engines/access/screen.cpp @@ -32,6 +32,8 @@ namespace Access { +#define VGA_COLOR_TRANS(x) ((x) * 255 / 63) + Screen::Screen(AccessEngine *vm) : _vm(vm) { create(320, 200, Graphics::PixelFormat::createFormatCLUT8()); Common::fill(&_tempPalette[0], &_tempPalette[PALETTE_SIZE], 0); @@ -90,6 +92,8 @@ void Screen::setPalette() { void Screen::loadRawPalette(Common::SeekableReadStream *stream) { stream->read(&_rawPalette[0], PALETTE_SIZE); + for (byte *p = &_rawPalette[0]; p < &_rawPalette[PALETTE_SIZE]; ++p) + *p = VGA_COLOR_TRANS(*p); } void Screen::updatePalette() { -- cgit v1.2.3 From eee84b8760dd38079fe97f263a6fa9361ad5696f Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Mon, 11 Aug 2014 23:12:53 -0400 Subject: ACCESS: Implemented plotList --- engines/access/screen.cpp | 4 ---- 1 file changed, 4 deletions(-) (limited to 'engines/access/screen.cpp') diff --git a/engines/access/screen.cpp b/engines/access/screen.cpp index bc913c5e78..2dc86982b7 100644 --- a/engines/access/screen.cpp +++ b/engines/access/screen.cpp @@ -162,10 +162,6 @@ void Screen::copyBF2Vid() { warning("TODO"); } -void Screen::plotList() { - warning("TODO: plotList"); -} - void Screen::copyBlocks() { warning("TODO: copyBlocks"); } -- cgit v1.2.3 From c0cb03cea276832b2d178155786c0418eccfd21d Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Tue, 12 Aug 2014 08:38:12 -0400 Subject: ACCESS: Implemented copyBlocks --- engines/access/screen.cpp | 4 ---- 1 file changed, 4 deletions(-) (limited to 'engines/access/screen.cpp') diff --git a/engines/access/screen.cpp b/engines/access/screen.cpp index 2dc86982b7..b47cd3e005 100644 --- a/engines/access/screen.cpp +++ b/engines/access/screen.cpp @@ -162,10 +162,6 @@ void Screen::copyBF2Vid() { warning("TODO"); } -void Screen::copyBlocks() { - warning("TODO: copyBlocks"); -} - void Screen::copyRects() { warning("TODO: copyRects"); } -- cgit v1.2.3 From 9107cc103fa8ca65e12d0213c7b915ec990fb6cf Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Tue, 12 Aug 2014 09:16:14 -0400 Subject: ACCESS: Added a temporary frame delay and screen update --- engines/access/screen.cpp | 2 ++ 1 file changed, 2 insertions(+) (limited to 'engines/access/screen.cpp') diff --git a/engines/access/screen.cpp b/engines/access/screen.cpp index b47cd3e005..cdd5f2021e 100644 --- a/engines/access/screen.cpp +++ b/engines/access/screen.cpp @@ -64,6 +64,8 @@ void Screen::setPanel(int num) { } void Screen::updateScreen() { + g_system->copyRectToScreen((byte *)getPixels(), this->pitch, 0, 0, + this->w, this->h); g_system->updateScreen(); } -- cgit v1.2.3 From b579dbb71b4aafa533b06589ced928d788a1c2e6 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Tue, 12 Aug 2014 21:12:11 -0400 Subject: ACCESS: Fixes for clipping --- engines/access/screen.cpp | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) (limited to 'engines/access/screen.cpp') diff --git a/engines/access/screen.cpp b/engines/access/screen.cpp index cdd5f2021e..9cefa356ef 100644 --- a/engines/access/screen.cpp +++ b/engines/access/screen.cpp @@ -51,10 +51,18 @@ Screen::Screen(AccessEngine *vm) : _vm(vm) { _scrollCol = _scrollRow = 0; _windowXAdd = _windowYAdd = 0; _screenYOff = 0; + + setDisplayScan(); } void Screen::setDisplayScan() { - warning("TODO: setDisplayScan"); + _clipWidth = this->w - 1; + _clipHeight = this->h - 1; + _windowXAdd = _windowYAdd = 0; + _scrollX = _scrollY = 0; + _scrollCol = _scrollRow = 0; + _bufferStart.x = _bufferStart.y = 0; + _screenYOff = 0; } void Screen::setPanel(int num) { -- cgit v1.2.3 From 483bc1eb03b54db70d3136f3265fca1989b5b417 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Tue, 12 Aug 2014 21:40:14 -0400 Subject: ACCESS: Implemented setBufferScan and copyRects --- engines/access/screen.cpp | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) (limited to 'engines/access/screen.cpp') diff --git a/engines/access/screen.cpp b/engines/access/screen.cpp index 9cefa356ef..d450cc1067 100644 --- a/engines/access/screen.cpp +++ b/engines/access/screen.cpp @@ -172,12 +172,11 @@ void Screen::copyBF2Vid() { warning("TODO"); } -void Screen::copyRects() { - warning("TODO: copyRects"); -} - void Screen::setBufferScan() { - warning("TODO: setBufferScan"); + _clipWidth = _vm->_room->_vWindowBytesWide - 1; + _windowXAdd = (320 - _clipWidth) >> 1; + _clipHeight = _vm->_room->_vWindowLinesTall - 1; + _windowYAdd = (176 - _clipHeight) >> 1; } void Screen::setScaleTable(int scale) { -- cgit v1.2.3 From 89772d55a5c97b3c58bdf685e2419e78335ba02d Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Tue, 12 Aug 2014 23:34:23 -0400 Subject: ACCESS: Implemented window size fields setup and copyBF2Vid --- engines/access/screen.cpp | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) (limited to 'engines/access/screen.cpp') diff --git a/engines/access/screen.cpp b/engines/access/screen.cpp index d450cc1067..6f9b53994d 100644 --- a/engines/access/screen.cpp +++ b/engines/access/screen.cpp @@ -52,7 +52,10 @@ Screen::Screen(AccessEngine *vm) : _vm(vm) { _windowXAdd = _windowYAdd = 0; _screenYOff = 0; - setDisplayScan(); + _bufferBytesWide = _vWindowBytesWide = this->w; + _vWindowLinesTall = this->h; + _clipWidth = _vWindowBytesWide - 1; + _clipHeight = _vWindowLinesTall - 1; } void Screen::setDisplayScan() { @@ -164,18 +167,10 @@ void Screen::checkScroll() { warning("TODO"); } -void Screen::copyBF1BF2() { - warning("TODO"); -} - -void Screen::copyBF2Vid() { - warning("TODO"); -} - void Screen::setBufferScan() { - _clipWidth = _vm->_room->_vWindowBytesWide - 1; + _clipWidth = _vWindowBytesWide - 1; _windowXAdd = (320 - _clipWidth) >> 1; - _clipHeight = _vm->_room->_vWindowLinesTall - 1; + _clipHeight = _vWindowLinesTall - 1; _windowYAdd = (176 - _clipHeight) >> 1; } -- cgit v1.2.3 From 28bfe7374930cd78f722451b8754822a11dd500d Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Wed, 13 Aug 2014 22:23:08 -0400 Subject: ACCESS: Implemented cmdSpecial script opcode --- engines/access/screen.cpp | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) (limited to 'engines/access/screen.cpp') diff --git a/engines/access/screen.cpp b/engines/access/screen.cpp index 6f9b53994d..4673bb6136 100644 --- a/engines/access/screen.cpp +++ b/engines/access/screen.cpp @@ -40,6 +40,7 @@ Screen::Screen(AccessEngine *vm) : _vm(vm) { Common::fill(&_manPal[0], &_manPal[0x60], 0); Common::fill(&_scaleTable1[0], &_scaleTable1[256], 0); Common::fill(&_scaleTable2[0], &_scaleTable2[256], 0); + _savedPaletteCount = 0; _vesaMode = 0; _vesaCurrentWin = 0; _currentPanel = 0; @@ -114,6 +115,23 @@ void Screen::updatePalette() { updateScreen(); } +void Screen::savePalette() { + Common::copy(&_rawPalette[0], &_rawPalette[PALETTE_SIZE], + &_savedPalettes[_savedPaletteCount][0]); + + if (++_savedPaletteCount == 2) + _savedPaletteCount = 1; +} + +void Screen::restorePalette() { + if (--_savedPaletteCount < 0) + _savedPaletteCount = 0; + + Common::copy(&_savedPalettes[_savedPaletteCount][0], + &_savedPalettes[_savedPaletteCount][PALETTE_SIZE], &_rawPalette[0]); +} + + void Screen::forceFadeOut() { const int FADE_AMOUNT = 2; bool repeatFlag; -- cgit v1.2.3 From f66f01bf89b4ae071bdb299e43fd34c1bcb8a3ea Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Thu, 14 Aug 2014 20:49:30 -0400 Subject: ACCESS: Implemented player walk methods --- engines/access/screen.cpp | 1 + 1 file changed, 1 insertion(+) (limited to 'engines/access/screen.cpp') diff --git a/engines/access/screen.cpp b/engines/access/screen.cpp index 4673bb6136..ca87784458 100644 --- a/engines/access/screen.cpp +++ b/engines/access/screen.cpp @@ -52,6 +52,7 @@ Screen::Screen(AccessEngine *vm) : _vm(vm) { _scrollCol = _scrollRow = 0; _windowXAdd = _windowYAdd = 0; _screenYOff = 0; + _scrollEnd = 0; _bufferBytesWide = _vWindowBytesWide = this->w; _vWindowLinesTall = this->h; -- cgit v1.2.3 From 4a3ce2d27dabc2abe6e562089df4f37859e410f9 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Fri, 15 Aug 2014 09:27:05 -0400 Subject: ACCESS: Implementing checkScroll --- engines/access/screen.cpp | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) (limited to 'engines/access/screen.cpp') diff --git a/engines/access/screen.cpp b/engines/access/screen.cpp index ca87784458..771cfef7d2 100644 --- a/engines/access/screen.cpp +++ b/engines/access/screen.cpp @@ -46,13 +46,10 @@ Screen::Screen(AccessEngine *vm) : _vm(vm) { _currentPanel = 0; _hideFlag = true; _loadPalFlag = false; - _scrollFlag = false; - _scrollThreshold = 0; _startColor = _numColors = 0; _scrollCol = _scrollRow = 0; _windowXAdd = _windowYAdd = 0; _screenYOff = 0; - _scrollEnd = 0; _bufferBytesWide = _vWindowBytesWide = this->w; _vWindowLinesTall = this->h; @@ -182,10 +179,6 @@ void Screen::copyBuffer(const byte *data) { g_system->copyRectToScreen(destP, w, 0, 0, w, h); } -void Screen::checkScroll() { - warning("TODO"); -} - void Screen::setBufferScan() { _clipWidth = _vWindowBytesWide - 1; _windowXAdd = (320 - _clipWidth) >> 1; @@ -230,4 +223,16 @@ void Screen::restoreScreen() { _screenYOff = _screenSave._screenYOff; } +void Screen::moveBufferLeft() { + error("TODO: LEFT"); +} + +void Screen::moveBufferDown() { + error("TODO: LEFT"); +} + +void Screen::moveBufferUp() { + error("TODO: UP"); +} + } // End of namespace Access -- cgit v1.2.3 From fab6d7883e56a4fdebcabaaf0f911265fbd06a30 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Sat, 16 Aug 2014 11:27:37 +0200 Subject: ACCESS: Update TODOs --- engines/access/screen.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'engines/access/screen.cpp') diff --git a/engines/access/screen.cpp b/engines/access/screen.cpp index 771cfef7d2..9871fb1c3e 100644 --- a/engines/access/screen.cpp +++ b/engines/access/screen.cpp @@ -228,7 +228,7 @@ void Screen::moveBufferLeft() { } void Screen::moveBufferDown() { - error("TODO: LEFT"); + error("TODO: DOWN"); } void Screen::moveBufferUp() { -- cgit v1.2.3 From b3ab8a42a6bf77d99b6b349793f1fa7393359d24 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Sat, 16 Aug 2014 09:35:38 -0400 Subject: ACCESS: Implementing doCommand --- engines/access/screen.cpp | 1 + 1 file changed, 1 insertion(+) (limited to 'engines/access/screen.cpp') diff --git a/engines/access/screen.cpp b/engines/access/screen.cpp index 9871fb1c3e..8e9b08234f 100644 --- a/engines/access/screen.cpp +++ b/engines/access/screen.cpp @@ -50,6 +50,7 @@ Screen::Screen(AccessEngine *vm) : _vm(vm) { _scrollCol = _scrollRow = 0; _windowXAdd = _windowYAdd = 0; _screenYOff = 0; + _screenChangeFlag = false; _bufferBytesWide = _vWindowBytesWide = this->w; _vWindowLinesTall = this->h; -- cgit v1.2.3 From ad0be89459f318147f47e9c2bda29583a64592aa Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Mon, 18 Aug 2014 20:15:43 -0400 Subject: ACCESS: Simplified surface creation, added drawing for scaled flipped images --- engines/access/screen.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'engines/access/screen.cpp') diff --git a/engines/access/screen.cpp b/engines/access/screen.cpp index 8e9b08234f..3092d7e152 100644 --- a/engines/access/screen.cpp +++ b/engines/access/screen.cpp @@ -35,7 +35,7 @@ namespace Access { #define VGA_COLOR_TRANS(x) ((x) * 255 / 63) Screen::Screen(AccessEngine *vm) : _vm(vm) { - create(320, 200, Graphics::PixelFormat::createFormatCLUT8()); + create(320, 200); Common::fill(&_tempPalette[0], &_tempPalette[PALETTE_SIZE], 0); Common::fill(&_manPal[0], &_manPal[0x60], 0); Common::fill(&_scaleTable1[0], &_scaleTable1[256], 0); -- cgit v1.2.3 From b4d2484633e80ac2a1caccfedb51980cd7926c11 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Fri, 22 Aug 2014 22:55:17 -0400 Subject: ACCESS: Fixes for drawing scrolling scenes --- engines/access/screen.cpp | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'engines/access/screen.cpp') diff --git a/engines/access/screen.cpp b/engines/access/screen.cpp index 3092d7e152..af97e2e236 100644 --- a/engines/access/screen.cpp +++ b/engines/access/screen.cpp @@ -236,4 +236,11 @@ void Screen::moveBufferUp() { error("TODO: UP"); } +void Screen::copyBlock(ASurface *src, const Common::Rect &bounds) { + Common::Rect destBounds = bounds; + destBounds.translate(_windowXAdd, _windowYAdd + _screenYOff); + + copyRectToSurface(*src, destBounds.left, destBounds.top, bounds); +} + } // End of namespace Access -- cgit v1.2.3 From 148eb972abad3d1ac8b8685a25b88f74fb5dae5e Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Sat, 23 Aug 2014 14:28:07 -0400 Subject: ACCESS: Fix fade outs --- engines/access/screen.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'engines/access/screen.cpp') diff --git a/engines/access/screen.cpp b/engines/access/screen.cpp index af97e2e236..f62c2f5baf 100644 --- a/engines/access/screen.cpp +++ b/engines/access/screen.cpp @@ -139,7 +139,7 @@ void Screen::forceFadeOut() { do { repeatFlag = false; - for (srcP = &_tempPalette[0], count = 0; count < PALETTE_COUNT; ++count, ++srcP) { + for (srcP = &_tempPalette[0], count = 0; count < PALETTE_SIZE; ++count, ++srcP) { int v = *srcP; if (v) { repeatFlag = true; @@ -149,7 +149,7 @@ void Screen::forceFadeOut() { updatePalette(); g_system->delayMillis(10); - } while (repeatFlag); + } while (repeatFlag && !_vm->shouldQuit()); } void Screen::forceFadeIn() { -- cgit v1.2.3 From f98d4668d718b04713ebe9ed2abc41f8bcaed609 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Sat, 23 Aug 2014 17:19:54 -0400 Subject: ACCESS: Improvements for horizontal scrolling --- engines/access/screen.cpp | 12 ------------ 1 file changed, 12 deletions(-) (limited to 'engines/access/screen.cpp') diff --git a/engines/access/screen.cpp b/engines/access/screen.cpp index f62c2f5baf..57002c0f7c 100644 --- a/engines/access/screen.cpp +++ b/engines/access/screen.cpp @@ -224,18 +224,6 @@ void Screen::restoreScreen() { _screenYOff = _screenSave._screenYOff; } -void Screen::moveBufferLeft() { - error("TODO: LEFT"); -} - -void Screen::moveBufferDown() { - error("TODO: DOWN"); -} - -void Screen::moveBufferUp() { - error("TODO: UP"); -} - void Screen::copyBlock(ASurface *src, const Common::Rect &bounds) { Common::Rect destBounds = bounds; destBounds.translate(_windowXAdd, _windowYAdd + _screenYOff); -- cgit v1.2.3 From 1568b4a433f8efc0b4e670d8e9714885aa8831c0 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Tue, 26 Aug 2014 23:55:17 +0200 Subject: ACCESS: Move Establish functions to Amazon engine, start implementing init4Quads --- engines/access/screen.cpp | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'engines/access/screen.cpp') diff --git a/engines/access/screen.cpp b/engines/access/screen.cpp index 57002c0f7c..025172464a 100644 --- a/engines/access/screen.cpp +++ b/engines/access/screen.cpp @@ -58,6 +58,12 @@ Screen::Screen(AccessEngine *vm) : _vm(vm) { _clipHeight = _vWindowLinesTall - 1; } +void Screen::clearScreen() { + clearBuffer(); + if (_vesaMode) + _vm->_clearSummaryFlag = true; +} + void Screen::setDisplayScan() { _clipWidth = this->w - 1; _clipHeight = this->h - 1; -- cgit v1.2.3 From a0e54db08155f8cf8d56f66743ffa694c188e33b Mon Sep 17 00:00:00 2001 From: Strangerke Date: Thu, 28 Aug 2014 02:01:33 +0200 Subject: ACCESS: Set Vesa mode when using the CD --- engines/access/screen.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'engines/access/screen.cpp') diff --git a/engines/access/screen.cpp b/engines/access/screen.cpp index 025172464a..4f2ee3e3ac 100644 --- a/engines/access/screen.cpp +++ b/engines/access/screen.cpp @@ -41,7 +41,11 @@ Screen::Screen(AccessEngine *vm) : _vm(vm) { Common::fill(&_scaleTable1[0], &_scaleTable1[256], 0); Common::fill(&_scaleTable2[0], &_scaleTable2[256], 0); _savedPaletteCount = 0; - _vesaMode = 0; + if (_vm->isCD()) + _vesaMode = 0; + else + _vesaMode = 1; + _vesaCurrentWin = 0; _currentPanel = 0; _hideFlag = true; -- cgit v1.2.3 From c0a7852662be724077921bcf9b9bb0bf2da2dfff Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Wed, 27 Aug 2014 22:13:43 -0400 Subject: ACCESS: Refactor the file manager to return resource structures --- engines/access/screen.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'engines/access/screen.cpp') diff --git a/engines/access/screen.cpp b/engines/access/screen.cpp index 4f2ee3e3ac..4b1c6d824d 100644 --- a/engines/access/screen.cpp +++ b/engines/access/screen.cpp @@ -104,9 +104,10 @@ void Screen::loadPalette(Common::SeekableReadStream *stream) { } void Screen::loadPalette(int fileNum, int subfile) { - byte *palette = _vm->_files->loadFile(fileNum, subfile); + Resource *res = _vm->_files->loadFile(fileNum, subfile); + byte *palette = res->data(); Common::copy(palette, palette + (_numColors * 3), &_rawPalette[_startColor * 3]); - delete[] palette; + delete res; } void Screen::setPalette() { -- cgit v1.2.3 From 83528083228ea45ec3105b7dbcb720a1ac0dba55 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Sat, 30 Aug 2014 08:45:42 -0400 Subject: ACCESS: Added code for reading/writing savegame headers and list saves --- engines/access/screen.cpp | 3 +++ 1 file changed, 3 insertions(+) (limited to 'engines/access/screen.cpp') diff --git a/engines/access/screen.cpp b/engines/access/screen.cpp index 4b1c6d824d..26dd2e93ae 100644 --- a/engines/access/screen.cpp +++ b/engines/access/screen.cpp @@ -141,6 +141,9 @@ void Screen::restorePalette() { &_savedPalettes[_savedPaletteCount][PALETTE_SIZE], &_rawPalette[0]); } +void Screen::getPalette(byte *pal) { + g_system->getPaletteManager()->grabPalette(pal, 0, 256); +} void Screen::forceFadeOut() { const int FADE_AMOUNT = 2; -- cgit v1.2.3 From f869019d30bbef118abb140d73bbd6ebc3a5be56 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Sat, 30 Aug 2014 17:17:19 -0400 Subject: ACCESS: Implemented cmdDead --- engines/access/screen.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'engines/access/screen.cpp') diff --git a/engines/access/screen.cpp b/engines/access/screen.cpp index 26dd2e93ae..227d9d7d0c 100644 --- a/engines/access/screen.cpp +++ b/engines/access/screen.cpp @@ -49,7 +49,6 @@ Screen::Screen(AccessEngine *vm) : _vm(vm) { _vesaCurrentWin = 0; _currentPanel = 0; _hideFlag = true; - _loadPalFlag = false; _startColor = _numColors = 0; _scrollCol = _scrollRow = 0; _windowXAdd = _windowYAdd = 0; @@ -100,7 +99,7 @@ void Screen::setInitialPalettte() { void Screen::loadPalette(Common::SeekableReadStream *stream) { loadRawPalette(stream); setPalette(); - _loadPalFlag = true; + _vm->_files->_loadPalFlag = true; } void Screen::loadPalette(int fileNum, int subfile) { -- cgit v1.2.3 From f3063a13f08a2b085d92d0a79231e568671501b3 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Sat, 1 Nov 2014 22:20:23 -0400 Subject: ACCESS: Implement palette cycling script commands --- engines/access/screen.cpp | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) (limited to 'engines/access/screen.cpp') diff --git a/engines/access/screen.cpp b/engines/access/screen.cpp index 227d9d7d0c..17f36fc072 100644 --- a/engines/access/screen.cpp +++ b/engines/access/screen.cpp @@ -59,6 +59,9 @@ Screen::Screen(AccessEngine *vm) : _vm(vm) { _vWindowLinesTall = this->h; _clipWidth = _vWindowBytesWide - 1; _clipHeight = _vWindowLinesTall - 1; + _startCycle = 0; + _cycleStart = 0; + _endCycle = 0; } void Screen::clearScreen() { @@ -244,4 +247,39 @@ void Screen::copyBlock(ASurface *src, const Common::Rect &bounds) { copyRectToSurface(*src, destBounds.left, destBounds.top, bounds); } +void Screen::setPaletteCycle(int startCycle, int endCycle, int timer) { + _startCycle = _cycleStart = startCycle; + _endCycle = endCycle; + + TimerEntry &te = _vm->_timers[6]; + te._timer = te._initTm = timer; + te._flag++; +} + +void Screen::cyclePaletteForward() { + cyclePaletteBackwards(); +} + +void Screen::cyclePaletteBackwards() { + if (!_vm->_timers[6]._flag) { + _vm->_timers[6]._flag++; + byte *pStart = &_rawPalette[_cycleStart * 3]; + byte *pEnd = &_rawPalette[_endCycle * 3]; + + for (int idx = _startCycle; idx < _endCycle; ++idx) { + g_system->getPaletteManager()->setPalette(pStart, idx, 1); + + pStart += 3; + if (pStart == pEnd) + pStart = &_rawPalette[_cycleStart * 3]; + } + + if (--_cycleStart <= _startCycle) + _cycleStart = _endCycle - 1; + + g_system->updateScreen(); + g_system->delayMillis(10); + } +} + } // End of namespace Access -- cgit v1.2.3 From d23d95b9129c0f0b90718630d9d136042821d026 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Sat, 8 Nov 2014 22:35:58 -0500 Subject: ACCESS: Fix display of cutscene at the end of chapter 3 --- engines/access/screen.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'engines/access/screen.cpp') diff --git a/engines/access/screen.cpp b/engines/access/screen.cpp index 17f36fc072..3e0863cc31 100644 --- a/engines/access/screen.cpp +++ b/engines/access/screen.cpp @@ -101,8 +101,9 @@ void Screen::setInitialPalettte() { void Screen::loadPalette(Common::SeekableReadStream *stream) { loadRawPalette(stream); - setPalette(); - _vm->_files->_loadPalFlag = true; + if (_vm->_files->_setPaletteFlag) + setPalette(); + _vm->_files->_setPaletteFlag = true; } void Screen::loadPalette(int fileNum, int subfile) { -- cgit v1.2.3 From d6963d8d09b9bd5f1fd5cd4c58e90bb4332a5cfe Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Sat, 8 Nov 2014 22:44:30 -0500 Subject: ACCESS: Simplification of logic for selectively applying loaded palettes --- engines/access/screen.cpp | 7 ------- 1 file changed, 7 deletions(-) (limited to 'engines/access/screen.cpp') diff --git a/engines/access/screen.cpp b/engines/access/screen.cpp index 3e0863cc31..f98552470c 100644 --- a/engines/access/screen.cpp +++ b/engines/access/screen.cpp @@ -99,13 +99,6 @@ void Screen::setInitialPalettte() { g_system->getPaletteManager()->setPalette(INITIAL_PALETTE, 0, 18); } -void Screen::loadPalette(Common::SeekableReadStream *stream) { - loadRawPalette(stream); - if (_vm->_files->_setPaletteFlag) - setPalette(); - _vm->_files->_setPaletteFlag = true; -} - void Screen::loadPalette(int fileNum, int subfile) { Resource *res = _vm->_files->loadFile(fileNum, subfile); byte *palette = res->data(); -- cgit v1.2.3 From 547f3debb2b44dfb8fb3d659ac09f3bd24a017c4 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Wed, 10 Dec 2014 21:27:06 -0500 Subject: ACCESS: Separate timer updates from frame updates, and overall delay cleanup --- engines/access/screen.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'engines/access/screen.cpp') diff --git a/engines/access/screen.cpp b/engines/access/screen.cpp index f98552470c..318eb66516 100644 --- a/engines/access/screen.cpp +++ b/engines/access/screen.cpp @@ -158,7 +158,7 @@ void Screen::forceFadeOut() { } updatePalette(); - g_system->delayMillis(10); + _vm->_events->pollEventsAndWait(); } while (repeatFlag && !_vm->shouldQuit()); } @@ -180,7 +180,7 @@ void Screen::forceFadeIn() { } updatePalette(); - g_system->delayMillis(10); + _vm->_events->pollEventsAndWait(); } while (repeatFlag); } -- cgit v1.2.3 From 98889efae52bba628c83f0d9109962e65c6f5c0a Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Sat, 13 Dec 2014 21:25:46 -0500 Subject: ACCESS: Beginnings of dirty rect handling for screen --- engines/access/screen.cpp | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) (limited to 'engines/access/screen.cpp') diff --git a/engines/access/screen.cpp b/engines/access/screen.cpp index 318eb66516..9ccad28931 100644 --- a/engines/access/screen.cpp +++ b/engines/access/screen.cpp @@ -68,6 +68,8 @@ void Screen::clearScreen() { clearBuffer(); if (_vesaMode) _vm->_clearSummaryFlag = true; + + addDirtyRect(Common::Rect(0, 0, this->w, this->h)); } void Screen::setDisplayScan() { @@ -87,9 +89,15 @@ void Screen::setPanel(int num) { } void Screen::updateScreen() { - g_system->copyRectToScreen((byte *)getPixels(), this->pitch, 0, 0, - this->w, this->h); + for (uint i = 0; i < _dirtyRects.size(); ++i) { + const Common::Rect &r = _dirtyRects[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()); + } + g_system->updateScreen(); + _dirtyRects.clear(); } void Screen::setInitialPalettte() { @@ -239,6 +247,12 @@ void Screen::copyBlock(ASurface *src, const Common::Rect &bounds) { destBounds.translate(_windowXAdd, _windowYAdd + _screenYOff); copyRectToSurface(*src, destBounds.left, destBounds.top, bounds); + addDirtyRect(destBounds); +} + +void Screen::restoreBlock() { + ASurface::restoreBlock(); + addDirtyRect(_savedBounds); } void Screen::setPaletteCycle(int startCycle, int endCycle, int timer) { @@ -276,4 +290,8 @@ void Screen::cyclePaletteBackwards() { } } +void Screen::addDirtyRect(const Common::Rect &r) { + _dirtyRects.push_back(r); +} + } // End of namespace Access -- cgit v1.2.3 From 9314daa11cb2eb8d4c4ecbe1c00fc044ba271f3d Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Sat, 13 Dec 2014 22:06:58 -0500 Subject: ACCESS: Dirty rect handling for bubble boxes --- engines/access/screen.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) (limited to 'engines/access/screen.cpp') diff --git a/engines/access/screen.cpp b/engines/access/screen.cpp index 9ccad28931..98dbdb4e9c 100644 --- a/engines/access/screen.cpp +++ b/engines/access/screen.cpp @@ -251,8 +251,13 @@ void Screen::copyBlock(ASurface *src, const Common::Rect &bounds) { } void Screen::restoreBlock() { - ASurface::restoreBlock(); addDirtyRect(_savedBounds); + ASurface::restoreBlock(); +} + +void Screen::drawRect() { + addDirtyRect(Common::Rect(_orgX1, _orgY1, _orgX2, _orgY2)); + ASurface::drawRect(); } void Screen::setPaletteCycle(int startCycle, int endCycle, int timer) { @@ -292,6 +297,7 @@ void Screen::cyclePaletteBackwards() { void Screen::addDirtyRect(const Common::Rect &r) { _dirtyRects.push_back(r); + assert(r.isValidRect() && r.width() > 0 && r.height() > 0); } } // End of namespace Access -- cgit v1.2.3 From 310853a285d5d648f1695cc3a40a165223b2928a Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Sat, 13 Dec 2014 22:33:23 -0500 Subject: ACCESS: Add dirty rects when plotting images to the screen --- engines/access/screen.cpp | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'engines/access/screen.cpp') diff --git a/engines/access/screen.cpp b/engines/access/screen.cpp index 98dbdb4e9c..14ead2e266 100644 --- a/engines/access/screen.cpp +++ b/engines/access/screen.cpp @@ -260,6 +260,21 @@ void Screen::drawRect() { ASurface::drawRect(); } +void Screen::copyFrom(ASurface *src, const Common::Point &destPos) { + addDirtyRect(Common::Rect(destPos.x, destPos.y, destPos.x + src->w, destPos.y + src->h)); + ASurface::copyFrom(src, destPos); +} + +void Screen::copyFrom(ASurface *src, const Common::Rect &bounds) { + addDirtyRect(bounds); + ASurface::copyFrom(src, bounds); +} + +void Screen::copyBuffer(Graphics::Surface *src) { + addDirtyRect(Common::Rect(0, 0, src->w, src->h)); + ASurface::copyBuffer(src); +} + void Screen::setPaletteCycle(int startCycle, int endCycle, int timer) { _startCycle = _cycleStart = startCycle; _endCycle = endCycle; -- cgit v1.2.3 From 2cdd05306c4c4c405a7405f1d0e5d491ec886c1d Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Sun, 14 Dec 2014 10:17:47 -0500 Subject: ACCESS: Dirty rect handling for conversation videos --- engines/access/screen.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'engines/access/screen.cpp') diff --git a/engines/access/screen.cpp b/engines/access/screen.cpp index 14ead2e266..2276fcc963 100644 --- a/engines/access/screen.cpp +++ b/engines/access/screen.cpp @@ -251,7 +251,8 @@ void Screen::copyBlock(ASurface *src, const Common::Rect &bounds) { } void Screen::restoreBlock() { - addDirtyRect(_savedBounds); + if (!_savedBounds.isEmpty()) + addDirtyRect(_savedBounds); ASurface::restoreBlock(); } -- cgit v1.2.3 From 93979484f6932759ea5075d68ac75fa479848080 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Sun, 14 Dec 2014 11:56:42 -0500 Subject: ACCESS: Fix for background redraws during conversations --- engines/access/screen.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'engines/access/screen.cpp') diff --git a/engines/access/screen.cpp b/engines/access/screen.cpp index 2276fcc963..5897fbec2e 100644 --- a/engines/access/screen.cpp +++ b/engines/access/screen.cpp @@ -261,14 +261,14 @@ void Screen::drawRect() { ASurface::drawRect(); } -void Screen::copyFrom(ASurface *src, const Common::Point &destPos) { +void Screen::transCopyFrom(ASurface *src, const Common::Point &destPos) { addDirtyRect(Common::Rect(destPos.x, destPos.y, destPos.x + src->w, destPos.y + src->h)); - ASurface::copyFrom(src, destPos); + ASurface::transCopyFrom(src, destPos); } -void Screen::copyFrom(ASurface *src, const Common::Rect &bounds) { +void Screen::transCopyFrom(ASurface *src, const Common::Rect &bounds) { addDirtyRect(bounds); - ASurface::copyFrom(src, bounds); + ASurface::transCopyFrom(src, bounds); } void Screen::copyBuffer(Graphics::Surface *src) { -- cgit v1.2.3 From 924f2abdf40a97966fff991d7cb0db842212a567 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Sun, 14 Dec 2014 14:45:06 -0500 Subject: ACCESS: Dirty rect handling for intro screens --- engines/access/screen.cpp | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'engines/access/screen.cpp') diff --git a/engines/access/screen.cpp b/engines/access/screen.cpp index 5897fbec2e..34755ade47 100644 --- a/engines/access/screen.cpp +++ b/engines/access/screen.cpp @@ -271,6 +271,11 @@ void Screen::transCopyFrom(ASurface *src, const Common::Rect &bounds) { ASurface::transCopyFrom(src, bounds); } +void Screen::copyFrom(Graphics::Surface &src) { + addDirtyRect(Common::Rect(0, 0, src.w, src.h)); + ASurface::copyFrom(src); +} + void Screen::copyBuffer(Graphics::Surface *src) { addDirtyRect(Common::Rect(0, 0, src->w, src->h)); ASurface::copyBuffer(src); -- cgit v1.2.3 From 831a3f7f3591182ab0e7b8812e98c12282923909 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Sun, 14 Dec 2014 15:39:37 -0500 Subject: ACCESS: Implement dirty rect merging --- engines/access/screen.cpp | 49 +++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 47 insertions(+), 2 deletions(-) (limited to 'engines/access/screen.cpp') diff --git a/engines/access/screen.cpp b/engines/access/screen.cpp index 34755ade47..3e6bd7e38f 100644 --- a/engines/access/screen.cpp +++ b/engines/access/screen.cpp @@ -89,13 +89,19 @@ void Screen::setPanel(int num) { } void Screen::updateScreen() { - for (uint i = 0; i < _dirtyRects.size(); ++i) { - const Common::Rect &r = _dirtyRects[i]; + // 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(); } @@ -321,4 +327,43 @@ void Screen::addDirtyRect(const Common::Rect &r) { assert(r.isValidRect() && r.width() > 0 && r.height() > 0); } +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(); +} + + } // End of namespace Access -- cgit v1.2.3 From 492d974550924522774181cbcfa559c4b7e7b3a1 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Wed, 17 Dec 2014 18:27:47 +0100 Subject: ACCESS: Some more polishing in the file headers --- engines/access/screen.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'engines/access/screen.cpp') diff --git a/engines/access/screen.cpp b/engines/access/screen.cpp index 3e6bd7e38f..d0974bde26 100644 --- a/engines/access/screen.cpp +++ b/engines/access/screen.cpp @@ -8,12 +8,12 @@ * 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. -- cgit v1.2.3 From 95aa9a13a6ca634af664a3ac4753faf8b8271fd9 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Thu, 18 Dec 2014 21:45:55 -0500 Subject: ACCESS: Refactor most of ASurface statics to instance variables --- engines/access/screen.cpp | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) (limited to 'engines/access/screen.cpp') diff --git a/engines/access/screen.cpp b/engines/access/screen.cpp index d0974bde26..35069ba683 100644 --- a/engines/access/screen.cpp +++ b/engines/access/screen.cpp @@ -50,7 +50,6 @@ Screen::Screen(AccessEngine *vm) : _vm(vm) { _currentPanel = 0; _hideFlag = true; _startColor = _numColors = 0; - _scrollCol = _scrollRow = 0; _windowXAdd = _windowYAdd = 0; _screenYOff = 0; _screenChangeFlag = false; @@ -76,8 +75,8 @@ void Screen::setDisplayScan() { _clipWidth = this->w - 1; _clipHeight = this->h - 1; _windowXAdd = _windowYAdd = 0; - _scrollX = _scrollY = 0; - _scrollCol = _scrollRow = 0; + _vm->_scrollX = _vm->_scrollY = 0; + _vm->_scrollCol = _vm->_scrollRow = 0; _bufferStart.x = _bufferStart.y = 0; _screenYOff = 0; } @@ -225,10 +224,10 @@ void Screen::saveScreen() { _screenSave._clipHeight = _clipHeight; _screenSave._windowXAdd = _windowXAdd; _screenSave._windowYAdd = _windowYAdd; - _screenSave._scroll.x = _scrollX; - _screenSave._scroll.y = _scrollY; - _screenSave._scrollCol = _scrollCol; - _screenSave._scrollRow = _scrollRow; + _screenSave._scroll.x = _vm->_scrollX; + _screenSave._scroll.y = _vm->_scrollY; + _screenSave._scrollCol = _vm->_scrollCol; + _screenSave._scrollRow = _vm->_scrollRow; _screenSave._bufferStart.x = _bufferStart.x; _screenSave._bufferStart.y = _bufferStart.y; _screenSave._screenYOff = _screenYOff; @@ -239,10 +238,10 @@ void Screen::restoreScreen() { _clipHeight = _screenSave._clipHeight; _windowXAdd = _screenSave._windowXAdd; _windowYAdd = _screenSave._windowYAdd; - _scrollX = _screenSave._scroll.x; - _scrollY = _screenSave._scroll.y; - _scrollCol = _screenSave._scrollCol; - _scrollRow = _screenSave._scrollRow; + _vm->_scrollX = _screenSave._scroll.x; + _vm->_scrollY = _screenSave._scroll.y; + _vm->_scrollCol = _screenSave._scrollCol; + _vm->_scrollRow = _screenSave._scrollRow; _bufferStart.x = _screenSave._bufferStart.x; _bufferStart.y = _screenSave._bufferStart.y; _screenYOff = _screenSave._screenYOff; -- cgit v1.2.3