aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthew Hoops2010-02-16 03:01:46 +0000
committerMatthew Hoops2010-02-16 03:01:46 +0000
commit5fd7dbb4061d808e4bc4c0cfba5e2eabf2687544 (patch)
treefe996c14b52c9211651a8106fb9637e3822bba80
parentb3ab83d8c125f8a7d8bafce04a3db11c3cdddec1 (diff)
downloadscummvm-rg350-5fd7dbb4061d808e4bc4c0cfba5e2eabf2687544.tar.gz
scummvm-rg350-5fd7dbb4061d808e4bc4c0cfba5e2eabf2687544.tar.bz2
scummvm-rg350-5fd7dbb4061d808e4bc4c0cfba5e2eabf2687544.zip
Move Riven variable randomization to initVars() and implement randomization for the dome and prison combinations.
svn-id: r48070
-rw-r--r--engines/mohawk/riven.cpp5
-rw-r--r--engines/mohawk/riven.h1
-rw-r--r--engines/mohawk/riven_external.cpp25
-rw-r--r--engines/mohawk/riven_external.h1
-rw-r--r--engines/mohawk/riven_vars.cpp28
5 files changed, 40 insertions, 20 deletions
diff --git a/engines/mohawk/riven.cpp b/engines/mohawk/riven.cpp
index cd1e71564c..d15a082469 100644
--- a/engines/mohawk/riven.cpp
+++ b/engines/mohawk/riven.cpp
@@ -25,6 +25,7 @@
#include "common/config-manager.h"
#include "common/events.h"
+#include "common/EventRecorder.h"
#include "common/keyboard.h"
#include "mohawk/graphics.h"
@@ -60,6 +61,7 @@ MohawkEngine_Riven::~MohawkEngine_Riven() {
delete[] _vars;
delete _loadDialog;
delete _optionsDialog;
+ delete _rnd;
_cardData.scripts.clear();
}
@@ -79,6 +81,9 @@ Common::Error MohawkEngine_Riven::run() {
_loadDialog->setSaveMode(false);
_optionsDialog = new RivenOptionsDialog(this);
+ _rnd = new Common::RandomSource();
+ g_eventRec.registerRandomSource(*_rnd, "riven");
+
initVars();
// Open extras.mhk for common images (non-existant in the demo)
diff --git a/engines/mohawk/riven.h b/engines/mohawk/riven.h
index 9cb43ebe9d..2d50fc0db5 100644
--- a/engines/mohawk/riven.h
+++ b/engines/mohawk/riven.h
@@ -107,6 +107,7 @@ public:
RivenGraphics *_gfx;
RivenExternal *_externalScriptHandler;
+ Common::RandomSource *_rnd;
Card _cardData;
bool _gameOver;
diff --git a/engines/mohawk/riven_external.cpp b/engines/mohawk/riven_external.cpp
index 51bfcd409d..edabc10946 100644
--- a/engines/mohawk/riven_external.cpp
+++ b/engines/mohawk/riven_external.cpp
@@ -29,20 +29,16 @@
#include "mohawk/sound.h"
#include "mohawk/video/video.h"
-#include "common/EventRecorder.h"
#include "gui/message.h"
+#include "common/events.h"
namespace Mohawk {
RivenExternal::RivenExternal(MohawkEngine_Riven *vm) : _vm(vm) {
setupCommands();
- _rnd = new Common::RandomSource();
- g_eventRec.registerRandomSource(*_rnd, "riven");
}
RivenExternal::~RivenExternal() {
- delete _rnd;
-
for (uint32 i = 0; i < _externalCommands.size(); i++)
delete _externalCommands[i];
@@ -1052,27 +1048,27 @@ void RivenExternal::xhandlecontrolmid(uint16 argc, uint16 *argv) {
void RivenExternal::xjplaybeetle_550(uint16 argc, uint16 *argv) {
// Play a beetle animation 25% of the time
- *_vm->matchVarToString("jplaybeetle") = (_rnd->getRandomNumberRng(0, 3) == 0) ? 1 : 0;
+ *_vm->matchVarToString("jplaybeetle") = (_vm->_rnd->getRandomNumberRng(0, 3) == 0) ? 1 : 0;
}
void RivenExternal::xjplaybeetle_600(uint16 argc, uint16 *argv) {
// Play a beetle animation 25% of the time
- *_vm->matchVarToString("jplaybeetle") = (_rnd->getRandomNumberRng(0, 3) == 0) ? 1 : 0;
+ *_vm->matchVarToString("jplaybeetle") = (_vm->_rnd->getRandomNumberRng(0, 3) == 0) ? 1 : 0;
}
void RivenExternal::xjplaybeetle_950(uint16 argc, uint16 *argv) {
// Play a beetle animation 25% of the time
- *_vm->matchVarToString("jplaybeetle") = (_rnd->getRandomNumberRng(0, 3) == 0) ? 1 : 0;
+ *_vm->matchVarToString("jplaybeetle") = (_vm->_rnd->getRandomNumberRng(0, 3) == 0) ? 1 : 0;
}
void RivenExternal::xjplaybeetle_1050(uint16 argc, uint16 *argv) {
// Play a beetle animation 25% of the time
- *_vm->matchVarToString("jplaybeetle") = (_rnd->getRandomNumberRng(0, 3) == 0) ? 1 : 0;
+ *_vm->matchVarToString("jplaybeetle") = (_vm->_rnd->getRandomNumberRng(0, 3) == 0) ? 1 : 0;
}
void RivenExternal::xjplaybeetle_1450(uint16 argc, uint16 *argv) {
// Play a beetle animation 25% of the time as long as the girl is not present
- *_vm->matchVarToString("jplaybeetle") = (_rnd->getRandomNumberRng(0, 3) == 0 && *_vm->matchVarToString("jgirl") != 1) ? 1 : 0;
+ *_vm->matchVarToString("jplaybeetle") = (_vm->_rnd->getRandomNumberRng(0, 3) == 0 && *_vm->matchVarToString("jgirl") != 1) ? 1 : 0;
}
void RivenExternal::xjlagoon700_alert(uint16 argc, uint16 *argv) {
@@ -1375,15 +1371,6 @@ void RivenExternal::xtatrusgivesbooks(uint16 argc, uint16 *argv) {
// Give the player Atrus' Journal and the Trap book
*_vm->matchVarToString("aatrusbook") = 1;
*_vm->matchVarToString("atrapbook") = 1;
-
- // Randomize the telescope combination
- uint32 *teleCombo = _vm->matchVarToString("tcorrectorder");
- for (byte i = 0; i < 5; i++) {
- *teleCombo *= 10;
- *teleCombo += _rnd->getRandomNumberRng(1, 5);
- }
-
- // TODO: Randomize Dome Combination
}
// Trap Book is removed from inventory
diff --git a/engines/mohawk/riven_external.h b/engines/mohawk/riven_external.h
index 2b8a90f8fd..8270a00854 100644
--- a/engines/mohawk/riven_external.h
+++ b/engines/mohawk/riven_external.h
@@ -41,7 +41,6 @@ public:
private:
MohawkEngine_Riven *_vm;
- Common::RandomSource *_rnd;
typedef void (RivenExternal::*ExternalCmd)(uint16 argc, uint16 *argv);
diff --git a/engines/mohawk/riven_vars.cpp b/engines/mohawk/riven_vars.cpp
index ed540cd82e..3f7cd5a8b6 100644
--- a/engines/mohawk/riven_vars.cpp
+++ b/engines/mohawk/riven_vars.cpp
@@ -319,6 +319,34 @@ void MohawkEngine_Riven::initVars() {
*matchVarToString("bheat") = 1;
*matchVarToString("waterenabled") = 1;
*matchVarToString("ogehnpage") = 1;
+
+ // Randomize the telescope combination
+ uint32 *teleCombo = matchVarToString("tcorrectorder");
+ for (byte i = 0; i < 5; i++) {
+ *teleCombo *= 10;
+ *teleCombo += _rnd->getRandomNumberRng(1, 5); // 5 buttons
+ }
+
+ // Randomize the prison combination
+ uint32 *prisonCombo = matchVarToString("pcorrectorder");
+ for (byte i = 0; i < 5; i++) {
+ *prisonCombo *= 10;
+ *prisonCombo += _rnd->getRandomNumberRng(1, 3); // 3 buttons/sounds
+ }
+
+ // Randomize the dome combination -- each bit represents a slider position,
+ // the highest bit (1 << 24) represents 1, (1 << 23) represents 2, etc.
+ uint32 *domeCombo = matchVarToString("adomecombo");
+ for (byte bitsSet = 0; bitsSet < 5;) {
+ uint32 randomBit = 1 << (24 - _rnd->getRandomNumber(24));
+
+ // Don't overwrite a bit we already set, and throw out the bottom five bits being set
+ if (*domeCombo & randomBit || (*domeCombo | randomBit) == 31)
+ continue;
+
+ *domeCombo |= randomBit;
+ bitsSet++;
+ }
}
} // End of namespace Mohawk