diff options
| -rw-r--r-- | engines/saga/actor.cpp | 10 | ||||
| -rw-r--r-- | engines/saga/font.cpp | 48 | ||||
| -rw-r--r-- | engines/saga/font.h | 16 | ||||
| -rw-r--r-- | engines/saga/interface.cpp | 196 | ||||
| -rw-r--r-- | engines/saga/interface.h | 18 | ||||
| -rw-r--r-- | engines/saga/isomap.cpp | 45 | ||||
| -rw-r--r-- | engines/saga/isomap.h | 14 | ||||
| -rw-r--r-- | engines/saga/objectmap.cpp | 8 | ||||
| -rw-r--r-- | engines/saga/objectmap.h | 2 | ||||
| -rw-r--r-- | engines/saga/puzzle.cpp | 5 | ||||
| -rw-r--r-- | engines/saga/render.cpp | 6 | ||||
| -rw-r--r-- | engines/saga/scene.cpp | 13 | ||||
| -rw-r--r-- | engines/saga/scene.h | 2 | ||||
| -rw-r--r-- | engines/saga/sprite.cpp | 30 | ||||
| -rw-r--r-- | engines/saga/sprite.h | 8 | 
15 files changed, 212 insertions, 209 deletions
| diff --git a/engines/saga/actor.cpp b/engines/saga/actor.cpp index 5f099f88da..0365412aae 100644 --- a/engines/saga/actor.cpp +++ b/engines/saga/actor.cpp @@ -1046,7 +1046,6 @@ void Actor::drawActors() {  	CommonObjectDataPointer drawObject;  	int frameNumber = 0;  	SpriteList *spriteList = NULL; -	Surface *backBuffer = _vm->_gfx->getBackBuffer();  	createDrawOrderList(); @@ -1058,9 +1057,9 @@ void Actor::drawActors() {  		}  		if (_vm->_scene->getFlags() & kSceneFlagISO) { -			_vm->_isoMap->drawSprite(backBuffer, *spriteList, frameNumber, drawObject->_location, drawObject->_screenPosition, drawObject->_screenScale); +			_vm->_isoMap->drawSprite(*spriteList, frameNumber, drawObject->_location, drawObject->_screenPosition, drawObject->_screenScale);  		} else { -			_vm->_sprite->drawOccluded(backBuffer, _vm->_scene->getSceneClip(),*spriteList, frameNumber, drawObject->_screenPosition, drawObject->_screenScale, drawObject->_screenDepth); +			_vm->_sprite->drawOccluded(_vm->_scene->getSceneClip(),*spriteList, frameNumber, drawObject->_screenPosition, drawObject->_screenScale, drawObject->_screenDepth);  		}  	} @@ -1076,7 +1075,6 @@ void Actor::drawSpeech(void) {  	Point textPoint;  	ActorData *actor;  	int width, height; -	Surface *backBuffer = _vm->_gfx->getBackBuffer();  	int stringLength = strlen(_activeSpeech.strings[0]);  	char *outputString = (char*)calloc(stringLength + 1, 1); @@ -1100,11 +1098,11 @@ void Actor::drawSpeech(void) {  			else if (_vm->getGameType() == GType_IHNM)  				textPoint.y = 10; // CLIP(actor->_screenPosition.y - 160, 10, _vm->_scene->getHeight(true) - 10 - height); -			_vm->_font->textDraw(kKnownFontScript, backBuffer, outputString, textPoint, +			_vm->_font->textDraw(kKnownFontScript, outputString, textPoint,  				_activeSpeech.speechColor[i], _activeSpeech.outlineColor[i], _activeSpeech.getFontFlags(i));  		}  	} else { -		_vm->_font->textDrawRect(kKnownFontScript, backBuffer, outputString, _activeSpeech.drawRect, _activeSpeech.speechColor[0], +		_vm->_font->textDrawRect(kKnownFontScript, outputString, _activeSpeech.drawRect, _activeSpeech.speechColor[0],  			_activeSpeech.outlineColor[0], _activeSpeech.getFontFlags(0));  	} diff --git a/engines/saga/font.cpp b/engines/saga/font.cpp index 42ae28fdf6..1361e310d6 100644 --- a/engines/saga/font.cpp +++ b/engines/saga/font.cpp @@ -278,7 +278,7 @@ int Font::getStringWidth(FontId fontId, const char *text, size_t count, FontEffe  } -void Font::draw(FontId fontId, Surface *ds, const char *text, size_t count, const Common::Point &point, +void Font::draw(FontId fontId, const char *text, size_t count, const Common::Point &point,  			   int color, int effectColor, FontEffectFlags flags) {  	FontData *font;  	Point offsetPoint(point); @@ -288,19 +288,19 @@ void Font::draw(FontId fontId, Surface *ds, const char *text, size_t count, cons  	if (flags & kFontOutline) {  		offsetPoint.x--;  		offsetPoint.y--; -		outFont(font->outline, ds, text, count, offsetPoint, effectColor, flags); -		outFont(font->normal, ds, text, count, point, color, flags); +		outFont(font->outline, text, count, offsetPoint, effectColor, flags); +		outFont(font->normal, text, count, point, color, flags);  	} else if (flags & kFontShadow) {  		offsetPoint.x--;  		offsetPoint.y++; -		outFont(font->normal, ds, text, count, offsetPoint, effectColor, flags); -		outFont(font->normal, ds, text, count, point, color, flags); +		outFont(font->normal, text, count, offsetPoint, effectColor, flags); +		outFont(font->normal, text, count, point, color, flags);  	} else { // FONT_NORMAL -		outFont(font->normal, ds, text, count, point, color, flags); +		outFont(font->normal, text, count, point, color, flags);  	}  } -void Font::outFont(const FontStyle &drawFont, Surface *ds, const char *text, size_t count, const Common::Point &point, int color, FontEffectFlags flags) { +void Font::outFont(const FontStyle &drawFont, const char *text, size_t count, const Common::Point &point, int color, FontEffectFlags flags) {  	const byte *textPointer;  	byte *c_dataPointer;  	int c_code; @@ -310,6 +310,7 @@ void Font::outFont(const FontStyle &drawFont, Surface *ds, const char *text, siz  	byte *outputPointer;  	byte *outputPointer_min;  	byte *outputPointer_max; +	Surface *backBuffer = _vm->_gfx->getBackBuffer();  	int row;  	int rowLimit; @@ -319,7 +320,7 @@ void Font::outFont(const FontStyle &drawFont, Surface *ds, const char *text, siz  	int c_bit;  	int ct; -	if ((point.x > ds->w) || (point.y > ds->h)) { +	if ((point.x > backBuffer->w) || (point.y > backBuffer->h)) {  		// Output string can't be visible  		return;  	} @@ -372,7 +373,7 @@ void Font::outFont(const FontStyle &drawFont, Surface *ds, const char *text, siz  		// Get length of character in bytes  		c_byte_len = ((drawFont.fontCharEntry[c_code].width - 1) / 8) + 1; -		rowLimit = (ds->h < (textPoint.y + drawFont.header.charHeight)) ? ds->h : textPoint.y + drawFont.header.charHeight; +		rowLimit = (backBuffer->h < (textPoint.y + drawFont.header.charHeight)) ? backBuffer->h : textPoint.y + drawFont.header.charHeight;  		charRow = 0;  		for (row = textPoint.y; row < rowLimit; row++, charRow++) { @@ -381,9 +382,9 @@ void Font::outFont(const FontStyle &drawFont, Surface *ds, const char *text, siz  				continue;  			} -			outputPointer = (byte *)ds->pixels + (ds->pitch * row) + textPoint.x; -			outputPointer_min = (byte *)ds->pixels + (ds->pitch * row) + (textPoint.x > 0 ? textPoint.x : 0); -			outputPointer_max = outputPointer + (ds->pitch - textPoint.x); +			outputPointer = (byte *)backBuffer->pixels + (backBuffer->pitch * row) + textPoint.x; +			outputPointer_min = (byte *)backBuffer->pixels + (backBuffer->pitch * row) + (textPoint.x > 0 ? textPoint.x : 0); +			outputPointer_max = outputPointer + (backBuffer->pitch - textPoint.x);  			// If character starts off the screen, jump to next character  			if (outputPointer < outputPointer_min) { @@ -409,17 +410,18 @@ void Font::outFont(const FontStyle &drawFont, Surface *ds, const char *text, siz  } -void Font::textDraw(FontId fontId, Surface *ds, const char *text, const Common::Point &point, int color, int effectColor, FontEffectFlags flags) { +void Font::textDraw(FontId fontId, const char *text, const Common::Point &point, int color, int effectColor, FontEffectFlags flags) {  	int textWidth;  	int textLength;  	int fitWidth;  	Common::Point textPoint(point); +	Surface *backBuffer = _vm->_gfx->getBackBuffer();  	textLength = strlen(text);  	if (!(flags & kFontCentered)) {  		// Text is not centered; No formatting required -		draw(fontId, ds, text, textLength, point, color, effectColor, flags); +		draw(fontId, text, textLength, point, color, effectColor, flags);  		return;  	} @@ -429,8 +431,8 @@ void Font::textDraw(FontId fontId, Surface *ds, const char *text, const Common::  		textPoint.x = TEXT_CENTERLIMIT;  	} -	if (textPoint.x > ds->w - TEXT_CENTERLIMIT) { -		textPoint.x = ds->w - TEXT_CENTERLIMIT; +	if (textPoint.x > backBuffer->w - TEXT_CENTERLIMIT) { +		textPoint.x = backBuffer->w - TEXT_CENTERLIMIT;  	}  	if (textPoint.x < (TEXT_MARGIN * 2)) { @@ -440,12 +442,12 @@ void Font::textDraw(FontId fontId, Surface *ds, const char *text, const Common::  	textWidth = getStringWidth(fontId, text, textLength, flags); -	if (textPoint.x < (ds->w / 2)) { +	if (textPoint.x < (backBuffer->w / 2)) {  		// Fit to right side  		fitWidth = (textPoint.x - TEXT_MARGIN) * 2;  	} else {  		// Fit to left side -		fitWidth = ((ds->w - TEXT_MARGIN) - textPoint.x) * 2; +		fitWidth = ((backBuffer->w - TEXT_MARGIN) - textPoint.x) * 2;  	}  	if (fitWidth < textWidth) { @@ -454,7 +456,7 @@ void Font::textDraw(FontId fontId, Surface *ds, const char *text, const Common::  	}  	// Entire string fits, draw it  	textPoint.x = textPoint.x - (textWidth / 2); -	draw(fontId, ds, text, textLength, textPoint, color, effectColor, flags); +	draw(fontId, text, textLength, textPoint, color, effectColor, flags);  }  int Font::getHeight(FontId fontId, const char *text, int width, FontEffectFlags flags) { @@ -541,7 +543,7 @@ int Font::getHeight(FontId fontId, const char *text, int width, FontEffectFlags  	}  } -void Font::textDrawRect(FontId fontId, Surface *ds, const char *text, const Common::Rect &rect, int color, int effectColor, FontEffectFlags flags) { +void Font::textDrawRect(FontId fontId, const char *text, const Common::Rect &rect, int color, int effectColor, FontEffectFlags flags) {  	int textWidth;  	int textLength;  	int fitWidth; @@ -570,7 +572,7 @@ void Font::textDrawRect(FontId fontId, Surface *ds, const char *text, const Comm  	if (fitWidth >= textWidth) {  		// Entire string fits, draw it  		textPoint.x -= (textWidth / 2); -		draw(fontId, ds, text, textLength, textPoint, color, effectColor, flags); +		draw(fontId, text, textLength, textPoint, color, effectColor, flags);  		return;  	} @@ -607,7 +609,7 @@ void Font::textDrawRect(FontId fontId, Surface *ds, const char *text, const Comm  			// Wrap what we've got and restart  			textPoint2.x = textPoint.x - (w_total / 2);  			textPoint2.y = textPoint.y; -			draw(fontId, ds, startPointer, len_total, textPoint2, color, effectColor, flags); +			draw(fontId, startPointer, len_total, textPoint2, color, effectColor, flags);  			textPoint.y += h + TEXT_LINESPACING;  			if (textPoint.y >= rect.bottom) {  				return; @@ -642,7 +644,7 @@ void Font::textDrawRect(FontId fontId, Surface *ds, const char *text, const Comm  				// Since word hit NULL but fit, we are done  				textPoint2.x = textPoint.x - (w_total / 2);  				textPoint2.y = textPoint.y; -				draw(fontId, ds, startPointer, len_total, textPoint2, color, +				draw(fontId, startPointer, len_total, textPoint2, color,  					effectColor, flags);  				return;  			} diff --git a/engines/saga/font.h b/engines/saga/font.h index 20a34d2aef..c14d7a8b75 100644 --- a/engines/saga/font.h +++ b/engines/saga/font.h @@ -136,11 +136,11 @@ class Font {  	int getHeight(KnownFont font, const char *text, int width, FontEffectFlags flags) {  		return getHeight(knownFont2FontIdx(font), text, width, flags);  	} -	void textDraw(KnownFont font, Surface *ds, const char *string, const Common::Point &point, int color, int effectColor, FontEffectFlags flags) { -		textDraw(knownFont2FontIdx(font), ds, string, point, color, effectColor, flags); +	void textDraw(KnownFont font, const char *string, const Common::Point &point, int color, int effectColor, FontEffectFlags flags) { +		textDraw(knownFont2FontIdx(font), string, point, color, effectColor, flags);  	} -	void textDrawRect(KnownFont font, Surface *ds, const char *text, const Common::Rect &rect, int color, int effectColor, FontEffectFlags flags) { -		textDrawRect(knownFont2FontIdx(font), ds, text, rect, color, effectColor, flags); +	void textDrawRect(KnownFont font, const char *text, const Common::Rect &rect, int color, int effectColor, FontEffectFlags flags) { +		textDrawRect(knownFont2FontIdx(font), text, rect, color, effectColor, flags);  	}  	void setFontMapping(int mapping) {  		_fontMapping = mapping; @@ -162,13 +162,13 @@ class Font {  	 int getStringWidth(FontId fontId, const char *text, size_t count, FontEffectFlags flags);  	 int getHeight(FontId fontId, const char *text, int width, FontEffectFlags flags); -	 void textDrawRect(FontId fontId, Surface *ds, const char *text, const Common::Rect &rect, int color, int effectColor, FontEffectFlags flags); -	 void textDraw(FontId fontId, Surface *ds, const char *string, const Common::Point &point, int color, int effectColor, FontEffectFlags flags); +	 void textDrawRect(FontId fontId, const char *text, const Common::Rect &rect, int color, int effectColor, FontEffectFlags flags); +	 void textDraw(FontId fontId, const char *string, const Common::Point &point, int color, int effectColor, FontEffectFlags flags);  	 void loadFont(uint32 fontResourceId);  	 void createOutline(FontData *font); -	 void draw(FontId fontId, Surface *ds, const char *text, size_t count, const Common::Point &point, int color, int effectColor, FontEffectFlags flags); -	 void outFont(const FontStyle &drawFont, Surface *ds, const char *text, size_t count, const Common::Point &point, int color, FontEffectFlags flags); +	 void draw(FontId fontId, const char *text, size_t count, const Common::Point &point, int color, int effectColor, FontEffectFlags flags); +	 void outFont(const FontStyle &drawFont, const char *text, size_t count, const Common::Point &point, int color, FontEffectFlags flags);  	 FontData *getFont(FontId fontId) {  		 validate(fontId); diff --git a/engines/saga/interface.cpp b/engines/saga/interface.cpp index ffa2be758d..d336cb3135 100644 --- a/engines/saga/interface.cpp +++ b/engines/saga/interface.cpp @@ -755,7 +755,7 @@ void Interface::loadScenePortraits(int resourceId) {  	_vm->_sprite->loadList(resourceId, _scenePortraits);  } -void Interface::drawVerbPanel(Surface *backBuffer, PanelButton* panelButton) { +void Interface::drawVerbPanel(PanelButton* panelButton) {  	PanelButton * rightButtonVerbPanelButton;  	PanelButton * currentVerbPanelButton;  	KnownColor textColor; @@ -781,13 +781,12 @@ void Interface::drawVerbPanel(Surface *backBuffer, PanelButton* panelButton) {  	point.x = _mainPanel.x + panelButton->xOffset;  	point.y = _mainPanel.y + panelButton->yOffset; -	_vm->_sprite->draw(backBuffer, _vm->getDisplayClip(), _mainPanel.sprites, spriteNumber, point, 256); +	_vm->_sprite->draw(_vm->getDisplayClip(), _mainPanel.sprites, spriteNumber, point, 256); -	drawVerbPanelText(backBuffer, panelButton, textColor, kKnownColorVerbTextShadow); +	drawVerbPanelText(panelButton, textColor, kKnownColorVerbTextShadow);  }  void Interface::draw() { -	Surface *backBuffer = _vm->_gfx->getBackBuffer();  	Point leftPortraitPoint;  	Point rightPortraitPoint;  	Rect rect; @@ -800,17 +799,17 @@ void Interface::draw() {  	if (_panelMode == kPanelMain || _panelMode == kPanelMap ||  		(_panelMode == kPanelNull && _vm->getGameId() == GID_IHNM_DEMO)) {  		_mainPanel.getRect(rect); -		backBuffer->blit(rect, _mainPanel.image); +		_vm->_gfx->getBackBuffer()->blit(rect, _mainPanel.image);  		for (int i = 0; i < kVerbTypeIdsMax; i++) {  			if (_verbTypeToPanelButton[i] != NULL) { -				drawVerbPanel(backBuffer, _verbTypeToPanelButton[i]); +				drawVerbPanel(_verbTypeToPanelButton[i]);  			}  		}  	} else if (_panelMode == kPanelConverse) {  		_conversePanel.getRect(rect); -		backBuffer->blit(rect, _conversePanel.image); -		converseDisplayTextLines(backBuffer); +		_vm->_gfx->getBackBuffer()->blit(rect, _conversePanel.image); +		converseDisplayTextLines();  	}  	if (_panelMode == kPanelMain || _panelMode == kPanelConverse || @@ -818,7 +817,7 @@ void Interface::draw() {  		(_panelMode == kPanelNull && _vm->getGameId() == GID_IHNM_DEMO)) {  		leftPortraitPoint.x = _mainPanel.x + _vm->getDisplayInfo().leftPortraitXOffset;  		leftPortraitPoint.y = _mainPanel.y + _vm->getDisplayInfo().leftPortraitYOffset; -		_vm->_sprite->draw(backBuffer, _vm->getDisplayClip(), _defPortraits, _leftPortrait, leftPortraitPoint, 256); +		_vm->_sprite->draw(_vm->getDisplayClip(), _defPortraits, _leftPortrait, leftPortraitPoint, 256);  	}  	if (!_inMainMode && _vm->getDisplayInfo().rightPortraitXOffset >= 0) { //FIXME: should we change !_inMainMode to _panelMode == kPanelConverse ? @@ -833,10 +832,10 @@ void Interface::draw() {  		if (_rightPortrait >= _scenePortraits.spriteCount)  			_rightPortrait = 0; -		_vm->_sprite->draw(backBuffer, _vm->getDisplayClip(), _scenePortraits, _rightPortrait, rightPortraitPoint, 256); +		_vm->_sprite->draw(_vm->getDisplayClip(), _scenePortraits, _rightPortrait, rightPortraitPoint, 256);  	} -	drawInventory(backBuffer); +	drawInventory();  }  void Interface::calcOptionSaveSlider() { @@ -879,7 +878,7 @@ void Interface::calcOptionSaveSlider() {  	_optionSaveRectBottom.right--;  } -void Interface::drawPanelText(Surface *ds, InterfacePanel *panel, PanelButton *panelButton) { +void Interface::drawPanelText(InterfacePanel *panel, PanelButton *panelButton) {  	const char *text;  	int textWidth;  	Rect rect; @@ -925,7 +924,8 @@ void Interface::drawPanelText(Surface *ds, InterfacePanel *panel, PanelButton *p  	textPoint.x = rect.left;  	textPoint.y = rect.top + 1; -	_vm->_font->textDraw(textFont, ds, text, textPoint, _vm->KnownColor2ColorId(kKnownColorVerbText), _vm->KnownColor2ColorId(textShadowKnownColor), kFontShadow); +	_vm->_font->textDraw(textFont, text, textPoint,  +						_vm->KnownColor2ColorId(kKnownColorVerbText), _vm->KnownColor2ColorId(textShadowKnownColor), kFontShadow);  }  void Interface::drawOption() { @@ -951,14 +951,14 @@ void Interface::drawOption() {  		if (panelButton->type == kPanelButtonOption) {  			if (_vm->getGameType() == GType_ITE) { -				drawPanelButtonText(backBuffer, &_optionPanel, panelButton); +				drawPanelButtonText(&_optionPanel, panelButton);  			} else { -				drawPanelButtonText(backBuffer, &_optionPanel, panelButton, spritenum); +				drawPanelButtonText(&_optionPanel, panelButton, spritenum);  				spritenum += 2; // 2 sprites per button (lit and unlit)  			}  		}  		if (panelButton->type == kPanelButtonOptionText) { -			drawPanelText(backBuffer, &_optionPanel, panelButton); +			drawPanelText(&_optionPanel, panelButton);  		}  	} @@ -968,12 +968,12 @@ void Interface::drawOption() {  	}  	if (_vm->getGameType() == GType_ITE) { -		drawButtonBox(backBuffer, _optionSaveRectSlider, kSlider, _optionSaveFileSlider->state > 0); +		drawButtonBox(_optionSaveRectSlider, kSlider, _optionSaveFileSlider->state > 0);  	} else {  		panelButton = &_optionPanel.buttons[0];  		sliderPoint.x = _optionPanel.x + panelButton->xOffset;  		sliderPoint.y = _optionSaveRectSlider.top; -		_vm->_sprite->draw(backBuffer, _vm->getDisplayClip(), _optionPanel.sprites, 0 + _optionSaveFileSlider->state, sliderPoint, 256); +		_vm->_sprite->draw(_vm->getDisplayClip(), _optionPanel.sprites, 0 + _optionSaveFileSlider->state, sliderPoint, 256);  	} @@ -1004,9 +1004,9 @@ void Interface::drawOption() {  			textPoint.x = rect.left + 1;  			textPoint.y = rect2.top;  			if (_vm->getGameType() == GType_ITE) -				_vm->_font->textDraw(kKnownFontSmall, backBuffer, text, textPoint, fgColor, 0, kFontNormal); +				_vm->_font->textDraw(kKnownFontSmall, text, textPoint, fgColor, 0, kFontNormal);  			else -				_vm->_font->textDraw(kKnownFontVerb, backBuffer, text, textPoint, fgColor, 0, kFontNormal); +				_vm->_font->textDraw(kKnownFontVerb, text, textPoint, fgColor, 0, kFontNormal);  		}  	} @@ -1020,17 +1020,17 @@ void Interface::drawQuit() {  	_quitPanel.getRect(rect);  	if (_vm->getGameType() == GType_ITE) -		drawButtonBox(backBuffer, rect, kButton, false); +		drawButtonBox(rect, kButton, false);  	else  		backBuffer->blit(rect, _quitPanel.image);  	for (i = 0; i < _quitPanel.buttonsCount; i++) {  		panelButton = &_quitPanel.buttons[i];  		if (panelButton->type == kPanelButtonQuit) { -			drawPanelButtonText(backBuffer, &_quitPanel, panelButton); +			drawPanelButtonText(&_quitPanel, panelButton);  		}  		if (panelButton->type == kPanelButtonQuitText) { -			drawPanelText(backBuffer, &_quitPanel, panelButton); +			drawPanelText(&_quitPanel, panelButton);  		}  	}  } @@ -1085,17 +1085,17 @@ void Interface::drawLoad() {  	_loadPanel.getRect(rect);  	if (_vm->getGameType() == GType_ITE) -		drawButtonBox(backBuffer, rect, kButton, false); +		drawButtonBox(rect, kButton, false);  	else  		backBuffer->blit(rect, _loadPanel.image);  	for (i = 0; i < _loadPanel.buttonsCount; i++) {  		panelButton = &_loadPanel.buttons[i];  		if (panelButton->type == kPanelButtonLoad) { -			drawPanelButtonText(backBuffer, &_loadPanel, panelButton); +			drawPanelButtonText(&_loadPanel, panelButton);  		}  		if (panelButton->type == kPanelButtonLoadText) { -			drawPanelText(backBuffer, &_loadPanel, panelButton); +			drawPanelText(&_loadPanel, panelButton);  		}  	}  } @@ -1262,16 +1262,17 @@ bool Interface::processTextInput(Common::KeyState keystate) {  	return true;  } -void Interface::drawTextInput(Surface *ds, InterfacePanel *panel, PanelButton *panelButton) { +void Interface::drawTextInput(InterfacePanel *panel, PanelButton *panelButton) {  	Point textPoint;  	Rect rect;  	char ch[2];  	int fgColor;  	uint i; +	Surface *backBuffer = _vm->_gfx->getBackBuffer();  	ch[1] = 0;  	panel->calcPanelButtonRect(panelButton, rect); -	drawButtonBox(ds, rect, kEdit, _textInput); +	drawButtonBox(rect, kEdit, _textInput);  	rect.left += 4;  	rect.top += 4;  	rect.setHeight(_vm->_font->getHeight(kKnownFontSmall)); @@ -1281,20 +1282,20 @@ void Interface::drawTextInput(Surface *ds, InterfacePanel *panel, PanelButton *p  		rect.setWidth(_vm->_font->getStringWidth(kKnownFontSmall, ch, 0, kFontNormal));  		if ((i == _textInputPos) && _textInput) {  			fgColor = _vm->KnownColor2ColorId(kKnownColorBlack); -			ds->fillRect(rect, _vm->KnownColor2ColorId(kKnownColorWhite)); +			backBuffer->fillRect(rect, _vm->KnownColor2ColorId(kKnownColorWhite));  		} else {  			fgColor = _vm->KnownColor2ColorId(kKnownColorWhite);  		}  		textPoint.x = rect.left;  		textPoint.y = rect.top + 1; -		_vm->_font->textDraw(kKnownFontSmall, ds, ch, textPoint, fgColor, 0, kFontNormal); +		_vm->_font->textDraw(kKnownFontSmall, ch, textPoint, fgColor, 0, kFontNormal);  		rect.left += rect.width();  	}  	if (_textInput && (_textInputPos >= i)) {  		ch[0] = ' ';  		rect.setWidth(_vm->_font->getStringWidth(kKnownFontSmall, ch, 0, kFontNormal)); -		ds->fillRect(rect, _vm->KnownColor2ColorId(kKnownColorWhite)); +		backBuffer->fillRect(rect, _vm->KnownColor2ColorId(kKnownColorWhite));  	}  } @@ -1306,21 +1307,21 @@ void Interface::drawSave() {  	_savePanel.getRect(rect);  	if (_vm->getGameType() == GType_ITE) -		drawButtonBox(backBuffer, rect, kButton, false); +		drawButtonBox(rect, kButton, false);  	else  		backBuffer->blit(rect, _savePanel.image);  	for (i = 0; i < _savePanel.buttonsCount; i++) {  		panelButton = &_savePanel.buttons[i];  		if (panelButton->type == kPanelButtonSave) { -			drawPanelButtonText(backBuffer, &_savePanel, panelButton); +			drawPanelButtonText(&_savePanel, panelButton);  		}  		if (panelButton->type == kPanelButtonSaveText) { -			drawPanelText(backBuffer, &_savePanel, panelButton); +			drawPanelText(&_savePanel, panelButton);  		}  	} -	drawTextInput(backBuffer, &_savePanel, _saveEdit); +	drawTextInput(&_savePanel, _saveEdit);  }  void Interface::drawProtect() { @@ -1330,15 +1331,15 @@ void Interface::drawProtect() {  	PanelButton *panelButton;  	_protectPanel.getRect(rect); -	drawButtonBox(backBuffer, rect, kButton, false); +	drawButtonBox(rect, kButton, false);  	for (i = 0; i < _protectPanel.buttonsCount; i++) {  		panelButton = &_protectPanel.buttons[i];  		if (panelButton->type == kPanelButtonProtectText) { -			drawPanelText(backBuffer, &_protectPanel, panelButton); +			drawPanelText(&_protectPanel, panelButton);  		}  	} -	drawTextInput(backBuffer, &_protectPanel, _protectEdit); +	drawTextInput(&_protectPanel, _protectEdit);  }  void Interface::handleSaveUpdate(const Point& mousePoint) { @@ -1863,7 +1864,6 @@ void Interface::update(const Point& mousePoint, int updateFlag) {  }  void Interface::drawStatusBar() { -	Surface *backBuffer = _vm->_gfx->getBackBuffer();  	Rect rect;  	Point textPoint;  	int stringWidth; @@ -1886,7 +1886,7 @@ void Interface::drawStatusBar() {  	rect.right = rect.left + _vm->getDisplayWidth();  	rect.bottom = rect.top + _vm->getDisplayInfo().statusHeight; -	backBuffer->drawRect(rect, _vm->getDisplayInfo().statusBGColor - offset); +	_vm->_gfx->getBackBuffer()->drawRect(rect, _vm->getDisplayInfo().statusBGColor - offset);  	stringWidth = _vm->_font->getStringWidth(kKnownFontSmall, _statusText, 0, kFontNormal); @@ -1898,9 +1898,9 @@ void Interface::drawStatusBar() {  	textPoint.x = _vm->getDisplayInfo().statusXOffset + (_vm->getDisplayInfo().statusWidth - stringWidth) / 2;  	textPoint.y = _vm->getDisplayInfo().statusYOffset + _vm->getDisplayInfo().statusTextY;  	if (_vm->getGameType() == GType_ITE) -		_vm->_font->textDraw(kKnownFontSmall, backBuffer, _statusText, textPoint, color, 0, kFontNormal); +		_vm->_font->textDraw(kKnownFontSmall, _statusText, textPoint, color, 0, kFontNormal);  	else -		_vm->_font->textDraw(kKnownFontVerb, backBuffer, _statusText, textPoint, color, 0, kFontNormal); +		_vm->_font->textDraw(kKnownFontVerb, _statusText, textPoint, color, 0, kFontNormal);  	if (_saveReminderState > 0) {  		rect.left = _vm->getDisplayInfo().saveReminderXOffset; @@ -1908,7 +1908,7 @@ void Interface::drawStatusBar() {  		rect.right = rect.left + _vm->getDisplayInfo().saveReminderWidth;  		rect.bottom = rect.top + _vm->getDisplayInfo().saveReminderHeight; -		_vm->_sprite->draw(backBuffer, _vm->getDisplayClip(), _vm->_sprite->_saveReminderSprites, +		_vm->_sprite->draw(_vm->getDisplayClip(), _vm->_sprite->_saveReminderSprites,  			_vm->getDisplayInfo().saveReminderFirstSpriteNumber + _saveReminderState - 1,  			rect, 256); @@ -2094,23 +2094,23 @@ int Interface::inventoryItemPosition(int objectId) {  	return -1;  } -void Interface::drawInventory(Surface *backBuffer) { +void Interface::drawInventory() {  	if (!isInMainMode())  		return; -	int i;  	Rect rect; -	int ci; +	int ci = _inventoryStart;  	ObjectData *obj; -	ci = _inventoryStart; +	Surface *backBuffer = _vm->_gfx->getBackBuffer(); +  	if (_inventoryStart != 0) { -		drawPanelButtonArrow(backBuffer, &_mainPanel, _inventoryUpButton); +		drawPanelButtonArrow(&_mainPanel, _inventoryUpButton);  	}  	if (_inventoryStart != _inventoryEnd) { -		drawPanelButtonArrow(backBuffer, &_mainPanel, _inventoryDownButton); +		drawPanelButtonArrow(&_mainPanel, _inventoryDownButton);  	} -	for (i = 0; i < _mainPanel.buttonsCount; i++) { +	for (int i = 0; i < _mainPanel.buttonsCount; i++) {  		if (_mainPanel.buttons[i].type != kPanelButtonInventory) {  			continue;  		} @@ -2123,7 +2123,7 @@ void Interface::drawInventory(Surface *backBuffer) {  		if (ci < _inventoryCount) {  			obj = _vm->_actor->getObj(_inventory[ci]); -			_vm->_sprite->draw(backBuffer, _vm->getDisplayClip(), _vm->_sprite->_inventorySprites, obj->_spriteListResourceId, rect, 256); +			_vm->_sprite->draw(_vm->getDisplayClip(), _vm->_sprite->_inventorySprites, obj->_spriteListResourceId, rect, 256);  		}  		ci++; @@ -2140,12 +2140,13 @@ void Interface::setVerbState(int verb, int state) {  	draw();  } -void Interface::drawButtonBox(Surface *ds, const Rect& rect, ButtonKind kind, bool down) { +void Interface::drawButtonBox(const Rect& rect, ButtonKind kind, bool down) {  	byte cornerColor;  	byte frameColor;  	byte fillColor;  	byte solidColor;  	byte odl, our, idl, iur; +	Surface *backBuffer = _vm->_gfx->getBackBuffer();  	switch (kind ) {  		case kSlider: @@ -2193,14 +2194,14 @@ void Interface::drawButtonBox(Surface *ds, const Rect& rect, ButtonKind kind, bo  	int xe = rect.right - 1;  	int ye = rect.bottom - 1; -	((byte *)ds->getBasePtr(x, y))[0] = cornerColor; -	((byte *)ds->getBasePtr(x, ye))[0] = cornerColor; -	((byte *)ds->getBasePtr(xe, y))[0] = cornerColor; -	((byte *)ds->getBasePtr(xe, ye))[0] = cornerColor; -	ds->hLine(x + 1, y, x + w - 2, frameColor); -	ds->hLine(x + 1, ye, x + w - 2, frameColor); -	ds->vLine(x, y + 1, y + h - 2, frameColor); -	ds->vLine(xe, y + 1, y + h - 2, frameColor); +	((byte *)backBuffer->getBasePtr(x, y))[0] = cornerColor; +	((byte *)backBuffer->getBasePtr(x, ye))[0] = cornerColor; +	((byte *)backBuffer->getBasePtr(xe, y))[0] = cornerColor; +	((byte *)backBuffer->getBasePtr(xe, ye))[0] = cornerColor; +	backBuffer->hLine(x + 1, y, x + w - 2, frameColor); +	backBuffer->hLine(x + 1, ye, x + w - 2, frameColor); +	backBuffer->vLine(x, y + 1, y + h - 2, frameColor); +	backBuffer->vLine(xe, y + 1, y + h - 2, frameColor);  	x++;  	y++; @@ -2208,10 +2209,10 @@ void Interface::drawButtonBox(Surface *ds, const Rect& rect, ButtonKind kind, bo  	ye--;  	w -= 2;  	h -= 2; -	ds->vLine(x, y, y + h - 1, odl); -	ds->hLine(x, ye, x + w - 1, odl); -	ds->vLine(xe, y, y + h - 2, our); -	ds->hLine(x + 1, y, x + 1 + w - 2, our); +	backBuffer->vLine(x, y, y + h - 1, odl); +	backBuffer->hLine(x, ye, x + w - 1, odl); +	backBuffer->vLine(xe, y, y + h - 2, our); +	backBuffer->hLine(x + 1, y, x + 1 + w - 2, our);  	x++;  	y++; @@ -2219,23 +2220,23 @@ void Interface::drawButtonBox(Surface *ds, const Rect& rect, ButtonKind kind, bo  	ye--;  	w -= 2;  	h -= 2; -	((byte *)ds->getBasePtr(x, y))[0] = fillColor; -	((byte *)ds->getBasePtr(xe, ye))[0] = fillColor; -	ds->vLine(x, y + 1, y + 1 + h - 2, idl); -	ds->hLine(x + 1, ye, x + 1 + w - 2, idl); -	ds->vLine(xe, y, y + h - 2, iur); -	ds->hLine(x + 1, y, x + 1 + w - 2, iur); +	((byte *)backBuffer->getBasePtr(x, y))[0] = fillColor; +	((byte *)backBuffer->getBasePtr(xe, ye))[0] = fillColor; +	backBuffer->vLine(x, y + 1, y + 1 + h - 2, idl); +	backBuffer->hLine(x + 1, ye, x + 1 + w - 2, idl); +	backBuffer->vLine(xe, y, y + h - 2, iur); +	backBuffer->hLine(x + 1, y, x + 1 + w - 2, iur);  	x++; y++;  	w -= 2; h -= 2;  	Common::Rect fill(x, y, x + w, y + h); -	ds->fillRect(fill, solidColor); +	backBuffer->fillRect(fill, solidColor);  }  static const int readingSpeeds[] = { kTextClick, kTextSlow, kTextMid, kTextFast }; -void Interface::drawPanelButtonText(Surface *ds, InterfacePanel *panel, PanelButton *panelButton, int spritenum) { +void Interface::drawPanelButtonText(InterfacePanel *panel, PanelButton *panelButton, int spritenum) {  	const char *text;  	int textId;  	int textWidth; @@ -2314,41 +2315,41 @@ void Interface::drawPanelButtonText(Surface *ds, InterfacePanel *panel, PanelBut  	panel->calcPanelButtonRect(panelButton, rect);  	if (_vm->getGameType() == GType_ITE) { -		drawButtonBox(ds, rect, kButton, panelButton->state > 0); +		drawButtonBox(rect, kButton, panelButton->state > 0);  	} else {  		litButton = panelButton->state > 0;  		if (panel == &_optionPanel) {  			texturePoint.x = _optionPanel.x + panelButton->xOffset - 1;  			texturePoint.y = _optionPanel.y + panelButton->yOffset - 1; -			_vm->_sprite->draw(ds, _vm->getDisplayClip(), _optionPanel.sprites, spritenum + 2 + litButton, texturePoint, 256); +			_vm->_sprite->draw(_vm->getDisplayClip(), _optionPanel.sprites, spritenum + 2 + litButton, texturePoint, 256);  		} else if (panel == &_quitPanel) {  			texturePoint.x = _quitPanel.x + panelButton->xOffset - 3;  			texturePoint.y = _quitPanel.y + panelButton->yOffset - 3; -			_vm->_sprite->draw(ds, _vm->getDisplayClip(), _quitPanel.sprites, litButton, texturePoint, 256); +			_vm->_sprite->draw(_vm->getDisplayClip(), _quitPanel.sprites, litButton, texturePoint, 256);  		} else if (panel == &_savePanel) {  			texturePoint.x = _savePanel.x + panelButton->xOffset - 3;  			texturePoint.y = _savePanel.y + panelButton->yOffset - 3; -			_vm->_sprite->draw(ds, _vm->getDisplayClip(), _savePanel.sprites, litButton, texturePoint, 256); +			_vm->_sprite->draw(_vm->getDisplayClip(), _savePanel.sprites, litButton, texturePoint, 256);  			// Input text box sprite  			texturePoint.x = _savePanel.x + _saveEdit->xOffset - 2;  			texturePoint.y = _savePanel.y + _saveEdit->yOffset - 2; -			_vm->_sprite->draw(ds, _vm->getDisplayClip(), _savePanel.sprites, 2, texturePoint, 256); +			_vm->_sprite->draw(_vm->getDisplayClip(), _savePanel.sprites, 2, texturePoint, 256);  		} else if (panel == &_loadPanel) {  			texturePoint.x = _loadPanel.x + panelButton->xOffset - 3;  			texturePoint.y = _loadPanel.y + panelButton->yOffset - 3; -			_vm->_sprite->draw(ds, _vm->getDisplayClip(), _loadPanel.sprites, litButton, texturePoint, 256); +			_vm->_sprite->draw(_vm->getDisplayClip(), _loadPanel.sprites, litButton, texturePoint, 256);  		} else {  			// revert to default behavior -			drawButtonBox(ds, rect, kButton, panelButton->state > 0); +			drawButtonBox(rect, kButton, panelButton->state > 0);  		}  	} -	_vm->_font->textDraw(textFont, ds, text, point, +	_vm->_font->textDraw(textFont, text, point,  		_vm->KnownColor2ColorId(textColor), _vm->KnownColor2ColorId(textShadowKnownColor), kFontShadow);  } -void Interface::drawPanelButtonArrow(Surface *ds, InterfacePanel *panel, PanelButton *panelButton) { +void Interface::drawPanelButtonArrow(InterfacePanel *panel, PanelButton *panelButton) {  	Point point;  	int spriteNumber; @@ -2366,12 +2367,12 @@ void Interface::drawPanelButtonArrow(Surface *ds, InterfacePanel *panel, PanelBu  	point.y = panel->y + panelButton->yOffset;  	if (_vm->getGameType() == GType_ITE) -		_vm->_sprite->draw(ds, _vm->getDisplayClip(), _vm->_sprite->_mainSprites, spriteNumber, point, 256); +		_vm->_sprite->draw(_vm->getDisplayClip(), _vm->_sprite->_mainSprites, spriteNumber, point, 256);  	else -		_vm->_sprite->draw(ds, _vm->getDisplayClip(), _vm->_sprite->_arrowSprites, spriteNumber, point, 256); +		_vm->_sprite->draw(_vm->getDisplayClip(), _vm->_sprite->_arrowSprites, spriteNumber, point, 256);  } -void Interface::drawVerbPanelText(Surface *ds, PanelButton *panelButton, KnownColor textKnownColor, KnownColor textShadowKnownColor) { +void Interface::drawVerbPanelText(PanelButton *panelButton, KnownColor textKnownColor, KnownColor textShadowKnownColor) {  	const char *text;  	int textWidth;  	Point point; @@ -2396,7 +2397,9 @@ void Interface::drawVerbPanelText(Surface *ds, PanelButton *panelButton, KnownCo  		point.y = _mainPanel.y + panelButton->yOffset + 12;  	} -	_vm->_font->textDraw(kKnownFontVerb, ds, text, point, _vm->KnownColor2ColorId(textKnownColor),_vm->KnownColor2ColorId(textShadowKnownColor), (textShadowKnownColor != kKnownColorTransparent) ? kFontShadow : kFontNormal); +	_vm->_font->textDraw(kKnownFontVerb, text, point,  +						_vm->KnownColor2ColorId(textKnownColor), _vm->KnownColor2ColorId(textShadowKnownColor),  +						(textShadowKnownColor != kKnownColorTransparent) ? kFontShadow : kFontNormal);  } @@ -2508,7 +2511,7 @@ void Interface::converseSetTextLines(int row) {  	}  } -void Interface::converseDisplayTextLines(Surface *ds) { +void Interface::converseDisplayTextLines() {  	int relPos;  	byte foregnd;  	byte backgnd; @@ -2520,6 +2523,7 @@ void Interface::converseDisplayTextLines(Surface *ds) {  	};  	Rect rect(8, _vm->getDisplayInfo().converseTextLines * _vm->getDisplayInfo().converseTextHeight);  	Point textPoint; +	Surface *backBuffer = _vm->_gfx->getBackBuffer();  	assert(_conversePanel.buttonsCount >= 6); @@ -2536,9 +2540,9 @@ void Interface::converseDisplayTextLines(Surface *ds) {  		_conversePanel.y + _conversePanel.buttons[0].yOffset);  	if (_vm->getGameType() == GType_ITE) -		ds->drawRect(rect, kITEColorDarkGrey);	//fill bullet place +		backBuffer->drawRect(rect, kITEColorDarkGrey);	//fill bullet place  	else -		ds->drawRect(rect, _vm->KnownColor2ColorId(kKnownColorBlack));	//fill bullet place +		backBuffer->drawRect(rect, _vm->KnownColor2ColorId(kKnownColorBlack));	//fill bullet place  	for (int i = 0; i < _vm->getDisplayInfo().converseTextLines; i++) {  		relPos = _converseStartPos + i; @@ -2567,7 +2571,7 @@ void Interface::converseDisplayTextLines(Surface *ds) {  		_conversePanel.calcPanelButtonRect(&_conversePanel.buttons[i], rect);  		rect.left += 8; -		ds->drawRect(rect, backgnd); +		backBuffer->drawRect(rect, backgnd);  		str = _converseText[relPos].text; @@ -2576,24 +2580,24 @@ void Interface::converseDisplayTextLines(Surface *ds) {  			textPoint.y = rect.top;  			if (_vm->getGameType() == GType_ITE) -				_vm->_font->textDraw(kKnownFontSmall, ds, bullet, textPoint, bulletForegnd, bulletBackgnd, (FontEffectFlags)(kFontShadow | kFontDontmap)); +				_vm->_font->textDraw(kKnownFontSmall, bullet, textPoint, bulletForegnd, bulletBackgnd, (FontEffectFlags)(kFontShadow | kFontDontmap));  			else -				_vm->_font->textDraw(kKnownFontVerb, ds, bullet, textPoint, bulletForegnd, bulletBackgnd, (FontEffectFlags)(kFontShadow | kFontDontmap)); +				_vm->_font->textDraw(kKnownFontVerb, bullet, textPoint, bulletForegnd, bulletBackgnd, (FontEffectFlags)(kFontShadow | kFontDontmap));  		}  		textPoint.x = rect.left + 1;  		textPoint.y = rect.top;  		if (_vm->getGameType() == GType_ITE) -			_vm->_font->textDraw(kKnownFontSmall, ds, str, textPoint, foregnd, kITEColorBlack, kFontShadow); +			_vm->_font->textDraw(kKnownFontSmall, str, textPoint, foregnd, kITEColorBlack, kFontShadow);  		else -			_vm->_font->textDraw(kKnownFontVerb, ds, str, textPoint, foregnd, _vm->KnownColor2ColorId(kKnownColorBlack), kFontShadow); +			_vm->_font->textDraw(kKnownFontVerb, str, textPoint, foregnd, _vm->KnownColor2ColorId(kKnownColorBlack), kFontShadow);  	}  	if (_converseStartPos != 0) { -		drawPanelButtonArrow(ds, &_conversePanel, _converseUpButton); +		drawPanelButtonArrow(&_conversePanel, _converseUpButton);  	}  	if (_converseStartPos != _converseEndPos) { -		drawPanelButtonArrow(ds, &_conversePanel, _converseDownButton); +		drawPanelButtonArrow(&_conversePanel, _converseDownButton);  	}  } @@ -2792,7 +2796,7 @@ void Interface::mapPanelDrawCrossHair() {  	Rect screen(_vm->getDisplayWidth(), _vm->_scene->getHeight());  	if (screen.contains(mapPosition)) { -		_vm->_sprite->draw(_vm->_gfx->getBackBuffer(), _vm->getDisplayClip(), _vm->_sprite->_mainSprites, +		_vm->_sprite->draw(_vm->getDisplayClip(), _vm->_sprite->_mainSprites,  						   _mapPanelCrossHairState? RID_ITE_SPR_CROSSHAIR : RID_ITE_SPR_CROSSHAIR + 1,  						   mapPosition, 256);  	} diff --git a/engines/saga/interface.h b/engines/saga/interface.h index 46df12ed51..b58fed6676 100644 --- a/engines/saga/interface.h +++ b/engines/saga/interface.h @@ -256,7 +256,7 @@ public:  	}  private: -	void drawInventory(Surface *backBuffer); +	void drawInventory();  	void updateInventory(int pos);  	void inventoryChangePos(int chg);  	void inventorySetPos(int key); @@ -339,18 +339,18 @@ private:  	void setLoad(PanelButton *panelButton);  	void setSave(PanelButton *panelButton); -	void drawTextInput(Surface *ds, InterfacePanel *panel, PanelButton *panelButton); -	void drawPanelText(Surface *ds, InterfacePanel *panel, PanelButton *panelButton); -	void drawPanelButtonText(Surface *ds, InterfacePanel *panel, PanelButton *panelButton, int spritenum = 0); +	void drawTextInput(InterfacePanel *panel, PanelButton *panelButton); +	void drawPanelText(InterfacePanel *panel, PanelButton *panelButton); +	void drawPanelButtonText(InterfacePanel *panel, PanelButton *panelButton, int spritenum = 0);  	enum ButtonKind {  		kButton,  		kSlider,  		kEdit  	}; -	void drawButtonBox(Surface *ds, const Rect &rect, ButtonKind kind, bool down); -	void drawPanelButtonArrow(Surface *ds, InterfacePanel *panel, PanelButton *panelButton); -	void drawVerbPanelText(Surface *ds, PanelButton *panelButton, KnownColor textKnownColor, KnownColor textShadowKnownColor); -	void drawVerbPanel(Surface *backBuffer, PanelButton* panelButton); +	void drawButtonBox(const Rect &rect, ButtonKind kind, bool down); +	void drawPanelButtonArrow(InterfacePanel *panel, PanelButton *panelButton); +	void drawVerbPanelText(PanelButton *panelButton, KnownColor textKnownColor, KnownColor textShadowKnownColor); +	void drawVerbPanel(PanelButton* panelButton);  	void calcOptionSaveSlider();  	bool processTextInput(Common::KeyState keystate);  	void processStatusTextInput(Common::KeyState keystate); @@ -365,7 +365,7 @@ public:  	void converseSetPos(int key);  private: -	void converseDisplayTextLines(Surface *ds); +	void converseDisplayTextLines();  	PanelButton *getPanelButtonByVerbType(int verb) {  		if ((verb < 0) || (verb >= kVerbTypeIdsMax)) {  			error("Interface::getPanelButtonByVerbType wrong verb"); diff --git a/engines/saga/isomap.cpp b/engines/saga/isomap.cpp index e607adb4cb..1df3c2aa26 100644 --- a/engines/saga/isomap.cpp +++ b/engines/saga/isomap.cpp @@ -377,10 +377,9 @@ int16 IsoMap::findMulti(int16 tileIndex, int16 absU, int16 absV, int16 absH) {  }  void IsoMap::draw(Surface *ds) { -  	_tileClip = _vm->_scene->getSceneClip();  	ds->drawRect(_tileClip, 0); -	drawTiles(ds, NULL); +	drawTiles(NULL);  }  void IsoMap::setMapPosition(int x, int y) { @@ -388,7 +387,7 @@ void IsoMap::setMapPosition(int x, int y) {  	_mapPosition.y = y;  } -void IsoMap::drawSprite(Surface *ds, SpriteList &spriteList, int spriteNumber, const Location &location, const Point &screenPosition, int scale) { +void IsoMap::drawSprite(SpriteList &spriteList, int spriteNumber, const Location &location, const Point &screenPosition, int scale) {  	int width;  	int height;  	int xAlign; @@ -407,12 +406,12 @@ void IsoMap::drawSprite(Surface *ds, SpriteList &spriteList, int spriteNumber, c  	_tileClip.top = CLIP<int>(spritePointer.y, 0, _vm->_scene->getHeight());  	_tileClip.bottom = CLIP<int>(spritePointer.y + height, 0, _vm->_scene->getHeight()); -	_vm->_sprite->drawClip(ds, clip, spritePointer, width, height, spriteBuffer); -	drawTiles(ds, &location); +	_vm->_sprite->drawClip(clip, spritePointer, width, height, spriteBuffer); +	drawTiles(&location);  } -void IsoMap::drawTiles(Surface *ds, const Location *location) { +void IsoMap::drawTiles(const Location *location) {  	Point view1;  	Point fineScroll;  	Point tileScroll; @@ -480,9 +479,9 @@ void IsoMap::drawTiles(Surface *ds, const Location *location) {  				rLocation.u() = location->u() - (u2 << 7);  				rLocation.v() = location->v() - (v2 << 7);  				rLocation.z = location->z; -				drawSpriteMetaTile(ds, metaTileIndex, metaTileX, rLocation, u2 << 3, v2 << 3); +				drawSpriteMetaTile(metaTileIndex, metaTileX, rLocation, u2 << 3, v2 << 3);  			} else { -				drawMetaTile(ds, metaTileIndex, metaTileX, u2 << 3, v2 << 3); +				drawMetaTile(metaTileIndex, metaTileX, u2 << 3, v2 << 3);  			}  		} @@ -524,9 +523,9 @@ void IsoMap::drawTiles(Surface *ds, const Location *location) {  				rLocation.u() = location->u() - (u2 << 7);  				rLocation.v() = location->v() - (v2 << 7);  				rLocation.z = location->z; -				drawSpriteMetaTile(ds, metaTileIndex, metaTileX, rLocation, u2 << 3, v2 << 3); +				drawSpriteMetaTile(metaTileIndex, metaTileX, rLocation, u2 << 3, v2 << 3);  			} else { -				drawMetaTile(ds, metaTileIndex, metaTileX, u2 << 3, v2 << 3); +				drawMetaTile(metaTileIndex, metaTileX, u2 << 3, v2 << 3);  			}  		}  		metaTileY.y += 64; @@ -534,7 +533,7 @@ void IsoMap::drawTiles(Surface *ds, const Location *location) {  } -void IsoMap::drawSpriteMetaTile(Surface *ds, uint16 metaTileIndex, const Point &point, Location &location, int16 absU, int16 absV) { +void IsoMap::drawSpriteMetaTile(uint16 metaTileIndex, const Point &point, Location &location, int16 absU, int16 absV) {  	MetaTileData * metaTile;  	uint16 high;  	int16 platformIndex; @@ -556,12 +555,12 @@ void IsoMap::drawSpriteMetaTile(Surface *ds, uint16 metaTileIndex, const Point &  		platformIndex = metaTile->stack[high];  		if (platformIndex >= 0) { -			drawSpritePlatform( ds, platformIndex, platformPoint, location, absU, absV, high ); +			drawSpritePlatform(platformIndex, platformPoint, location, absU, absV, high);  		}  	}  } -void IsoMap::drawMetaTile(Surface *ds, uint16 metaTileIndex, const Point &point, int16 absU, int16 absV) { +void IsoMap::drawMetaTile(uint16 metaTileIndex, const Point &point, int16 absU, int16 absV) {  	MetaTileData * metaTile;  	uint16 high;  	int16 platformIndex; @@ -583,12 +582,12 @@ void IsoMap::drawMetaTile(Surface *ds, uint16 metaTileIndex, const Point &point,  		platformIndex = metaTile->stack[high];  		if (platformIndex >= 0) { -			drawPlatform( ds, platformIndex, platformPoint, absU, absV, high ); +			drawPlatform(platformIndex, platformPoint, absU, absV, high);  		}  	}  } -void IsoMap::drawSpritePlatform(Surface *ds, uint16 platformIndex, const Point &point, const Location &location, int16 absU, int16 absV, int16 absH) { +void IsoMap::drawSpritePlatform(uint16 platformIndex, const Point &point, const Location &location, int16 absU, int16 absV, int16 absH) {  	TilePlatformData *tilePlatform;  	int16 u, v;  	Point s; @@ -636,14 +635,14 @@ void IsoMap::drawSpritePlatform(Surface *ds, uint16 platformIndex, const Point &  						tileIndex = findMulti(tileIndex, absU + u, absV + v, absH);  					} -					drawTile(ds, tileIndex, s, ©Location); +					drawTile(tileIndex, s, ©Location);  				}  			}  		}  	}  } -void IsoMap::drawPlatform(Surface *ds, uint16 platformIndex, const Point &point, int16 absU, int16 absV, int16 absH) { +void IsoMap::drawPlatform(uint16 platformIndex, const Point &point, int16 absU, int16 absV, int16 absH) {  	TilePlatformData *tilePlatform;  	int16 u, v;  	Point s; @@ -688,7 +687,7 @@ void IsoMap::drawPlatform(Surface *ds, uint16 platformIndex, const Point &point,  						tileIndex = findMulti(tileIndex, absU + u, absV + v, absH);  					} -					drawTile(ds, tileIndex, s, NULL); +					drawTile(tileIndex, s, NULL);  				}  			}  		} @@ -699,7 +698,7 @@ void IsoMap::drawPlatform(Surface *ds, uint16 platformIndex, const Point &point,  #define THRESH8			8  #define THRESH16		16 -void IsoMap::drawTile(Surface *ds, uint16 tileIndex, const Point &point, const Location *location) { +void IsoMap::drawTile(uint16 tileIndex, const Point &point, const Location *location) {  	const byte *tilePointer;  	const byte *readPointer;  	byte *drawPointer; @@ -709,7 +708,7 @@ void IsoMap::drawTile(Surface *ds, uint16 tileIndex, const Point &point, const L  	int row, col, count, lowBound;  	int bgRunCount;  	int fgRunCount; - +	Surface *backBuffer = _vm->_gfx->getBackBuffer();  	if (tileIndex >= _tilesCount) {  		error("IsoMap::drawTile wrong tileIndex"); @@ -833,7 +832,7 @@ void IsoMap::drawTile(Surface *ds, uint16 tileIndex, const Point &point, const L  	for (row = drawPoint.y; row < lowBound; row++) {  		widthCount = 0;  		if (row >= _tileClip.top) { -			drawPointer = (byte *)ds->pixels + drawPoint.x + (row * ds->pitch); +			drawPointer = (byte *)backBuffer->pixels + drawPoint.x + (row * backBuffer->pitch);  			col = drawPoint.x;  			for (;;) {  				bgRunCount = *readPointer++; @@ -853,8 +852,8 @@ void IsoMap::drawTile(Surface *ds, uint16 tileIndex, const Point &point, const L  					col++;  				}  				while ((col < _tileClip.right) && (count < fgRunCount)) { -					assert((byte *)ds->pixels <= (byte *)(drawPointer + count)); -					assert((byte *)((byte *)ds->pixels + (_vm->getDisplayWidth() * +					assert((byte *)backBuffer->pixels <= (byte *)(drawPointer + count)); +					assert((byte *)((byte *)backBuffer->pixels + (_vm->getDisplayWidth() *  								 _vm->getDisplayHeight())) > (byte *)(drawPointer + count));  					drawPointer[count] = readPointer[count];  					count++; diff --git a/engines/saga/isomap.h b/engines/saga/isomap.h index eb548ce5dc..fd84ce1518 100644 --- a/engines/saga/isomap.h +++ b/engines/saga/isomap.h @@ -163,7 +163,7 @@ public:  	void loadMulti(const byte * resourcePointer, size_t resourceLength);  	void freeMem();  	void draw(Surface *ds); -	void drawSprite(Surface *ds, SpriteList &spriteList, int spriteNumber, const Location &location, const Point &screenPosition, int scale); +	void drawSprite(SpriteList &spriteList, int spriteNumber, const Location &location, const Point &screenPosition, int scale);  	void adjustScroll(bool jump);  	void tileCoordsToScreenPoint(const Location &location, Point &position) {  		position.x = location.u() - location.v() + (128 * SAGA_TILEMAP_W) - _viewScroll.x + 16; @@ -181,12 +181,12 @@ public:  	int16 getTileIndex(int16 u, int16 v, int16 z);  private: -	void drawTiles(Surface *ds, const Location *location); -	void drawMetaTile(Surface *ds, uint16 metaTileIndex, const Point &point, int16 absU, int16 absV); -	void drawSpriteMetaTile(Surface *ds, uint16 metaTileIndex, const Point &point, Location &location, int16 absU, int16 absV); -	void drawPlatform(Surface *ds, uint16 platformIndex, const Point &point, int16 absU, int16 absV, int16 absH); -	void drawSpritePlatform(Surface *ds, uint16 platformIndex, const Point &point, const Location &location, int16 absU, int16 absV, int16 absH); -	void drawTile(Surface *ds, uint16 tileIndex, const Point &point, const Location *location); +	void drawTiles(const Location *location); +	void drawMetaTile(uint16 metaTileIndex, const Point &point, int16 absU, int16 absV); +	void drawSpriteMetaTile(uint16 metaTileIndex, const Point &point, Location &location, int16 absU, int16 absV); +	void drawPlatform(uint16 platformIndex, const Point &point, int16 absU, int16 absV, int16 absH); +	void drawSpritePlatform(uint16 platformIndex, const Point &point, const Location &location, int16 absU, int16 absV, int16 absH); +	void drawTile(uint16 tileIndex, const Point &point, const Location *location);  	int16 smoothSlide(int16 value, int16 min, int16 max) {  		if (value < min) {  			if (value < min - 100 || value > min - 4) { diff --git a/engines/saga/objectmap.cpp b/engines/saga/objectmap.cpp index 6ad3d38cfb..91d265fa05 100644 --- a/engines/saga/objectmap.cpp +++ b/engines/saga/objectmap.cpp @@ -142,7 +142,7 @@ bool HitZone::hitTest(const Point &testPoint) {  }  #ifdef SAGA_DEBUG -void HitZone::draw(SagaEngine *vm, Surface *ds, int color) { +void HitZone::draw(SagaEngine *vm, int color) {  	int i, pointsCount, j;  	Location location;  	HitZone::ClickArea *clickArea; @@ -237,7 +237,7 @@ void ObjectMap::freeMem() {  #ifdef SAGA_DEBUG -void ObjectMap::draw(Surface *ds, const Point& testPoint, int color, int color2) { +void ObjectMap::draw(const Point& testPoint, int color, int color2) {  	int i;  	int hitZoneIndex;  	char txtBuf[32]; @@ -255,14 +255,14 @@ void ObjectMap::draw(Surface *ds, const Point& testPoint, int color, int color2)  	hitZoneIndex = hitTest(pickPoint);  	for (i = 0; i < _hitZoneListCount; i++) { -		_hitZoneList[i]->draw(_vm, ds, (hitZoneIndex == i) ? color2 : color); +		_hitZoneList[i]->draw(_vm, (hitZoneIndex == i) ? color2 : color);  	}  	if (hitZoneIndex != -1) {  		snprintf(txtBuf, sizeof(txtBuf), "hitZone %d", hitZoneIndex);  		textPoint.x = 2;  		textPoint.y = 2; -		_vm->_font->textDraw(kKnownFontSmall, ds, txtBuf, textPoint, kITEColorBrightWhite, kITEColorBlack, kFontOutline); +		_vm->_font->textDraw(kKnownFontSmall, txtBuf, textPoint, kITEColorBrightWhite, kITEColorBlack, kFontOutline);  	}  }  #endif diff --git a/engines/saga/objectmap.h b/engines/saga/objectmap.h index 05207007db..8076180eaf 100644 --- a/engines/saga/objectmap.h +++ b/engines/saga/objectmap.h @@ -77,7 +77,7 @@ public:  	}  	bool getSpecialPoint(Point &specialPoint) const;  #ifdef SAGA_DEBUG -	void draw(SagaEngine *vm, Surface *ds, int color); +	void draw(SagaEngine *vm, int color);  #endif  	bool hitTest(const Point &testPoint); diff --git a/engines/saga/puzzle.cpp b/engines/saga/puzzle.cpp index e37892693c..ccc395f322 100644 --- a/engines/saga/puzzle.cpp +++ b/engines/saga/puzzle.cpp @@ -189,14 +189,13 @@ void Puzzle::showPieces(void) {  	ActorData *puzzle = _vm->_actor->getActor(_vm->_actor->actorIndexToId(ITE_ACTOR_PUZZLE));  	int frameNumber;  	SpriteList *spriteList; -	Surface *backBuffer = _vm->_gfx->getBackBuffer();  	_vm->_actor->getSpriteParams(puzzle, frameNumber, spriteList);  	for (int j = PUZZLE_PIECES - 1 ; j >= 0; j--) {  		int num = _piecePriority[j];  		if (_puzzlePiece != num) { -			_vm->_sprite->draw(backBuffer, _vm->getDisplayClip(), *spriteList, num, Point(_pieceInfo[num].curX, _pieceInfo[num].curY), 256); +			_vm->_sprite->draw(_vm->getDisplayClip(), *spriteList, num, Point(_pieceInfo[num].curX, _pieceInfo[num].curY), 256);  		}  	}  } @@ -207,7 +206,7 @@ void Puzzle::drawCurrentPiece() {  	SpriteList *spriteList;  	_vm->_actor->getSpriteParams(puzzle, frameNumber, spriteList); -	_vm->_sprite->draw(_vm->_gfx->getBackBuffer(), _vm->_scene->getSceneClip(), *spriteList, _puzzlePiece, +	_vm->_sprite->draw(_vm->_scene->getSceneClip(), *spriteList, _puzzlePiece,  			   Point(_pieceInfo[_puzzlePiece].curX, _pieceInfo[_puzzlePiece].curY), 256);  } diff --git a/engines/saga/render.cpp b/engines/saga/render.cpp index 623a425f75..f0867eb3eb 100644 --- a/engines/saga/render.cpp +++ b/engines/saga/render.cpp @@ -155,7 +155,7 @@ void Render::drawScene() {  	}  	// Draw queued text strings -	_vm->_scene->drawTextList(backBufferSurface); +	_vm->_scene->drawTextList();  	// Handle user input  	_vm->processInput(); @@ -178,7 +178,7 @@ void Render::drawScene() {  		textPoint.x = (backBufferSurface->w - _vm->_font->getStringWidth(kKnownFontPause, pauseString, 0, kFontOutline)) / 2;  		textPoint.y = 90; -		_vm->_font->textDraw(kKnownFontPause, backBufferSurface, pauseString, textPoint,  +		_vm->_font->textDraw(kKnownFontPause, pauseString, textPoint,   							_vm->KnownColor2ColorId(kKnownColorBrightWhite), _vm->KnownColor2ColorId(kKnownColorBlack), kFontOutline);  	} @@ -189,7 +189,7 @@ void Render::drawScene() {  	// Display text formatting test, if applicable  	if (_flags & RF_TEXT_TEST) {  		Rect rect(mousePoint.x, mousePoint.y, mousePoint.x + 100, mousePoint.y + 50); -		_vm->_font->textDrawRect(kKnownFontMedium, backBufferSurface, test_txt, rect, +		_vm->_font->textDrawRect(kKnownFontMedium, test_txt, rect,  				kITEColorBrightWhite, kITEColorBlack, (FontEffectFlags)(kFontOutline | kFontCentered));  	} diff --git a/engines/saga/scene.cpp b/engines/saga/scene.cpp index 06c2bbe87d..dafacc5588 100644 --- a/engines/saga/scene.cpp +++ b/engines/saga/scene.cpp @@ -233,7 +233,7 @@ void Scene::getResourceTypes(SAGAResourceTypes *&types, int &typesCount) {  	}  } -void Scene::drawTextList(Surface *ds) { +void Scene::drawTextList() {  	TextListEntry *entry;  	for (TextList::iterator textIterator = _textList.begin(); textIterator != _textList.end(); ++textIterator) { @@ -241,9 +241,9 @@ void Scene::drawTextList(Surface *ds) {  		if (entry->display) {  			if (entry->useRect) { -				_vm->_font->textDrawRect(entry->font, ds, entry->text, entry->rect, _vm->KnownColor2ColorId(entry->knownColor), _vm->KnownColor2ColorId(entry->effectKnownColor), entry->flags); +				_vm->_font->textDrawRect(entry->font, entry->text, entry->rect, _vm->KnownColor2ColorId(entry->knownColor), _vm->KnownColor2ColorId(entry->effectKnownColor), entry->flags);  			} else { -				_vm->_font->textDraw(entry->font, ds, entry->text, entry->point, _vm->KnownColor2ColorId(entry->knownColor), _vm->KnownColor2ColorId(entry->effectKnownColor), entry->flags); +				_vm->_font->textDraw(entry->font, entry->text, entry->point, _vm->KnownColor2ColorId(entry->knownColor), _vm->KnownColor2ColorId(entry->effectKnownColor), entry->flags);  			}  		}  	} @@ -455,7 +455,6 @@ void Scene::changeScene(int16 sceneNumber, int actorsEntrance, SceneTransitionTy  	if (_vm->getFeatures() & GF_SCENE_SUBSTITUTES) {  		for (int i = 0; i < ARRAYSIZE(sceneSubstitutes); i++) {  			if (sceneSubstitutes[i].sceneId == sceneNumber) { -				Surface *backBuffer = _vm->_gfx->getBackBuffer();  				Surface bbmBuffer;  				byte *pal, *colors;  				Common::File file; @@ -469,7 +468,7 @@ void Scene::changeScene(int16 sceneNumber, int actorsEntrance, SceneTransitionTy  					colors = pal;  					rect.setWidth(bbmBuffer.w);  					rect.setHeight(bbmBuffer.h); -					backBuffer->blit(rect, (const byte*)bbmBuffer.pixels); +					_vm->_gfx->getBackBuffer()->blit(rect, (const byte*)bbmBuffer.pixels);  					for (int j = 0; j < PAL_ENTRIES; j++) {  						cPal[j].red = *pal++;  						cPal[j].green = *pal++; @@ -481,9 +480,9 @@ void Scene::changeScene(int16 sceneNumber, int actorsEntrance, SceneTransitionTy  				}  				_vm->_interface->setStatusText("Click or Press Return to continue. Press Q to quit.", 96); -				_vm->_font->textDrawRect(kKnownFontMedium, backBuffer, sceneSubstitutes[i].title, +				_vm->_font->textDrawRect(kKnownFontMedium, sceneSubstitutes[i].title,  					 Common::Rect(0, 7, _vm->getDisplayWidth(), 27), _vm->KnownColor2ColorId(kKnownColorBrightWhite), _vm->KnownColor2ColorId(kKnownColorBlack), kFontOutline); -				_vm->_font->textDrawRect(kKnownFontMedium, backBuffer, sceneSubstitutes[i].message, +				_vm->_font->textDrawRect(kKnownFontMedium, sceneSubstitutes[i].message,  					 Common::Rect(24, getHeight() - 33, _vm->getDisplayWidth() - 11,  								  getHeight()), _vm->KnownColor2ColorId(kKnownColorBrightWhite), _vm->KnownColor2ColorId(kKnownColorBlack), kFontOutline);  				return; diff --git a/engines/saga/scene.h b/engines/saga/scene.h index 723792f050..a97b5d203a 100644 --- a/engines/saga/scene.h +++ b/engines/saga/scene.h @@ -345,7 +345,7 @@ class Scene {  			_vm->_framesEsc = 1;  	} -	void drawTextList(Surface *ds); +	void drawTextList();  	int getHeight(bool speech = false) const {  		if (_vm->getGameType() == GType_IHNM && _vm->_scene->currentChapterNumber() == 8 && !speech) diff --git a/engines/saga/sprite.cpp b/engines/saga/sprite.cpp index 2a4443916e..2723ce7d7f 100644 --- a/engines/saga/sprite.cpp +++ b/engines/saga/sprite.cpp @@ -211,15 +211,16 @@ void Sprite::getScaledSpriteBuffer(SpriteList &spriteList, int spriteNumber, int  	}  } -void Sprite::drawClip(Surface *ds, const Rect &clipRect, const Point &spritePointer, int width, int height, const byte *spriteBuffer) { +void Sprite::drawClip(const Rect &clipRect, const Point &spritePointer, int width, int height, const byte *spriteBuffer) {  	int clipWidth;  	int clipHeight;  	int i, j, jo, io;  	byte *bufRowPointer;  	const byte *srcRowPointer; +	Surface *backBuffer = _vm->_gfx->getBackBuffer(); -	bufRowPointer = (byte *)ds->pixels + ds->pitch * spritePointer.y; +	bufRowPointer = (byte *)backBuffer->pixels + backBuffer->pitch * spritePointer.y;  	srcRowPointer = spriteBuffer;  	clipWidth = CLIP(width, 0, clipRect.right - spritePointer.x); @@ -232,14 +233,14 @@ void Sprite::drawClip(Surface *ds, const Rect &clipRect, const Point &spritePoin  	}  	if (spritePointer.y < clipRect.top) {  		io = clipRect.top - spritePointer.y; -		bufRowPointer += ds->pitch * io; +		bufRowPointer += backBuffer->pitch * io;  		srcRowPointer += width * io;  	}  	for (i = io; i < clipHeight; i++) {  		for (j = jo; j < clipWidth; j++) { -			assert((byte *)ds->pixels <= (byte *)(bufRowPointer + j + spritePointer.x)); -			assert(((byte *)ds->pixels + (_vm->getDisplayWidth() * +			assert((byte *)backBuffer->pixels <= (byte *)(bufRowPointer + j + spritePointer.x)); +			assert(((byte *)backBuffer->pixels + (_vm->getDisplayWidth() *  				 _vm->getDisplayHeight())) > (byte *)(bufRowPointer + j + spritePointer.x));  			assert((const byte *)spriteBuffer <= (const byte *)(srcRowPointer + j));  			assert(((const byte *)spriteBuffer + (width * height)) > (const byte *)(srcRowPointer + j)); @@ -248,12 +249,12 @@ void Sprite::drawClip(Surface *ds, const Rect &clipRect, const Point &spritePoin  				*(bufRowPointer + j + spritePointer.x) = *(srcRowPointer + j);  			}  		} -		bufRowPointer += ds->pitch; +		bufRowPointer += backBuffer->pitch;  		srcRowPointer += width;  	}  } -void Sprite::draw(Surface *ds, const Rect &clipRect, SpriteList &spriteList, int32 spriteNumber, const Point &screenCoord, int scale) { +void Sprite::draw(const Rect &clipRect, SpriteList &spriteList, int32 spriteNumber, const Point &screenCoord, int scale) {  	const byte *spriteBuffer = NULL;  	int width  = 0;  	int height = 0; @@ -266,10 +267,10 @@ void Sprite::draw(Surface *ds, const Rect &clipRect, SpriteList &spriteList, int  	spritePointer.x = screenCoord.x + xAlign;  	spritePointer.y = screenCoord.y + yAlign; -	drawClip(ds, clipRect, spritePointer, width, height, spriteBuffer); +	drawClip(clipRect, spritePointer, width, height, spriteBuffer);  } -void Sprite::draw(Surface *ds, const Rect &clipRect, SpriteList &spriteList, int32 spriteNumber, const Rect &screenRect, int scale) { +void Sprite::draw(const Rect &clipRect, SpriteList &spriteList, int32 spriteNumber, const Rect &screenRect, int scale) {  	const byte *spriteBuffer = NULL;  	int width  = 0;  	int height = 0; @@ -290,7 +291,7 @@ void Sprite::draw(Surface *ds, const Rect &clipRect, SpriteList &spriteList, int  	}  	spritePointer.x = screenRect.left + xAlign + spw;  	spritePointer.y = screenRect.top + yAlign + sph; -	drawClip(ds, clipRect, spritePointer, width, height, spriteBuffer); +	drawClip(clipRect, spritePointer, width, height, spriteBuffer);  }  bool Sprite::hitTest(SpriteList &spriteList, int spriteNumber, const Point &screenCoord, int scale, const Point &testPoint) { @@ -320,7 +321,7 @@ bool Sprite::hitTest(SpriteList &spriteList, int spriteNumber, const Point &scre  	return *srcRowPointer != 0;  } -void Sprite::drawOccluded(Surface *ds, const Rect &clipRect, SpriteList &spriteList, int spriteNumber, const Point &screenCoord, int scale, int depth) { +void Sprite::drawOccluded(const Rect &clipRect, SpriteList &spriteList, int spriteNumber, const Point &screenCoord, int scale, int depth) {  	const byte *spriteBuffer = NULL;  	int x, y;  	byte *destRowPointer; @@ -332,6 +333,7 @@ void Sprite::drawOccluded(Surface *ds, const Rect &clipRect, SpriteList &spriteL  	int height = 0;  	int xAlign = 0;  	int yAlign = 0; +	Surface *backBuffer = _vm->_gfx->getBackBuffer();  	ClipData clipData; @@ -344,7 +346,7 @@ void Sprite::drawOccluded(Surface *ds, const Rect &clipRect, SpriteList &spriteL  	int maskZ;  	if (!_vm->_scene->isBGMaskPresent()) { -		draw(ds, clipRect, spriteList, spriteNumber, screenCoord, scale); +		draw(clipRect, spriteList, spriteNumber, screenCoord, scale);  		return;  	} @@ -369,7 +371,7 @@ void Sprite::drawOccluded(Surface *ds, const Rect &clipRect, SpriteList &spriteL  	// Finally, draw the occluded sprite  	sourceRowPointer = spriteBuffer + clipData.drawSource.x + (clipData.drawSource.y * width); -	destRowPointer = (byte *)ds->pixels + clipData.drawDest.x + (clipData.drawDest.y * ds->pitch); +	destRowPointer = (byte *)backBuffer->pixels + clipData.drawDest.x + (clipData.drawDest.y * backBuffer->pitch);  	maskRowPointer = maskBuffer + clipData.drawDest.x + (clipData.drawDest.y * maskWidth);  	for (y = 0; y < clipData.drawHeight; y++) { @@ -387,7 +389,7 @@ void Sprite::drawOccluded(Surface *ds, const Rect &clipRect, SpriteList &spriteL  			destPointer++;  			maskPointer++;  		} -		destRowPointer += ds->pitch; +		destRowPointer += backBuffer->pitch;  		maskRowPointer += maskWidth;  		sourceRowPointer += width;  	} diff --git a/engines/saga/sprite.h b/engines/saga/sprite.h index 112a4b0307..0c31044be2 100644 --- a/engines/saga/sprite.h +++ b/engines/saga/sprite.h @@ -74,15 +74,15 @@ public:  	~Sprite(void);  	// draw scaled sprite using background scene mask -	void drawOccluded(Surface *ds, const Rect &clipRect, SpriteList &spriteList, int spriteNumber, const Point &screenCoord, int scale, int depth); +	void drawOccluded(const Rect &clipRect, SpriteList &spriteList, int spriteNumber, const Point &screenCoord, int scale, int depth);  	// draw scaled sprite using background scene mask -	void draw(Surface *ds, const Rect &clipRect, SpriteList &spriteList, int32 spriteNumber, const Point &screenCoord, int scale); +	void draw(const Rect &clipRect, SpriteList &spriteList, int32 spriteNumber, const Point &screenCoord, int scale);  	// main function -	void drawClip(Surface *ds, const Rect &clipRect, const Point &spritePointer, int width, int height, const byte *spriteBuffer); +	void drawClip(const Rect &clipRect, const Point &spritePointer, int width, int height, const byte *spriteBuffer); -	void draw(Surface *ds, const Rect &clipRect, SpriteList &spriteList, int32 spriteNumber, const Rect &screenRect, int scale); +	void draw(const Rect &clipRect, SpriteList &spriteList, int32 spriteNumber, const Rect &screenRect, int scale);  	void loadList(int resourceId, SpriteList &spriteList); // load or append spriteList  	bool hitTest(SpriteList &spriteList, int spriteNumber, const Point &screenCoord, int scale, const Point &testPoint); | 
