diff options
Diffstat (limited to 'engines/hopkins/graphics.cpp')
-rw-r--r-- | engines/hopkins/graphics.cpp | 37 |
1 files changed, 33 insertions, 4 deletions
diff --git a/engines/hopkins/graphics.cpp b/engines/hopkins/graphics.cpp index aa71b2c4c0..ebc5cfa8da 100644 --- a/engines/hopkins/graphics.cpp +++ b/engines/hopkins/graphics.cpp @@ -74,6 +74,7 @@ GraphicsManager::GraphicsManager(HopkinsEngine *vm) { _width = 0; _specialWidth = 0; _showZones = false; + _showLines = false; Common::fill(&_paletteBuffer[0], &_paletteBuffer[PALETTE_SIZE * 2], 0); Common::fill(&_colorTable[0], &_colorTable[PALETTE_EXT_BLOCK_SIZE], 0); @@ -672,6 +673,9 @@ void GraphicsManager::updateScreen() { if (_showZones) displayZones(); + if (_showLines) + displayLines(); + // Update the screen g_system->updateScreen(); } @@ -1176,7 +1180,7 @@ void GraphicsManager::displayZones() { _vm->_objectsMan->_bob[bobId]._oldX + _vm->_objectsMan->_bob[bobId]._oldWidth, _vm->_objectsMan->_bob[bobId]._oldY + _vm->_objectsMan->_bob[bobId]._oldHeight); - displayDebugRect(screenSurface, r); + displayDebugRect(screenSurface, r, 0xff0000); } } @@ -1185,14 +1189,39 @@ void GraphicsManager::displayZones() { Common::Rect r(_vm->_linesMan->_squareZone[squareZoneId]._left, _vm->_linesMan->_squareZone[squareZoneId]._top, _vm->_linesMan->_squareZone[squareZoneId]._right, _vm->_linesMan->_squareZone[squareZoneId]._bottom); - displayDebugRect(screenSurface, r); + displayDebugRect(screenSurface, r, 0x00ff00); + } + } + + g_system->unlockScreen(); +} + +/** + * Display any zones for the current room + */ +void GraphicsManager::displayLines() { + Graphics::Surface *screenSurface = g_system->lockScreen(); + + uint16* pixels = (uint16*)screenSurface->pixels; + + for (int lineIndex = 0; lineIndex < _vm->_linesMan->_linesNumb; lineIndex++) { + int i = 0; + do { + int x = _vm->_linesMan->_lineItem[lineIndex]._lineData[i] - _scrollPosX; + int y = _vm->_linesMan->_lineItem[lineIndex]._lineData[i+1]; + if (x >= 0 && x < SCREEN_WIDTH && y >= 0 && y < SCREEN_HEIGHT) { + pixels[ y * screenSurface->w + x ] = 0xffff; + } + i += 2; } + while(_vm->_linesMan->_lineItem[lineIndex]._lineData[i] != -1); } g_system->unlockScreen(); } -void GraphicsManager::displayDebugRect(Graphics::Surface *surface, const Common::Rect &srcRect) { + +void GraphicsManager::displayDebugRect(Graphics::Surface *surface, const Common::Rect &srcRect, uint32 color) { Common::Rect r = srcRect; // Move for scrolling offset and adjust to crop on-screen @@ -1204,7 +1233,7 @@ void GraphicsManager::displayDebugRect(Graphics::Surface *surface, const Common: // If there's an on-screen portion, display it if (r.isValidRect()) - surface->frameRect(r, 0xffffff); + surface->frameRect(r, color); } /** |