[Scummvm-cvs-logs] CVS: scummvm/saga events.cpp,1.43,1.44 events.h,1.16,1.17 input.cpp,1.31,1.32 interface.cpp,1.51,1.52 interface.h,1.21,1.22 render.cpp,1.46,1.47 scene.cpp,1.75,1.76 sfuncs.cpp,1.71,1.72

Eugene Sandulenko sev at users.sourceforge.net
Thu Jan 6 16:58:14 CET 2005


Update of /cvsroot/scummvm/scummvm/saga
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv7702

Modified Files:
	events.cpp events.h input.cpp interface.cpp interface.h 
	render.cpp scene.cpp sfuncs.cpp 
Log Message:
o Fix for popped up actors at initial scene fade out
o Stub for new Wyrmkeep demos with substituted scenes
o Converted some script func parameters to apropriate types
o More panel fixes


Index: events.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/saga/events.cpp,v
retrieving revision 1.43
retrieving revision 1.44
diff -u -d -r1.43 -r1.44
--- events.cpp	6 Jan 2005 16:07:45 -0000	1.43
+++ events.cpp	7 Jan 2005 00:57:43 -0000	1.44
@@ -384,6 +384,9 @@
 			_vm->_interface->setStatusText("");
 			_vm->_interface->drawStatusBar(_vm->_gfx->getBackBuffer());
 			break;
+		case EVENT_RESTORE_MODE:
+			_vm->_interface->restoreMode();
+			break;
 		default:
 			break;
 		}

Index: events.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/saga/events.h,v
retrieving revision 1.16
retrieving revision 1.17
diff -u -d -r1.16 -r1.17
--- events.h	6 Jan 2005 16:07:45 -0000	1.16
+++ events.h	7 Jan 2005 00:57:43 -0000	1.17
@@ -86,6 +86,7 @@
 	EVENT_DEACTIVATE = 2,
 	EVENT_SET_STATUS = 3,
 	EVENT_CLEAR_STATUS = 4,
+	EVENT_RESTORE_MODE = 5,
 	// ACTOR events
 	EVENT_MOVE = 1,
 	// SCRIPT events

Index: input.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/saga/input.cpp,v
retrieving revision 1.31
retrieving revision 1.32
diff -u -d -r1.31 -r1.32
--- input.cpp	6 Jan 2005 19:15:01 -0000	1.31
+++ input.cpp	7 Jan 2005 00:57:43 -0000	1.32
@@ -87,7 +87,7 @@
 				switch (_interface->getMode()) {
 				case kPanelNull:
 					if (_scene->isInDemo())
-					_scene->skipScene();
+						_scene->skipScene();
 					else
 						_actor->abortAllSpeeches();
 					break;

Index: interface.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/saga/interface.cpp,v
retrieving revision 1.51
retrieving revision 1.52
diff -u -d -r1.51 -r1.52
--- interface.cpp	6 Jan 2005 14:49:47 -0000	1.51
+++ interface.cpp	7 Jan 2005 00:57:43 -0000	1.52
@@ -237,8 +237,9 @@
 
 	_activeVerb = I_VERB_WALKTO;
 
-	_active = 0;
-	_panelMode = _savedMode = _lockedMode = kPanelNull;
+	_active = false;
+	_panelMode = _lockedMode = kPanelNull;
+	_savedMode = -1;
 	_inMainMode = false;
 	*_statusText = 0;
 
@@ -259,30 +260,65 @@
 }
 
 int Interface::activate() {
-	_active = 1;
-	draw();
+	if (!_active) {
+		_active = true;
+		_vm->_script->_skipSpeeches = false;
+		_vm->_gfx->showCursor(true);
+		unlockMode();
+		if (_panelMode == kPanelMain)
+			;// show save reminder
+		draw();
+	}
 
 	return SUCCESS;
 }
 
 int Interface::deactivate() {
-	_active = 0;
+	if (_active) {
+		_active = false;
+		_vm->_gfx->showCursor(false);
+		lockMode();
+		setMode(kPanelNull);
+	}
 
 	return SUCCESS;
 }
 
-int Interface::setMode(int mode) {
-	// TODO: Is this where we should hide/show the mouse cursor?
+void Interface::rememberMode() {
+	assert (_savedMode == -1);
 
-	_panelMode = mode;
+	_savedMode = _panelMode; 
+}
+
+void Interface::restoreMode() {
+	assert (_savedMode != -1);
+
+	_panelMode = _savedMode;
+	_savedMode = -1;
+
+	draw();
+}
+
+int Interface::setMode(int mode, bool force) {
+	// TODO: Is this where we should hide/show the mouse cursor?
+	int newmode = mode;
 
 	if (_panelMode == kPanelConverse)
 		_inMainMode = false;
 	else if (_panelMode == kPanelInventory) {
 		_inMainMode = true;
-		_panelMode = kPanelMain;
+		newmode = kPanelMain;
 	}
 
+	// This lets us to prevents actors to pop up during initial
+	// scene fade in.
+	if (_savedMode != -1 && !force) {
+		_savedMode = newmode;
+		debug(0, "Saved mode: %d. my mode is %d", newmode, _panelMode);
+	}
+	else
+		_panelMode = newmode;
+
 	draw();
 
 	return SUCCESS;

Index: interface.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/saga/interface.h,v
retrieving revision 1.21
retrieving revision 1.22
diff -u -d -r1.21 -r1.22
--- interface.h	6 Jan 2005 16:07:45 -0000	1.21
+++ interface.h	7 Jan 2005 00:57:43 -0000	1.22
@@ -113,7 +113,8 @@
 	kPanelProtect,
 	kPanelPlacard,
 	kPanelMap,
-	kPanelInventory
+	kPanelInventory,
+	kPanelFade
 };
 
 enum BUTTON_FLAGS {
@@ -208,10 +209,10 @@
 	int registerLang();
 	int activate();
 	int deactivate();
-	int setMode(int mode);
+	int setMode(int mode, bool force = false);
 	int getMode(void) { return _panelMode; }
-	void rememberMode() { _savedMode = _panelMode; }
-	void restoreMode() { _panelMode = _savedMode; }
+	void rememberMode();
+	void restoreMode();
 	void lockMode() { _lockedMode = _panelMode; }
 	void unlockMode() { _panelMode = _lockedMode; }
 	bool isInMainMode() { return _inMainMode; }
@@ -239,7 +240,7 @@
 	SagaEngine *_vm;
 
 	bool _initialized;
-	int _active;
+	bool _active;
 	RSCFILE_CONTEXT *_interfaceContext;
 	INTERFACE_DESC _iDesc;
 	int _panelMode;

Index: render.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/saga/render.cpp,v
retrieving revision 1.46
retrieving revision 1.47
diff -u -d -r1.46 -r1.47
--- render.cpp	6 Jan 2005 19:15:01 -0000	1.46
+++ render.cpp	7 Jan 2005 00:57:43 -0000	1.47
@@ -126,18 +126,20 @@
 		// Display scene background
 		_vm->_scene->draw(backbuf_surface);
 
-		// Display scene maps, if applicable
-		if (getFlags() & RF_OBJECTMAP_TEST) {
-			if (_vm->_scene->_objectMap)
-				_vm->_scene->_objectMap->draw(backbuf_surface, mouse_pt, _vm->_gfx->getWhite(), _vm->_gfx->getBlack());
-			if (_vm->_scene->_actionMap)
-				_vm->_scene->_actionMap->draw(backbuf_surface, _vm->_gfx->matchColor(RGB_RED));
-		}
+		if (_vm->_interface->getMode() != kPanelFade) {
+			// Display scene maps, if applicable
+			if (getFlags() & RF_OBJECTMAP_TEST) {
+				if (_vm->_scene->_objectMap)
+					_vm->_scene->_objectMap->draw(backbuf_surface, mouse_pt, _vm->_gfx->getWhite(), _vm->_gfx->getBlack());
+				if (_vm->_scene->_actionMap)
+					_vm->_scene->_actionMap->draw(backbuf_surface, _vm->_gfx->matchColor(RGB_RED));
+			}
 
-		// Draw queued actors
-		_vm->_actor->drawActors();
-		if (getFlags() & RF_ACTOR_PATH_TEST) {
-			_vm->_actor->drawPathTest();
+			// Draw queued actors
+			_vm->_actor->drawActors();
+			if (getFlags() & RF_ACTOR_PATH_TEST) {
+				_vm->_actor->drawPathTest();
+			}
 		}
 	}
 

Index: scene.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/saga/scene.cpp,v
retrieving revision 1.75
retrieving revision 1.76
diff -u -d -r1.75 -r1.76
--- scene.cpp	6 Jan 2005 16:07:45 -0000	1.75
+++ scene.cpp	7 Jan 2005 00:57:43 -0000	1.76
@@ -611,6 +611,9 @@
 		EVENT *q_event;
 		static PALENTRY current_pal[PAL_ENTRIES];
 
+		_vm->_interface->rememberMode();
+		_vm->_interface->setMode(kPanelFade, true);
+
 		// Fade to black out
 		_vm->_gfx->getCurrentPal(current_pal);
 		event.type = IMMEDIATE_EVENT;
@@ -640,6 +643,14 @@
 		event.duration = 0;
 		q_event = _vm->_events->chain(q_event, &event);
 
+		// Restore interface mode
+		event.type = IMMEDIATE_EVENT;
+		event.code = INTERFACE_EVENT;
+		event.op = EVENT_RESTORE_MODE;
+		event.time = 0;
+		event.duration = 0;
+		q_event = _vm->_events->chain(q_event, &event);
+
 		// Start the scene pre script, but stay with black palette
 		if (_desc.startScriptNum > 0) {
 			event.type = ONESHOT_EVENT;
@@ -652,7 +663,7 @@
 			event.param4 = 0;		// With Object - TODO: should be 'entrance'
 			event.param5 = 0;		// Actor
 
-			_vm->_events->chain(q_event, &event);
+			q_event = _vm->_events->chain(q_event, &event);
 		}
 
 		// Fade in from black to the scene background palette
@@ -1046,7 +1057,10 @@
 	EVENT event;
 	EVENT *q_event;
 
-	_inGame = true;
+	if (!_inGame) {
+		_inGame = true;
+		_vm->_interface->setMode(kPanelInventory);
+	}
 
 	switch (param) {
 	case SCENE_BEGIN:

Index: sfuncs.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/saga/sfuncs.cpp,v
retrieving revision 1.71
retrieving revision 1.72
diff -u -d -r1.71 -r1.72
--- sfuncs.cpp	6 Jan 2005 19:15:01 -0000	1.71
+++ sfuncs.cpp	7 Jan 2005 00:57:43 -0000	1.72
@@ -366,19 +366,77 @@
 	return SUCCESS;
 }
 
+static struct SceneSubstitutes {
+    int sceneId;
+    const char *message;
+    const char *name;
+    const char *image;
+} sceneSubstitutes[] = {
+    { 
+		7,
+		"Tycho says he knows much about the northern lands. Can Rif convince "
+		"the Dog to share this knowledge?",
+		"The Home of Tycho Northpaw",
+		"tycho.bbm"
+	},
+
+    {
+		27,
+		"The scene of the crime may hold many clues, but will the servants of "
+		"the Sanctuary trust Rif?",
+		"The Sanctuary of the Orb",
+		"sanctuar.bbm"
+	},
+
+    {
+		5,
+		"The Rats hold many secrets that could guide Rif on his quest -- assuming "
+		"he can get past the doorkeeper.",
+		"The Rat Complex",
+		"ratdoor.bbm"
+	},
+
+    {
+		2,
+		"The Ferrets enjoy making things and have the materials to do so. How can "
+		"that help Rif?",
+		"The Ferret Village",
+		"ferrets.bbm"
+	},
+
+    {
+		67,
+		"What aid can the noble King of the Elks provide to Rif and his companions?",
+		"The Realm of the Forest King",
+		"elkenter.bbm"
+	},
+
+    {
+		3,
+		"The King holds Rif's sweetheart hostage. Will the Boar provide any "
+		"assistance to Rif?",
+		"The Great Hall of the Boar King",
+		"boarhall.bbm"
+	}
+};
+
 // Script function #16 (0x10)
 int Script::SF_gotoScene(SCRIPTFUNC_PARAMS) {
-	ScriptDataWord param1 = thread->pop();
-	ScriptDataWord param2 = thread->pop();
+	int16 sceneNum = getSWord(thread->pop());
+	int16 entrance = getSWord(thread->pop());
 
-	debug(1, "stub: SF_gotoScene(%d, %d)", param1, param2);
+	for (int i = 0; i < ARRAYSIZE(sceneSubstitutes); i++)
+		if (sceneSubstitutes[i].sceneId == sceneNum)
+			debug(0, "Scene %d substitute exists", sceneNum);
+
+	debug(1, "stub: SF_gotoScene(%d, %d)", sceneNum, entrance);
 	return SUCCESS;
 }
 
 // Script function #17 (0x11)
 int Script::SF_setObjImage(SCRIPTFUNC_PARAMS) {
-	ScriptDataWord obj_param = thread->pop();
-	ScriptDataWord sprite_param = thread->pop();
+	int16 obj_param = getSWord(thread->pop());
+	int16 sprite_param = getSWord(thread->pop());
 
 	int index = obj_param & 0x1FFF;
 
@@ -394,8 +452,8 @@
 
 // Script function #18 (0x12)
 int Script::SF_setObjName(SCRIPTFUNC_PARAMS) {
-	ScriptDataWord obj_param = thread->pop();
-	ScriptDataWord name_param = thread->pop();
+	int obj_param = getSWord(thread->pop());
+	int name_param = getSWord(thread->pop());
 
 	int index = obj_param & 0x1FFF;
 
@@ -409,7 +467,7 @@
 
 // Script function #19 (0x13)
 int Script::SF_getObjImage(SCRIPTFUNC_PARAMS) {
-	ScriptDataWord param = thread->pop();
+	int param = getSWord(thread->pop());
 	int index = param & 0x1FFF;
 
 	if (index >= ARRAYSIZE(ObjectTable)) {





More information about the Scummvm-git-logs mailing list