aboutsummaryrefslogtreecommitdiff
path: root/engines/kyra/kyra_v3.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/kyra/kyra_v3.cpp')
-rw-r--r--engines/kyra/kyra_v3.cpp38
1 files changed, 37 insertions, 1 deletions
diff --git a/engines/kyra/kyra_v3.cpp b/engines/kyra/kyra_v3.cpp
index aafe6fb14e..58c2a66df3 100644
--- a/engines/kyra/kyra_v3.cpp
+++ b/engines/kyra/kyra_v3.cpp
@@ -112,6 +112,14 @@ KyraEngine_v3::KyraEngine_v3(OSystem *system, const GameFlags &flags) : KyraEngi
_moveFacingTable = 0;
_unkHandleSceneChangeFlag = false;
memset(_sceneShapeDescs, 0, sizeof(_sceneShapeDescs));
+ _cnvFile = _dlgBuffer = 0;
+ _curDlgChapter = _curDlgIndex = _curDlgLang = -1;
+ _isStartupDialog = 0;
+ _stringBuffer = 0;
+ _dialogSceneAnim = _dialogSceneScript = -1;
+ memset(&_dialogScriptData, 0, sizeof(_dialogScriptData));
+ memset(&_dialogScriptState, 0, sizeof(_dialogScriptState));
+ _dialogScriptFuncStart = _dialogScriptFuncProc = _dialogScriptFuncEnd = 0;
}
KyraEngine_v3::~KyraEngine_v3() {
@@ -160,6 +168,14 @@ KyraEngine_v3::~KyraEngine_v3() {
for (Common::Array<const Opcode*>::iterator i = _opcodesTemporary.begin(); i != _opcodesTemporary.end(); ++i)
delete *i;
_opcodesTemporary.clear();
+
+ for (Common::Array<const Opcode*>::iterator i = _opcodesDialog.begin(); i != _opcodesDialog.end(); ++i)
+ delete *i;
+ _opcodesDialog.clear();
+
+ delete _cnvFile;
+ delete _dlgBuffer;
+ delete [] _stringBuffer;
}
int KyraEngine_v3::init() {
@@ -500,6 +516,7 @@ void KyraEngine_v3::startup() {
_screen->setFont(Screen::FID_6_FNT);
+ _stringBuffer = new char[500];
//XXX
musicUpdate(0);
_moveFacingTable = new int[600];
@@ -1050,7 +1067,9 @@ void KyraEngine_v3::handleInput(int x, int y) {
} else if (_itemInHand >= 0 && _unk3 >= 0) {
//XXX
return;
- } else if (_unk3 != -3) {
+ } else if (_unk3 == -3) {
+ return;
+ } else {
if (y > 187 && _unk3 > -4)
return;
if (_unk5) {
@@ -1487,6 +1506,23 @@ uint8 *KyraEngine_v3::getTableEntry(uint8 *buffer, int id) {
return buffer + READ_LE_UINT16(offsetTable + num);
}
+void KyraEngine_v3::getTableEntry(Common::SeekableReadStream *stream, int id, char *dst) {
+ debugC(9, kDebugLevelMain, "KyraEngine_v3::getTableEntry(%p, %d, %p)", (const void*)stream, id, (const void*)dst);
+ stream->seek(0, SEEK_SET);
+ uint16 tableEntries = stream->readUint16LE();
+
+ int num = 0;
+ while (id != stream->readUint16LE())
+ ++num;
+
+ stream->seek(2+tableEntries*2+num*2, SEEK_SET);
+ stream->seek(stream->readUint16LE(), SEEK_SET);
+ char c = 0;
+ while ((c = stream->readByte()) != 0)
+ *dst++ = c;
+ *dst = 0;
+}
+
#pragma mark -
Movie *KyraEngine_v3::createWSAMovie() {