aboutsummaryrefslogtreecommitdiff
path: root/engines/xeen/dialogs/dialogs_copy_protection.cpp
diff options
context:
space:
mode:
authorPaul Gilbert2018-03-22 20:22:52 -0400
committerPaul Gilbert2018-03-22 20:22:52 -0400
commit27ef37b4004e10e9052115372d99a1af16897654 (patch)
tree21f5d0a9d579ae2d9d050c535b437388257ce54d /engines/xeen/dialogs/dialogs_copy_protection.cpp
parent808090792749e4f6f819373f20225fa055a5f932 (diff)
downloadscummvm-rg350-27ef37b4004e10e9052115372d99a1af16897654.tar.gz
scummvm-rg350-27ef37b4004e10e9052115372d99a1af16897654.tar.bz2
scummvm-rg350-27ef37b4004e10e9052115372d99a1af16897654.zip
XEEN: Add original copy protection dialog
Diffstat (limited to 'engines/xeen/dialogs/dialogs_copy_protection.cpp')
-rw-r--r--engines/xeen/dialogs/dialogs_copy_protection.cpp100
1 files changed, 100 insertions, 0 deletions
diff --git a/engines/xeen/dialogs/dialogs_copy_protection.cpp b/engines/xeen/dialogs/dialogs_copy_protection.cpp
new file mode 100644
index 0000000000..7788cb5a22
--- /dev/null
+++ b/engines/xeen/dialogs/dialogs_copy_protection.cpp
@@ -0,0 +1,100 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "xeen/dialogs/dialogs_copy_protection.h"
+#include "xeen/dialogs/dialogs_input.h"
+#include "xeen/resources.h"
+#include "xeen/xeen.h"
+
+namespace Xeen {
+
+bool CopyProtection::show(XeenEngine *vm) {
+ CopyProtection *dlg = new CopyProtection(vm);
+ int result = dlg->execute();
+ delete dlg;
+
+ return result;
+}
+
+CopyProtection::CopyProtection(XeenEngine *vm) : Input(vm, &(*vm->_windows)[11]) {
+ loadEntries();
+}
+
+bool CopyProtection::execute() {
+ EventsManager &events = *_vm->_events;
+ Sound &sound = *_vm->_sound;
+ Window &w = *_window;
+ bool result = false;
+ Common::String line;
+
+ // Choose a random entry
+ ProtectionEntry &protEntry = _entries[_vm->getRandomNumber(_entries.size() - 1)];
+ Common::String msg = Common::String::format(Res.WHATS_THE_PASSWORD,
+ protEntry._pageNum, protEntry._lineNum, protEntry._wordNum);
+
+ w.open();
+ w.writeString(msg);
+ w.update();
+
+ for (int tryNum = 0; tryNum < 3 && !_vm->shouldExit(); ++tryNum) {
+ line.clear();
+ if (getString(line, 20, 200, false) && !line.compareToIgnoreCase(protEntry._text)) {
+ sound.playFX(20);
+ result = true;
+ break;
+ }
+
+ sound.playFX(21);
+ w.writeString("\x3l\v040\n\x4""200");
+ w.writeString(Res.PASSWORD_INCORRECT);
+ w.update();
+
+ events.updateGameCounter();
+ events.wait(50, false);
+ }
+
+ w.close();
+ return result;
+}
+
+void CopyProtection::loadEntries() {
+ FileManager &files = *g_vm->_files;
+ File f(files._ccNum ? "timer.drv" : "cpstruct");
+ ProtectionEntry pe;
+ byte seed = 0;
+ char text[13];
+
+ while (f.pos() < f.size()) {
+ pe._pageNum = f.readByte() ^ seed++;
+ pe._lineNum = f.readByte() ^ seed++;
+ pe._wordNum = f.readByte() ^ seed++;
+
+ for (int idx = 0; idx < 13; ++idx)
+ text[idx] = f.readByte() ^ seed++;
+ text[12] = '\0';
+ pe._text = Common::String(text);
+
+ _entries.push_back(pe);
+ }
+}
+
+} // End of namespace Xeen