[Scummvm-cvs-logs] SF.net SVN: scummvm: [31664] scummvm/trunk/engines/kyra
lordhoto at users.sourceforge.net
lordhoto at users.sourceforge.net
Wed Apr 23 18:06:33 CEST 2008
Revision: 31664
http://scummvm.svn.sourceforge.net/scummvm/?rev=31664&view=rev
Author: lordhoto
Date: 2008-04-23 09:06:33 -0700 (Wed, 23 Apr 2008)
Log Message:
-----------
Implemented opcodes:
- 8: o3_getMalcolmsSpirit
- 52: o3_setMalcolmsSpirit
- 65: o3_updateConversations
- 117: o3_runDialog
Modified Paths:
--------------
scummvm/trunk/engines/kyra/kyra_v3.cpp
scummvm/trunk/engines/kyra/kyra_v3.h
scummvm/trunk/engines/kyra/script.cpp
scummvm/trunk/engines/kyra/script_v3.cpp
scummvm/trunk/engines/kyra/text_v3.cpp
Modified: scummvm/trunk/engines/kyra/kyra_v3.cpp
===================================================================
--- scummvm/trunk/engines/kyra/kyra_v3.cpp 2008-04-23 14:58:30 UTC (rev 31663)
+++ scummvm/trunk/engines/kyra/kyra_v3.cpp 2008-04-23 16:06:33 UTC (rev 31664)
@@ -120,6 +120,7 @@
memset(&_dialogScriptData, 0, sizeof(_dialogScriptData));
memset(&_dialogScriptState, 0, sizeof(_dialogScriptState));
_dialogScriptFuncStart = _dialogScriptFuncProc = _dialogScriptFuncEnd = 0;
+ _malcolmsSpirit = 1;
}
KyraEngine_v3::~KyraEngine_v3() {
Modified: scummvm/trunk/engines/kyra/kyra_v3.h
===================================================================
--- scummvm/trunk/engines/kyra/kyra_v3.h 2008-04-23 14:58:30 UTC (rev 31663)
+++ scummvm/trunk/engines/kyra/kyra_v3.h 2008-04-23 16:06:33 UTC (rev 31664)
@@ -454,6 +454,8 @@
bool checkCharCollision(int x, int y);
+ int _malcolmsSpirit;
+
// talk object
struct TalkObject {
char filename[13];
@@ -523,6 +525,7 @@
int o3d_delay(ScriptState *script);
void malcolmRandomChat();
+ void runDialog(int dlgIndex, int funcNum);
// conscience
bool _badConscienceShown;
@@ -582,6 +585,7 @@
int o3_getCharacterY(ScriptState *script);
int o3_getCharacterFacing(ScriptState *script);
int o3_getCharacterScene(ScriptState *script);
+ int o3_getMalcolmsSpirit(ScriptState *script);
int o3_trySceneChange(ScriptState *script);
int o3_showSceneFileMessage(ScriptState *script);
int o3_showBadConscience(ScriptState *script);
@@ -602,10 +606,12 @@
int o3_showMouse(ScriptState *script);
int o3_badConscienceChat(ScriptState *script);
int o3_wipeDownMouseItem(ScriptState *script);
+ int o3_setMalcolmsSpirit(ScriptState *script);
int o3_delay(ScriptState *script);
int o3_setSceneFilename(ScriptState *script);
int o3_drawSceneShape(ScriptState *script);
int o3_checkInRect(ScriptState *script);
+ int o3_updateConversations(ScriptState *script);
int o3_setSceneDim(ScriptState *script);
int o3_update(ScriptState *script);
int o3_enterNewScene(ScriptState *script);
@@ -619,6 +625,7 @@
int o3_defineSceneAnim(ScriptState *script);
int o3_updateSceneAnim(ScriptState *script);
int o3_runActorScript(ScriptState *script);
+ int o3_runDialog(ScriptState *script);
int o3_malcolmRandomChat(ScriptState *script);
int o3_setDlgIndex(ScriptState *script);
int o3_getDlgIndex(ScriptState *script);
Modified: scummvm/trunk/engines/kyra/script.cpp
===================================================================
--- scummvm/trunk/engines/kyra/script.cpp 2008-04-23 14:58:30 UTC (rev 31663)
+++ scummvm/trunk/engines/kyra/script.cpp 2008-04-23 16:06:33 UTC (rev 31664)
@@ -221,6 +221,7 @@
void ScriptFileParser::setFile(const char *filename, Resource *res) {
destroy();
+ res->exists(filename, true);
_stream = res->getFileStream(filename);
assert(_stream);
_startOffset = 0;
Modified: scummvm/trunk/engines/kyra/script_v3.cpp
===================================================================
--- scummvm/trunk/engines/kyra/script_v3.cpp 2008-04-23 14:58:30 UTC (rev 31663)
+++ scummvm/trunk/engines/kyra/script_v3.cpp 2008-04-23 16:06:33 UTC (rev 31664)
@@ -108,6 +108,11 @@
return _mainCharacter.sceneId;
}
+int KyraEngine_v3::o3_getMalcolmsSpirit(ScriptState *script) {
+ debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v3::o3_getMalcolmsSpirit(%p) ()", (const void *)script);
+ return _malcolmsSpirit;
+}
+
int KyraEngine_v3::o3_trySceneChange(ScriptState *script) {
debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v3::o3_trySceneChange(%p) (%d, %d, %d, %d)", (const void *)script,
stackPos(0), stackPos(1), stackPos(2), stackPos(3));
@@ -283,6 +288,11 @@
return 0;
}
+int KyraEngine_v3::o3_setMalcolmsSpirit(ScriptState *script) {
+ debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v3::o3_setMalcolmsSpirit(%p) (%d)", (const void *)script, stackPos(0));
+ return (_malcolmsSpirit = stackPos(0));
+}
+
int KyraEngine_v3::o3_delay(ScriptState *script) {
debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v3::o3_delay(%p) (%d, %d)", (const void *)script, stackPos(0), stackPos(1));
const uint32 delayTime = stackPos(0) * _tickLength;
@@ -337,6 +347,210 @@
}
}
+int KyraEngine_v3::o3_updateConversations(ScriptState *script) {
+ debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v3::o3_updateConversations(%p) (%d)", (const void *)script, stackPos(0));
+ int dlgIndex = stackPos(0);
+ switch (_curChapter-2) {
+ case 0:
+ dlgIndex -= 34;
+ break;
+
+ case 1:
+ dlgIndex -= 54;
+ break;
+
+ case 2:
+ dlgIndex -= 55;
+ break;
+
+ case 3:
+ dlgIndex -= 70;
+ break;
+
+ default:
+ break;
+ }
+
+ int convs[4];
+ Common::set_to(convs, convs+4, -1);
+
+ if (_curChapter == 1) {
+ switch (_mainCharacter.dlgIndex) {
+ case 0:
+ convs[0] = 6;
+ convs[1] = 12;
+ break;
+
+ case 2:
+ convs[0] = 8;
+ convs[1] = 14;
+ break;
+
+ case 3:
+ convs[0] = 9;
+ convs[1] = 15;
+ break;
+
+ case 4:
+ convs[0] = 10;
+ convs[1] = 16;
+ break;
+
+ case 5:
+ convs[0] = 11;
+ convs[1] = 17;
+ break;
+
+ case 6:
+ convs[0] = 0;
+ convs[1] = 12;
+ break;
+
+ case 8:
+ convs[0] = 2;
+ convs[1] = 14;
+ break;
+
+ case 9:
+ convs[0] = 3;
+ convs[1] = 15;
+ break;
+
+ case 10:
+ convs[0] = 4;
+ convs[1] = 16;
+ break;
+
+ case 11:
+ convs[0] = 5;
+ convs[1] = 17;
+ break;
+
+ case 12:
+ convs[0] = 0;
+ convs[1] = 6;
+ break;
+
+ case 14:
+ convs[0] = 2;
+ convs[1] = 8;
+ break;
+
+ case 15:
+ convs[0] = 3;
+ convs[1] = 9;
+ break;
+
+ case 16:
+ convs[0] = 4;
+ convs[1] = 10;
+ break;
+
+ case 17:
+ convs[0] = 5;
+ convs[1] = 11;
+ break;
+
+ default:
+ break;
+ }
+ } else if (_curChapter == 2) {
+ switch (_mainCharacter.dlgIndex) {
+ case 0:
+ convs[0] = 4;
+ convs[1] = 8;
+ convs[2] = 5;
+ convs[3] = 9;
+ break;
+
+ case 1:
+ convs[0] = 4;
+ convs[1] = 8;
+ convs[2] = 0;
+ convs[3] = 5;
+ break;
+
+ case 2:
+ convs[0] = 6;
+ convs[2] = 11;
+ break;
+
+ case 3:
+ convs[0] = 7;
+ convs[2] = 12;
+ break;
+
+ case 4:
+ convs[0] = 0;
+ convs[1] = 8;
+ convs[2] = 1;
+ convs[3] = 9;
+ break;
+
+ case 5:
+ convs[0] = 0;
+ convs[1] = 8;
+ convs[2] = 4;
+ convs[3] = 1;
+ break;
+
+ case 6:
+ convs[0] = 2;
+ convs[1] = 10;
+ break;
+
+ case 7:
+ convs[0] = 3;
+ convs[1] = 11;
+ break;
+
+ case 8:
+ convs[0] = 0;
+ convs[1] = 4;
+ convs[2] = 1;
+ break;
+
+ case 9:
+ convs[0] = 0;
+ convs[1] = 4;
+ convs[2] = 0;
+ convs[4] = 1;
+ break;
+
+ case 10:
+ convs[0] = 2;
+ convs[1] = 6;
+ break;
+
+ case 11:
+ convs[0] = 3;
+ convs[1] = 7;
+ break;
+
+ default:
+ break;
+ }
+ } else if (_curChapter == 4) {
+ if (_malcolmsSpirit == 0) {
+ convs[0] = _mainCharacter.dlgIndex - 10;
+ convs[1] = _mainCharacter.dlgIndex - 5;
+ } else if (_malcolmsSpirit == 1) {
+ convs[0] = _mainCharacter.dlgIndex + 5;
+ convs[1] = _mainCharacter.dlgIndex + 10;
+ } else if (_malcolmsSpirit == 2) {
+ convs[0] = _mainCharacter.dlgIndex - 5;
+ convs[1] = _mainCharacter.dlgIndex + 5;
+ }
+ }
+
+ for (int i = 0; i < 4; ++i) {
+ if (convs[i] != -1)
+ _conversationState[dlgIndex][convs[i]] = 0;
+ }
+
+ return 1;
+}
+
int KyraEngine_v3::o3_setSceneDim(ScriptState *script) {
debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v3::o3_setSceneDim(%p) (%d, %d)", (const void *)script, stackPos(0), stackPos(1));
_sceneMinX = stackPos(0);
@@ -544,6 +758,12 @@
return 0;
}
+int KyraEngine_v3::o3_runDialog(ScriptState *script) {
+ debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v3::o3_runDialog(%p) (%d, %d)", (const void *)script, stackPos(0), stackPos(1));
+ runDialog(stackPos(0), stackPos(1));
+ return 0;
+}
+
int KyraEngine_v3::o3_malcolmRandomChat(ScriptState *script) {
debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v3::o3_malcolmRandomChat(%p) ()", (const void *)script);
malcolmRandomChat();
@@ -751,7 +971,7 @@
Opcode(o3_getCharacterFacing);
Opcode(o3_getCharacterScene);
// 0x08
- OpcodeUnImpl();
+ Opcode(o3_getMalcolmsSpirit);
Opcode(o3_dummy);
Opcode(o3_dummy);
OpcodeUnImpl();
@@ -806,8 +1026,8 @@
Opcode(o3_wipeDownMouseItem);
Opcode(o3_dummy);
// 0x34
+ Opcode(o3_setMalcolmsSpirit);
OpcodeUnImpl();
- OpcodeUnImpl();
Opcode(o3_dummy);
Opcode(o3_delay);
// 0x38
@@ -822,8 +1042,8 @@
Opcode(o3_drawSceneShape);
// 0x40
Opcode(o3_checkInRect);
+ Opcode(o3_updateConversations);
OpcodeUnImpl();
- OpcodeUnImpl();
Opcode(o3_dummy);
// 0x44
Opcode(o3_dummy);
@@ -887,7 +1107,7 @@
Opcode(o3_dummy);
// 0x74
Opcode(o3_runActorScript);
- OpcodeUnImpl();
+ Opcode(o3_runDialog);
Opcode(o3_malcolmRandomChat);
Opcode(o3_setDlgIndex);
// 0x78
Modified: scummvm/trunk/engines/kyra/text_v3.cpp
===================================================================
--- scummvm/trunk/engines/kyra/text_v3.cpp 2008-04-23 14:58:30 UTC (rev 31663)
+++ scummvm/trunk/engines/kyra/text_v3.cpp 2008-04-23 16:06:33 UTC (rev 31664)
@@ -516,7 +516,7 @@
while (running) {
uint16 cmd = _cnvFile->readUint16LE();
- int object = cmd - 14;
+ int object = cmd - 12;
if (cmd == 10) {
break;
@@ -668,5 +668,52 @@
processDialog(vocHighIndex, vocHighBase, 0);
}
+void KyraEngine_v3::runDialog(int dlgIndex, int funcNum) {
+ debugC(9, kDebugLevelMain, "KyraEngine_v3::runDialog(%d, %d)", dlgIndex, funcNum);
+
+ switch (_curChapter-2) {
+ case 0:
+ dlgIndex -= 34;
+ break;
+
+ case 1:
+ dlgIndex -= 54;
+ break;
+
+ case 2:
+ dlgIndex -= 55;
+ break;
+
+ case 3:
+ dlgIndex -= 70;
+ break;
+
+ default:
+ break;
+ }
+
+ updateDlgBuffer();
+
+ int vocHighBase = 0, vocHighIndex = 0, index1 = 0, index2 = 0;
+ loadDlgHeader(vocHighBase, vocHighIndex, index1, index2);
+
+ int convState = _conversationState[dlgIndex][vocHighBase];
+ uint32 offset = ((vocHighIndex == 1) ? dlgIndex - 1 : dlgIndex) * 6;
+ if (convState == -1) {
+ _cnvFile->seek(offset, SEEK_CUR);
+ _conversationState[dlgIndex][vocHighBase] = 0;
+ } else if (convState == 0 || convState == 2) {
+ _cnvFile->seek(offset+2, SEEK_CUR);
+ _conversationState[dlgIndex][vocHighBase] = 1;
+ } else {
+ _cnvFile->seek(offset+4, SEEK_CUR);
+ _conversationState[dlgIndex][vocHighBase] = 2;
+ }
+
+ _cnvFile->seek(_cnvFile->readUint16LE(), SEEK_SET);
+
+ processDialog(vocHighIndex, vocHighBase, funcNum);
+}
+
} // end of namespace Kyra
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
More information about the Scummvm-git-logs
mailing list