[Scummvm-cvs-logs] CVS: scummvm/saga interface.cpp,1.63,1.64 interface.h,1.31,1.32 saga.cpp,1.91,1.92 script.cpp,1.49,1.50 script.h,1.53,1.54 sthread.cpp,1.60,1.61

Eugene Sandulenko sev at users.sourceforge.net
Mon Jan 17 12:19:07 CET 2005


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

Modified Files:
	interface.cpp interface.h saga.cpp script.cpp script.h 
	sthread.cpp 
Log Message:
First batch of converse implementation in scripts. To see it type
'scene_change 33' in debugger.


Index: interface.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/saga/interface.cpp,v
retrieving revision 1.63
retrieving revision 1.64
diff -u -d -r1.63 -r1.64
--- interface.cpp	15 Jan 2005 23:46:42 -0000	1.63
+++ interface.cpp	17 Jan 2005 20:16:50 -0000	1.64
@@ -252,6 +252,29 @@
 			}
 		}
 		break;
+	case kPanelConverse:
+		switch (keyCode) {
+		case 'x':
+			setMode(kPanelInventory);
+			// FIXME: puzzle
+			break;
+
+		case 'u':
+			converseChangePos(-1);
+			break;
+
+		case 'd':
+			converseChangePos(1);
+			break;
+
+		case '1':
+		case '2':
+		case '3':
+		case '4':
+			converseSetPos(keyCode);
+			break;
+
+		}
 	}
 	return false;
 }
@@ -324,6 +347,7 @@
 
 		bufToSurface(backBuffer, _conversePanel.image, _conversePanel.imageWidth,
 						_conversePanel.imageHeight, NULL, &origin);
+		converseDisplayText(0);
 	}
 
 	if (_panelMode == kPanelMain || _panelMode == kPanelConverse ||
@@ -904,9 +928,9 @@
 	}
 }
 
-void Interface::converseSetPos(void) {
+void Interface::converseSetPos(int key) {
 	Converse *ct;
-	int selection = 1; // = keyStroke - '1'; // FIXME
+	int selection = key - '1';
 
 	if (selection >= _converseTextCount)
 		return;
@@ -915,6 +939,8 @@
 	converseSetTextLines(selection, kColorBrightWhite, false);
 
 	ct = &_converseText[_conversePos];
+
+	//finishDialog( ct->replyID, ct->replyFlags, ct->replyBit );
 	// FIXME: TODO: finish dialog thread
 
 	// FIXME: TODO: Puzzle

Index: interface.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/saga/interface.h,v
retrieving revision 1.31
retrieving revision 1.32
diff -u -d -r1.31 -r1.32
--- interface.h	15 Jan 2005 23:46:43 -0000	1.31
+++ interface.h	17 Jan 2005 20:17:01 -0000	1.32
@@ -137,7 +137,7 @@
 	void converseDisplayText(int pos);
 	void converseSetTextLines(int row, int textcolor, bool btnDown);
 	void converseChangePos(int chg);
-	void converseSetPos(void);
+	void converseSetPos(int key);
 
 private:
 	void converseDisplayTextLine(int textcolor, bool btnUp, bool rebuild);

Index: saga.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/saga/saga.cpp,v
retrieving revision 1.91
retrieving revision 1.92
diff -u -d -r1.91 -r1.92
--- saga.cpp	15 Jan 2005 20:12:48 -0000	1.91
+++ saga.cpp	17 Jan 2005 20:17:01 -0000	1.92
@@ -262,6 +262,8 @@
 		debug(0, "Sound disabled.");
 	}
 
+	_interface->converseClear();
+
 	return 0;
 }
 

Index: script.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/saga/script.cpp,v
retrieving revision 1.49
retrieving revision 1.50
diff -u -d -r1.49 -r1.50
--- script.cpp	17 Jan 2005 07:21:08 -0000	1.49
+++ script.cpp	17 Jan 2005 20:17:02 -0000	1.50
@@ -62,6 +62,7 @@
 	_currentScript = 0;
 	_abortEnabled = true;
 	_skipSpeeches = false;
+	_conversingThread = NULL;
 
 	_firstObjectSet = false;
 	_secondObjectNeeded = false;

Index: script.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/saga/script.h,v
retrieving revision 1.53
retrieving revision 1.54
diff -u -d -r1.53 -r1.54
--- script.h	15 Jan 2005 23:46:43 -0000	1.53
+++ script.h	17 Jan 2005 20:17:04 -0000	1.54
@@ -110,21 +110,30 @@
 	opReturn = 0x1B,
 	opReturnV = 0x1C,
 //...
-	opSpeak = 0x53
+	opSpeak = 0x53,
+	opDialogBegin = 0x54,
+	opDialogEnd = 0x55,
+	opReply = 0x56
 };
 
 enum CycleFlags {
-	kCyclePong = (1 << 0),
-	kCycleOnce = (1 << 1),
-	kCycleRandom = (1 << 2),
-	kCycleReverse = (1 << 3)
+	kCyclePong    = 1 << 0,
+	kCycleOnce    = 1 << 1,
+	kCycleRandom  = 1 << 2,
+	kCycleReverse = 1 << 3
 };
 
 enum WalkFlags {
-	kWalkBackPedal = (1<<0),
-	kWalkAsync = (1<<1),
-	kWalkUseAngle = (1<<2),
-	kWalkFace = (1<<5)
+	kWalkBackPedal = 1 << 0,
+	kWalkAsync     = 1 << 1,
+	kWalkUseAngle  = 1 << 2,
+	kWalkFace      = 1 << 5
+};
+
+enum ReplyFlags {
+	kReplyOnce      = 1 << 0,
+	kReplySummary   = 1 << 1,
+	kReplyCondition = 1 << 2
 };
 
 struct ScriptThread {
@@ -333,6 +342,9 @@
 	void setThreadEntrypoint(ScriptThread *thread, int entrypointNumber);
 
 private:
+	ScriptThread *_conversingThread;
+
+private:
 	typedef int (Script::*ScriptFunctionType)(SCRIPTFUNC_PARAMS);
 
 	struct ScriptFunctionDescription {

Index: sthread.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/saga/sthread.cpp,v
retrieving revision 1.60
retrieving revision 1.61
diff -u -d -r1.60 -r1.61
--- sthread.cpp	16 Jan 2005 17:07:27 -0000	1.60
+++ sthread.cpp	17 Jan 2005 20:17:06 -0000	1.61
@@ -771,28 +771,40 @@
 				}
 			}
 			break;
-			// (DLGS): Initialize dialogue interface
-		case 0x54:
-			warning("dialog_begin opcode: stub");
+
+		case opDialogBegin: // (DLGS): Initialize dialogue interface
+			if (_conversingThread) {
+				thread->wait(kWaitTypeDialogBegin);
+				return;
+			}
+			_conversingThread = thread;
+			_vm->_interface->converseClear();
 			break;
-			// (DLGX): Run dialogue interface
-		case 0x55:
-			if (0) {
+
+		case opDialogEnd: // (DLGX): Run dialogue interface
+			if (thread == _conversingThread) {
 				_vm->_interface->activate();
 				_vm->_interface->setMode(kPanelConverse);
+				thread->wait(kWaitTypeDialogEnd);
+				return;
 			}
-			warning("dialog_end opcode: stub");
 			break;
-			// (DLGO): Add a dialogue option to interface
-		case 0x56:
+
+		case opReply: // (DLGO): Add a dialogue option to interface
 			{
-				ScriptDataWord param3 = 0;
-				param1 = scriptS.readByte();
-				param2 = scriptS.readByte();
-				if (param2 & 1) {
-					param3 = scriptS.readUint16LE();
+				ScriptDataWord n = 0;
+				const char *str;
+				int replyNum = scriptS.readByte();
+				int flags = scriptS.readByte();
+
+				if (flags & kReplyOnce) {
+					n = scriptS.readUint16LE();
+					// TODO:
 				}
-				debug(2, "DLGO | %02X %02X %04X", param1, param2, param3);
+
+				str = getScriptString(thread->pop());
+				if (_vm->_interface->converseAddText(str, replyNum, flags, n))
+					warning("Error adding ConverseText (%s, %d, %d, %d)", str, replyNum, flags, n);
 			}
 			break;
 		case 0x57: // animate





More information about the Scummvm-git-logs mailing list