diff options
| -rw-r--r-- | engines/mads/dialogs.cpp | 47 | ||||
| -rw-r--r-- | engines/mads/dialogs.h | 54 | ||||
| -rw-r--r-- | engines/mads/nebular/dialogs_nebular.cpp | 12 | 
3 files changed, 66 insertions, 47 deletions
| diff --git a/engines/mads/dialogs.cpp b/engines/mads/dialogs.cpp index 3ea47c4de6..b1a0b53b5a 100644 --- a/engines/mads/dialogs.cpp +++ b/engines/mads/dialogs.cpp @@ -31,6 +31,14 @@ namespace MADS {  Dialog::Dialog(MADSEngine *vm): _vm(vm), _savedSurface(nullptr),  		_position(Common::Point(-1, -1)), _width(0), _height(0) { +	TEXTDIALOG_CONTENT1 = 0XF8; +	TEXTDIALOG_CONTENT2 = 0XF9; +	TEXTDIALOG_EDGE = 0XFA; +	TEXTDIALOG_BACKGROUND = 0XFB; +	TEXTDIALOG_FC = 0XFC; +	TEXTDIALOG_FD = 0XFD; +	TEXTDIALOG_FE = 0XFE; +	TEXTDIALOG_BLACK = 0;  }  Dialog::~Dialog() { @@ -52,6 +60,10 @@ void Dialog::restore() {  		_savedSurface = nullptr;  		_vm->_screen.copyRectToScreen(getBounds()); + +		Common::copy(&_dialogPalette[0], &_dialogPalette[8 * 3], +			&_vm->_palette->_mainPalette[248 * 3]); +		_vm->_palette->setPalette(_vm->_palette->_mainPalette, 248, 8);  	}  } @@ -62,6 +74,8 @@ void Dialog::draw() {  	// Save the screen portion the dialog will overlap  	save(); +	setDialogPalette(); +  	// Draw the dialog  	// Fill entire content of dialog  	Common::Rect bounds = getBounds(); @@ -83,6 +97,20 @@ void Dialog::draw() {  		TEXTDIALOG_CONTENT1, TEXTDIALOG_CONTENT2);  } +void Dialog::setDialogPalette() { +	// Save the high end of the palette, and set up the entries for dialog display +	Common::copy(&_vm->_palette->_mainPalette[TEXTDIALOG_CONTENT1 * 3], +		&_vm->_palette->_mainPalette[TEXTDIALOG_CONTENT1 * 3 + 8 * 3], +		&_dialogPalette[0]); +	Palette::setGradient(_vm->_palette->_mainPalette, TEXTDIALOG_CONTENT1, 2, 0x90, 0x80); +	Palette::setGradient(_vm->_palette->_mainPalette, TEXTDIALOG_EDGE, 2, 0x9C, 0x70); +	Palette::setGradient(_vm->_palette->_mainPalette, TEXTDIALOG_FC, 2, 0x90, 0x80); +	Palette::setGradient(_vm->_palette->_mainPalette, TEXTDIALOG_FE, 1, 0xDC, 0xDC); + +	_vm->_palette->setPalette(_vm->_palette->_mainPalette + (TEXTDIALOG_CONTENT1 * 3), +		TEXTDIALOG_CONTENT1, 8); +} +  void Dialog::calculateBounds() {  } @@ -125,22 +153,9 @@ TextDialog::TextDialog(MADSEngine *vm, const Common::String &fontName,  	Common::fill(&_lineXp[0], &_lineXp[TEXT_DIALOG_MAX_LINES], 0);  	_askLineNum = -1;  	_askXp = 0; - -	// Save the high end of the palette, and set up the entries for dialog display -	Common::copy(&_vm->_palette->_mainPalette[TEXTDIALOG_CONTENT1 * 3], -		&_vm->_palette->_mainPalette[TEXTDIALOG_CONTENT1 * 3 + 8 * 3], -		&_cyclingPalette[0]); -	Palette::setGradient(_vm->_palette->_mainPalette, TEXTDIALOG_CONTENT1, 2, 0x90, 0x80); -	Palette::setGradient(_vm->_palette->_mainPalette, TEXTDIALOG_EDGE, 2, 0x9C, 0x70); -	Palette::setGradient(_vm->_palette->_mainPalette, TEXTDIALOG_FC, 2, 0x90, 0x80); -	Palette::setGradient(_vm->_palette->_mainPalette, TEXTDIALOG_FE, 1, 0xDC, 0xDC); - -	_vm->_palette->setPalette(_vm->_palette->_mainPalette + (TEXTDIALOG_CONTENT1 * 3), -		TEXTDIALOG_CONTENT1, 8);  }  TextDialog::~TextDialog() { -	restorePalette();  }  void TextDialog::addLine(const Common::String &line, bool underline) { @@ -326,12 +341,6 @@ void TextDialog::drawWithInput() {  	error("TODO: drawWithInput");  } -void TextDialog::restorePalette() { -	Common::copy(&_cyclingPalette[0], &_cyclingPalette[8 * 3], -		&_vm->_palette->_mainPalette[248 * 3]); -	_vm->_palette->setPalette(_vm->_palette->_mainPalette, 248, 8); -} -  void TextDialog::show() {  	// Draw the dialog  	draw(); diff --git a/engines/mads/dialogs.h b/engines/mads/dialogs.h index 078415bad9..6de6ea71c1 100644 --- a/engines/mads/dialogs.h +++ b/engines/mads/dialogs.h @@ -31,27 +31,24 @@  namespace MADS {  class Dialog { +private: +	void setDialogPalette();  protected:  	MADSEngine *_vm;  	MSurface *_savedSurface;  	Common::Point _position;  	int _width;  	int _height; - -	/** -	 * Save the section of the passed surface the dialog will cover. -	 */ -	virtual void save(); - -	/** -	 * Restore saved dialog surface -	 */ -	virtual void restore(); - -	/** -	 * Draws the content of a dialog with a gravelly alternating color. -	 */ -	void drawContent(const Common::Rect &r, int seed, byte color1, byte color2); +	byte _dialogPalette[8 * 3]; + +	int TEXTDIALOG_CONTENT1; +	int TEXTDIALOG_CONTENT2; +	int TEXTDIALOG_EDGE; +	int TEXTDIALOG_BACKGROUND; +	int TEXTDIALOG_FC; +	int TEXTDIALOG_FD; +	int TEXTDIALOG_FE; +	int TEXTDIALOG_BLACK;  protected:  	/**  	 * Draw the dialog @@ -62,6 +59,21 @@ protected:  	 * Calculate bounds for the dialog  	 */  	virtual void calculateBounds(); + +	/** +	* Save the section of the passed surface the dialog will cover. +	*/ +	virtual void save(); + +	/** +	* Restore saved dialog surface +	*/ +	virtual void restore(); + +	/** +	* Draws the content of a dialog with a gravelly alternating color. +	*/ +	void drawContent(const Common::Rect &r, int seed, byte color1, byte color2);  public:  	/**  	 * Constructor @@ -82,17 +94,6 @@ public:  	}  }; -enum { -	TEXTDIALOG_CONTENT1 = 0XF8, -	TEXTDIALOG_CONTENT2 = 0XF9, -	TEXTDIALOG_EDGE = 0XFA, -	TEXTDIALOG_BACKGROUND = 0XFB, -	TEXTDIALOG_FC = 0XFC, -	TEXTDIALOG_FD = 0XFD, -	TEXTDIALOG_FE = 0XFE, -	TEXTDIALOG_BLACK = 0 -}; -  #define TEXT_DIALOG_MAX_LINES 20  class TextDialog: protected Dialog { @@ -117,7 +118,6 @@ protected:  	int _askLineNum;  	Common::String _lines[TEXT_DIALOG_MAX_LINES];  	int _lineXp[TEXT_DIALOG_MAX_LINES]; -	byte _cyclingPalette[8 * 3];  	/**  	 * Calculate the bounds for the dialog diff --git a/engines/mads/nebular/dialogs_nebular.cpp b/engines/mads/nebular/dialogs_nebular.cpp index 63b0edf2f1..df423f92a8 100644 --- a/engines/mads/nebular/dialogs_nebular.cpp +++ b/engines/mads/nebular/dialogs_nebular.cpp @@ -416,13 +416,23 @@ void PictureDialog::save() {  	SpriteAsset *asset = new SpriteAsset(_vm, setName, 0x8000);  	palette.setFullPalette(palette._mainPalette); -	// Draw the inventory picture +	// Get the inventory frame, and adjust the dialog position to allow for it  	MSprite *frame = asset->getFrame(0);  	_position.y = frame->h + 12; +	// Draw the inventory picture  	frame->copyTo(&_vm->_screen, Common::Point(160 - frame->w / 2, 6),  		frame->getTransparencyIndex());  	_vm->_screen.copyRectToScreen(_vm->_screen.getBounds()); + +	// Adjust the dialog colours to use +	TEXTDIALOG_CONTENT1 -= 10; +	TEXTDIALOG_CONTENT2 -= 10; +	TEXTDIALOG_EDGE -= 10; +	TEXTDIALOG_BACKGROUND -= 10; +	TEXTDIALOG_FC -= 10; +	TEXTDIALOG_FD -= 10; +	TEXTDIALOG_FE -= 10;  }  void PictureDialog::restore() { | 
