[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