[Scummvm-cvs-logs] scummvm master -> 7828f8ffbdc691b7a74d9522ceec3364951405d4

bluegr bluegr at gmail.com
Sat Jun 28 20:58:44 CEST 2014


This automated email contains information about 2 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
b356f7f923 MADS: Started implementing the Rex in-game and option menus
7828f8ffbd MADS: Remove dead code


Commit: b356f7f923c265697cb5147b13e623b66ba14421
    https://github.com/scummvm/scummvm/commit/b356f7f923c265697cb5147b13e623b66ba14421
Author: Filippos Karapetis (bluegr at gmail.com)
Date: 2014-06-28T21:57:46+03:00

Commit Message:
MADS: Started implementing the Rex in-game and option menus

Changed paths:
    engines/mads/nebular/dialogs_nebular.cpp
    engines/mads/nebular/dialogs_nebular.h



diff --git a/engines/mads/nebular/dialogs_nebular.cpp b/engines/mads/nebular/dialogs_nebular.cpp
index 6f75c21..a1459d5 100644
--- a/engines/mads/nebular/dialogs_nebular.cpp
+++ b/engines/mads/nebular/dialogs_nebular.cpp
@@ -23,6 +23,10 @@
 #include "common/scummsys.h"
 #include "common/config-manager.h"
 #include "common/util.h"
+#include "common/translation.h"
+
+#include "gui/saveload.h"
+
 #include "mads/mads.h"
 #include "mads/screen.h"
 #include "mads/msurface.h"
@@ -266,20 +270,73 @@ bool DialogsNebular::commandCheck(const char *idStr, Common::String &valStr,
 
 void DialogsNebular::showDialog() {
 	switch (_pendingDialog) {
-	case DIALOG_GAME_MENU:
-		//GameMenuDialog::show();
-		break;
 	case DIALOG_DIFFICULTY: {
 		DifficultyDialog *dlg = new DifficultyDialog(_vm);
 		dlg->show();
 		delete dlg;
 		break;
 	}
+	case DIALOG_GAME_MENU: {
+		GameMenuDialog *dlg = new GameMenuDialog(_vm);
+		dlg->show();
+		delete dlg;
+		break;
+	}
+	case DIALOG_SAVE: {
+		showScummVMSaveDialog();
+		break;
+	}
+	case DIALOG_RESTORE: {
+		showScummVMRestoreDialog();
+		break;
+	}
+	case DIALOG_OPTIONS: {
+		OptionsDialog *dlg = new OptionsDialog(_vm);
+		dlg->show();
+		delete dlg;
+		break;
+	}
 	default:
 		break;
 	}
 }
 
+void DialogsNebular::showScummVMSaveDialog() {
+	Nebular::GameNebular &game = *(Nebular::GameNebular *)_vm->_game;
+	Scene *scene = &(game._scene);
+	GUI::SaveLoadChooser *dialog = new GUI::SaveLoadChooser(_("Save game:"), _("Save"), true);
+
+	int slot = dialog->runModalWithCurrentTarget();
+	if (slot >= 0) {
+		Common::String desc = dialog->getResultString();
+
+		if (desc.empty()) {
+			// create our own description for the saved game, the user didn't enter it
+			desc = dialog->createDefaultSaveDescription(slot);
+		}
+
+		scene->_spriteSlots.reset();
+		_vm->_screen._offset.y = 0;
+		scene->loadScene(scene->_currentSceneId, game._aaName, true);
+		scene->_userInterface.noInventoryAnim();
+		game._scene.drawElements(kTransitionFadeIn, false);
+
+		game.saveGame(slot, desc);
+	}
+}
+
+void DialogsNebular::showScummVMRestoreDialog() {
+	Nebular::GameNebular &game = *(Nebular::GameNebular *)_vm->_game;
+	GUI::SaveLoadChooser *dialog = new GUI::SaveLoadChooser(_("Restore game:"), _("Restore"), false);
+
+	int slot = dialog->runModalWithCurrentTarget();
+	if (slot >= 0) {
+		game._loadGameSlot = slot;
+		game._scene._currentSceneId = -1;
+		game._currentSectionNumber = -1;
+	}
+}
+
 /*------------------------------------------------------------------------*/
 
 CopyProtectionDialog::CopyProtectionDialog(MADSEngine *vm, bool priorAnswerWrong) :
@@ -514,7 +571,7 @@ ScreenDialog::ScreenDialog(MADSEngine *vm) : _vm(vm) {
 	int currentSceneId = scene._currentSceneId;
 	int priorSceneId = scene._priorSceneId;
 
-	if (_vm->_dialogs->_pendingDialog == DIALOG_DIFFICULTY) {
+	if (_vm->_dialogs->_pendingDialog) {
 		palFlag = true;
 	} else {
 		_vm->_palette->initPalette();
@@ -593,12 +650,10 @@ void ScreenDialog::setClickableLines() {
 
 void ScreenDialog::addQuote(int id1, int id2, DialogTextAlign align,
 		const Common::Point &pt, Font *font) {
-	Common::String msg = _vm->_game->getQuote(id1);
+	Common::String msg = _vm->_game->getQuote(id1).c_str();	// c_str() because we need a copy
 
-	if (id2 > 0) {
-		msg += " ";
+	if (id2 > 0)
 		msg += _vm->_game->getQuote(id2);
-	}
 
 	addLine(msg, align, pt, font);
 }
@@ -646,6 +701,10 @@ void ScreenDialog::addLine(const Common::String &msg, DialogTextAlign align,
 
 	int xOffset;
 	switch (align) {
+	case ALIGN_NONE:
+		// No adjustment
+		break;
+
 	case ALIGN_CENTER:
 		xOffset = (MADS_SCREEN_WIDTH / 2) - font->getWidth(msg, -1) / 2;
 		line->_pos.x += xOffset;
@@ -658,6 +717,10 @@ void ScreenDialog::addLine(const Common::String &msg, DialogTextAlign align,
 			xOffset = (MADS_SCREEN_WIDTH / 2) - font->getWidth(
 				Common::String(msgP, ch), line->_widthAdjust);
 			line->_pos.x += xOffset;
+
+			Common::String newMsg = msg.c_str();
+			newMsg.deleteChar(ch - msgP);
+			line->_msg = newMsg;
 		}
 		break;
 	}
@@ -771,7 +834,7 @@ void ScreenDialog::handleEvents() {
 	}
 
 	int line = -1;
-	if (objIndex > 0 || events._mouseButtons) {
+	if (objIndex > 0 /*|| events._mouseButtons*/) {
 		line = screenObjects[objIndex]._descId;
 		if (dialogs._pendingDialog == DIALOG_SAVE || dialogs._pendingDialog == DIALOG_RESTORE) {
 			if (line > 7 && line <= 14) {
@@ -887,14 +950,153 @@ void DifficultyDialog::show() {
 
 GameMenuDialog::GameMenuDialog(MADSEngine *vm) : ScreenDialog(vm) {
 	setFrame(1, 2);
+	setLines();
+	setClickableLines();
 }
 
-void GameMenuDialog::addLines() {
-	initVars();
+void GameMenuDialog::setLines() {
 	Font *font = _vm->_font->getFont(FONT_CONVERSATION);
-	int top = 78 - (font->getHeight() + 2) * 12;
-	addQuote(10, 0, ALIGN_CENTER, Common::Point(0, top),  font);
-	// TODO
+
+	int yp = 64 - ((font->getHeight() + 1) * 4 + 6) / 2;
+
+	addQuote(10, 0, ALIGN_CENTER, Common::Point(0, yp), font);
+	yp += 6;
+
+	for (int id = 11; id <= 15; ++id) {
+		yp += font->getHeight();
+		addQuote(id, 0, ALIGN_CENTER, Common::Point(0, yp));
+	}
+}
+
+void GameMenuDialog::show() {
+	ScreenDialog::show();
+
+	switch (_selectedLine) {
+	case 1:
+		_vm->_dialogs->_pendingDialog = DIALOG_SAVE;
+		_vm->_dialogs->showDialog();
+		break;
+	case 2:
+		_vm->_dialogs->_pendingDialog = DIALOG_RESTORE;
+		_vm->_dialogs->showDialog();
+		break;
+	case 3:
+		_vm->_dialogs->_pendingDialog = DIALOG_OPTIONS;
+		_vm->_dialogs->showDialog();
+		break;
+	case 4:
+		// Resume game
+		break;
+	case 5:
+	default:
+		_vm->quitGame();
+	}
+}
+
+/*------------------------------------------------------------------------*/
+
+OptionsDialog::OptionsDialog(MADSEngine *vm) : ScreenDialog(vm) {
+	setFrame(2, 2);
+	setLines();
+	setClickableLines();
+}
+
+int OptionsDialog::getOptionQuote(int option) {
+	Nebular::GameNebular &game = *(Nebular::GameNebular *)_vm->_game;
+
+	// TODO: Hook the rest of the options to the current config
+	switch (option) {
+	case 17:	// Music
+		return 24;	// 24: ON, 25: OFF
+	case 18:	// Sound
+		return 26;	// 26: ON, 27: OFF
+	case 19:	// Interface
+		return !_vm->_easyMouse ? 28 : 29;	// 28: Standard, 29: Easy
+	case 20:	// Inventory
+		return _vm->_invObjectsAnimated ? 30 : 31;	// 30: Spinning, 31: Still
+	case 21:	// Text window
+		return !_vm->_textWindowStill ? 32 : 33;	// 32: Animated, 33: Still
+	case 22:	// Screen fade
+		return 34 + _vm->_screenFade;	// 34: Smooth, 35: Medium, 36: Fast
+	case 23:	// Storyline
+		return (game._storyMode == STORYMODE_NAUGHTY) ? 37 : 38;	// 37: Naughty, 38: Nice
+	default:
+		error("getOptionQuote: Unknown option");
+	}
+}
+
+void OptionsDialog::setLines() {
+	Font *font = _vm->_font->getFont(FONT_CONVERSATION);
+
+	int yp = 40 - ((font->getHeight() + 1) * 4 + 6) / 2;
+
+	addQuote(16, 0, ALIGN_CENTER, Common::Point(0, yp), font);
+	yp += 6;
+
+	for (int id = 17; id <= 23; ++id) {
+		yp += font->getHeight();
+		addQuote(id, getOptionQuote(id), ALIGN_AT_CENTER, Common::Point(0, yp));
+	}
+
+	yp += 28;
+	addQuote(1, 0, ALIGN_NONE, Common::Point(90, yp));
+	addQuote(2, 0, ALIGN_NONE, Common::Point(190, yp));
+}
+
+void OptionsDialog::show() {
+	Nebular::GameNebular &game = *(Nebular::GameNebular *)_vm->_game;
+	do {
+		_selectedLine = 0;
+		ScreenDialog::show();
+
+		switch (_selectedLine) {
+		case 1:	// Music
+			warning("STUB: Music toggle");
+			break;
+		case 2:	// Sound
+			warning("STUB: Sound toggle");
+			break;
+		case 3:	// Interface
+			_vm->_easyMouse = !_vm->_easyMouse;
+			break;
+		case 4:	// Inventory
+			_vm->_invObjectsAnimated = !_vm->_invObjectsAnimated;
+			break;
+		case 5:	// Text window
+			_vm->_textWindowStill = !_vm->_textWindowStill;
+			break;
+		case 6:	// Screen fade
+			if (_vm->_screenFade == SCREEN_FADE_FAST)
+				_vm->_screenFade = SCREEN_FADE_MEDIUM;
+			else if (_vm->_screenFade == SCREEN_FADE_MEDIUM)
+				_vm->_screenFade = SCREEN_FADE_SMOOTH;
+			else
+				_vm->_screenFade = SCREEN_FADE_FAST;
+			break;
+		case 7:	// Storyline
+			game._storyMode = (game._storyMode == STORYMODE_NAUGHTY) ? STORYMODE_NICE : STORYMODE_NAUGHTY;
+			break;
+		default:
+			break;
+		}
+
+		// Reload menu
+		_lineIndex = -1;
+		clearLines();
+		setLines();
+		setClickableLines();
+	} while (_selectedLine <= 7);
+
+	switch (_selectedLine) {
+	case 8:	// Done
+		// TODO: Copy from temporary config
+		break;
+	case 9:	// Cancel
+		// TODO: Ignore all changes to temporary config
+		break;
+	default:
+		break;
+	}
 }
 
 } // End of namespace Nebular
diff --git a/engines/mads/nebular/dialogs_nebular.h b/engines/mads/nebular/dialogs_nebular.h
index 39d0a31..504359b 100644
--- a/engines/mads/nebular/dialogs_nebular.h
+++ b/engines/mads/nebular/dialogs_nebular.h
@@ -46,6 +46,10 @@ private:
 	bool textNoun(Common::String &dest, int nounId, const Common::String &source);
 
 	bool commandCheck(const char *idStr, Common::String &valStr, const Common::String &command);
+
+	void showScummVMSaveDialog();
+	void showScummVMRestoreDialog();
+
 public:
 	virtual void showDialog();
 
@@ -99,7 +103,7 @@ public:
 	virtual ~PictureDialog();
 };
 
-enum DialogTextAlign { ALIGN_CENTER = -1, ALIGN_AT_CENTER = -2, ALIGN_RIGHT = -3 };
+enum DialogTextAlign { ALIGN_NONE = 0, ALIGN_CENTER = -1, ALIGN_AT_CENTER = -2, ALIGN_RIGHT = -3 };
 
 enum DialogState { DLGSTATE_UNSELECTED = 0, DLGSTATE_SELECTED = 1, DLGSTATE_FOCUSED = 2 };
 
@@ -193,7 +197,7 @@ public:
 class DifficultyDialog : public ScreenDialog {
 private:
 	/**
-	 * Set the lines for the dialog 
+	 * Set the lines for the dialog
 	 */
 	void setLines();
 public:
@@ -208,12 +212,36 @@ public:
 class GameMenuDialog : public ScreenDialog {
 private:
 	/**
-	 * Add the lines for the Game Menu dialog
+	 * Set the lines for the dialog
 	 */
-	void addLines();
+	void setLines();
 public:
 	GameMenuDialog(MADSEngine *vm);
 
+	/**
+	* Show the dialog
+	*/
+	virtual void show();
+};
+
+class OptionsDialog : public ScreenDialog {
+private:
+	/**
+	 * Set the lines for the dialog
+	 */
+	void setLines();
+
+	/**
+	 * Gets the quote to be shown for an option
+	 */
+	int getOptionQuote(int option);
+public:
+	OptionsDialog(MADSEngine *vm);
+
+	/**
+	* Show the dialog
+	*/
+	virtual void show();
 };
 
 } // End of namespace Nebular


Commit: 7828f8ffbdc691b7a74d9522ceec3364951405d4
    https://github.com/scummvm/scummvm/commit/7828f8ffbdc691b7a74d9522ceec3364951405d4
Author: Filippos Karapetis (bluegr at gmail.com)
Date: 2014-06-28T21:57:46+03:00

Commit Message:
MADS: Remove dead code

Changed paths:
    engines/mads/nebular/nebular_scenes8.cpp



diff --git a/engines/mads/nebular/nebular_scenes8.cpp b/engines/mads/nebular/nebular_scenes8.cpp
index 6039135..14f3675 100644
--- a/engines/mads/nebular/nebular_scenes8.cpp
+++ b/engines/mads/nebular/nebular_scenes8.cpp
@@ -1121,8 +1121,6 @@ void Scene804::actions() {
 			} else {
 				_action._inProgress = false;
 
-				//saveGame("REX000.SAV");
-
 				_vm->_dialogs->show(80424);
 				_pullThrottleReally = true;
 				_scene->_kernelMessages.add(Common::Point(78, 75), 0x1110, 0, 0,






More information about the Scummvm-git-logs mailing list