[Scummvm-cvs-logs] CVS: scummvm/saga interface.cpp,1.125,1.126 interface.h,1.69,1.70 scene.cpp,1.140,1.141 sthread.cpp,1.99,1.100

Eugene Sandulenko sev at users.sourceforge.net
Wed Aug 10 06:59:46 CEST 2005


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

Modified Files:
	interface.cpp interface.h scene.cpp sthread.cpp 
Log Message:
Implement part of chapter selection panel.


Index: interface.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/saga/interface.cpp,v
retrieving revision 1.125
retrieving revision 1.126
diff -u -d -r1.125 -r1.126
--- interface.cpp	8 Aug 2005 07:44:51 -0000	1.125
+++ interface.cpp	10 Aug 2005 13:56:51 -0000	1.126
@@ -27,6 +27,7 @@
 #include "saga/gfx.h"
 #include "saga/actor.h"
 #include "saga/console.h"
+#include "saga/events.h"
 #include "saga/font.h"
 #include "saga/objectmap.h"
 #include "saga/isomap.h"
@@ -264,7 +265,7 @@
 	switch (_panelMode) {
 	case kPanelMain:
 		if (_vm->getGameType() == GType_IHNM)
-			warning("FIXME: Implement IHNM differences from ExecuteInvontoryPanel");
+			warning("FIXME: Implement IHNM differences from ExecuteInventoryPanel");
 
 		_mainPanel.currentButton = NULL;
 		break;
@@ -301,6 +302,8 @@
 		_vm->_render->setFlag(RF_DEMO_SUBST);
 		_vm->_gfx->getCurrentPal(_mapSavedPal);
 		break;
+	case kPanelChapterSelection:
+		break;
 	}
 
 	draw();
@@ -1169,6 +1172,56 @@
 	}
 }
 
+void Interface::handleChapterSelectionUpdate(const Point& mousePoint) {
+	
+}
+
+void Interface::handleChapterSelectionClick(const Point& mousePoint) {
+	int obj = _vm->_script->_pointerObject;
+
+	_vm->_actor->abortSpeech();
+
+	if (obj) {
+		int script = 0;
+		HitZone *hitZone;
+		ActorData *a;
+		ObjectData *o;
+		EVENT event;
+
+		switch (objectTypeId(obj)) {
+		case kGameObjectHitZone:
+			hitZone = _vm->_scene->_actionMap->getHitZone(objectIdToIndex(obj));
+			if (hitZone->getFlags() & kHitZoneExit)
+				script = hitZone->getScriptNumber();
+			break;
+
+		case kGameObjectActor:
+			a = _vm->_actor->getActor(obj);
+			script = a->scriptEntrypointNumber;
+			break;
+
+		case kGameObjectObject:
+			o = _vm->_actor->getObj(obj);
+			script = o->scriptEntrypointNumber;
+			break;
+		}
+
+		if (script > 0) {
+			event.type = ONESHOT_EVENT;
+			event.code = SCRIPT_EVENT;
+			event.op = EVENT_EXEC_NONBLOCKING;
+			event.time = 0;
+			event.param = _vm->_scene->getScriptModuleNumber();
+			event.param2 = script;
+			event.param3 = kVerbIHNMUse;		// Action
+			event.param4 = obj;	// Object
+			event.param5 = 0;	// With Object
+			event.param6 = obj;		// Actor
+
+			_vm->_events->queue(&event);
+		}
+	}
+}
 
 void Interface::setOption(PanelButton *panelButton) {
 	char * fileName;
@@ -1210,7 +1263,8 @@
 		return;
 	}
 
-	if (_panelMode == kPanelMain) {
+	switch (_panelMode) {
+	case kPanelMain:
 		if (updateFlag & UPDATE_MOUSEMOVE) {
 			bool lastWasPlayfield = _lastMousePoint.y < _vm->getSceneHeight();
 			if (mousePoint.y < _vm->getSceneHeight()) {
@@ -1235,13 +1289,11 @@
 				}
 			}
 		}
-	}
+		break;
 
-	if (_panelMode == kPanelConverse) {
+	case kPanelConverse:
 		if (updateFlag & UPDATE_MOUSEMOVE) {
-
 			handleConverseUpdate(mousePoint);
-
 		} else {
 			if (updateFlag & UPDATE_MOUSECLICK) {
 				handleConverseClick(mousePoint);
@@ -1257,13 +1309,11 @@
 				_vm->_puzzle->handleClick(mousePoint);
 			}
 		}
-	}
+		break;
 
-	if (_panelMode == kPanelOption) {
+	case kPanelOption:
 		if (updateFlag & UPDATE_MOUSEMOVE) {
-
 			handleOptionUpdate(mousePoint);
-
 		} else {
 			if (updateFlag & UPDATE_MOUSECLICK) {
 				handleOptionClick(mousePoint);
@@ -1279,21 +1329,19 @@
 				calcOptionSaveSlider();
 			}
 		}
-	}
+		break;
 
-	if (_panelMode == kPanelQuit) {
+	case kPanelQuit:
 		if (updateFlag & UPDATE_MOUSEMOVE) {
-
 			handleQuitUpdate(mousePoint);
-
 		} else {
 			if (updateFlag & UPDATE_MOUSECLICK) {
 				handleQuitClick(mousePoint);
 			}
 		}
-	}
+		break;
 
-	if (_panelMode == kPanelLoad) {
+	case kPanelLoad:
 		if (updateFlag & UPDATE_MOUSEMOVE) {
 
 			handleLoadUpdate(mousePoint);
@@ -1303,9 +1351,9 @@
 				handleLoadClick(mousePoint);
 			}
 		}
-	}
+		break;
 
-	if (_panelMode == kPanelSave) {
+	case kPanelSave:
 		if (updateFlag & UPDATE_MOUSEMOVE) {
 
 			handleSaveUpdate(mousePoint);
@@ -1315,20 +1363,31 @@
 				handleSaveClick(mousePoint);
 			}
 		}
-	}
+		break;
 
-	if (_panelMode == kPanelMap) {
+	case kPanelMap:
 		if (updateFlag & UPDATE_MOUSECLICK)
 			mapPanelClean();
-	}
+		break;
 
-	if (_panelMode == kPanelSceneSubstitute) {
+	case kPanelSceneSubstitute:
 		if (updateFlag & UPDATE_MOUSECLICK) {
 			_vm->_render->clearFlag(RF_DEMO_SUBST);
 			_vm->_gfx->setPalette(_mapSavedPal);
 			setMode(kPanelMain);
 			_vm->_script->setNoPendingVerb();
 		}
+		break;
+
+	case kPanelChapterSelection:
+		// TODO: panel has silent button
+		if (updateFlag & UPDATE_MOUSEMOVE) {
+			handleChapterSelectionUpdate(mousePoint);
+		} else {
+			if (updateFlag & UPDATE_MOUSECLICK)
+				handleChapterSelectionClick(mousePoint);
+		}
+		break;
 	}
 
 	_lastMousePoint = mousePoint;

Index: interface.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/saga/interface.h,v
retrieving revision 1.69
retrieving revision 1.70
diff -u -d -r1.69 -r1.70
--- interface.h	7 Aug 2005 00:00:41 -0000	1.69
+++ interface.h	10 Aug 2005 13:56:51 -0000	1.70
@@ -70,7 +70,7 @@
 	kPanelPlacard,
 	kPanelMap,
 	kPanelSceneSubstitute,
-	kPanelUnknown
+	kPanelChapterSelection
 //	kPanelInventory
 };
 
@@ -313,6 +313,9 @@
 	void handleSaveUpdate(const Point& mousePoint);					// save panel update
 	void handleSaveClick(const Point& mousePoint);					// save panel click
 
+	void handleChapterSelectionUpdate(const Point& mousePoint);
+	void handleChapterSelectionClick(const Point& mousePoint);
+
 	void mapPanelShow();
 	void mapPanelClean();
 

Index: scene.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/saga/scene.cpp,v
retrieving revision 1.140
retrieving revision 1.141
diff -u -d -r1.140 -r1.141
--- scene.cpp	7 Aug 2005 00:00:41 -0000	1.140
+++ scene.cpp	10 Aug 2005 13:56:51 -0000	1.141
@@ -620,7 +620,7 @@
 		_vm->_interface->activate();
 
 		if (loadSceneParams->chapter == 8 || loadSceneParams->chapter == -1)
-			_vm->_interface->setMode(kPanelUnknown);
+			_vm->_interface->setMode(kPanelChapterSelection);
 		else
 			_vm->_interface->setMode(kPanelMain);
 

Index: sthread.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/saga/sthread.cpp,v
retrieving revision 1.99
retrieving revision 1.100
diff -u -d -r1.99 -r1.100
--- sthread.cpp	9 Aug 2005 16:01:04 -0000	1.99
+++ sthread.cpp	10 Aug 2005 13:56:51 -0000	1.100
@@ -649,9 +649,11 @@
 					}
 				}
 
-				if (sampleResourceId < 0 || sampleResourceId > 4000) {
+				if (sampleResourceId < 0 || sampleResourceId > 4000)
+					sampleResourceId = -1;
+
+				if (_vm->getGameType() == GType_ITE && !sampleResourceId)
 					sampleResourceId = -1;
-				}
 
 				_vm->_actor->actorSpeech(actorId, strings, stringsCount, sampleResourceId, speechFlags);
 





More information about the Scummvm-git-logs mailing list