aboutsummaryrefslogtreecommitdiff
path: root/engines/mohawk/riven_stack.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/mohawk/riven_stack.cpp')
-rw-r--r--engines/mohawk/riven_stack.cpp33
1 files changed, 33 insertions, 0 deletions
diff --git a/engines/mohawk/riven_stack.cpp b/engines/mohawk/riven_stack.cpp
index b66ca834f4..54846f1139 100644
--- a/engines/mohawk/riven_stack.cpp
+++ b/engines/mohawk/riven_stack.cpp
@@ -23,6 +23,7 @@
#include "mohawk/riven_stack.h"
#include "mohawk/riven.h"
+#include "mohawk/riven_card.h"
#include "mohawk/resource.h"
namespace Mohawk {
@@ -31,6 +32,7 @@ RivenStack::RivenStack(MohawkEngine_Riven *vm, uint16 id) :
_vm(vm),
_id(id) {
loadResourceNames();
+ loadCardIdMap();
}
RivenStack::~RivenStack() {
@@ -83,6 +85,37 @@ int16 RivenStack::getIdFromName(RivenNameResource nameResource, const Common::St
}
}
+void RivenStack::loadCardIdMap() {
+ Common::SeekableReadStream *rmapStream = _vm->getResource(ID_RMAP, 1);
+
+ uint count = rmapStream->size() / sizeof(uint32);
+ _cardIdMap.resize(count);
+
+ for (uint i = 0; i < count; i++) {
+ _cardIdMap[i] = rmapStream->readUint32BE();
+ }
+
+ delete rmapStream;
+}
+
+uint16 RivenStack::getCardStackId(uint32 globalId) const {
+ int16 index = -1;
+
+ for (uint16 i = 0; i < _cardIdMap.size(); i++) {
+ if (_cardIdMap[i] == globalId)
+ index = i;
+ }
+
+ if (index < 0)
+ error ("Could not match RMAP code %08x", globalId);
+
+ return index;
+}
+
+uint32 RivenStack::getCurrentCardGlobalId() const {
+ return _cardIdMap[_vm->getCurCard()->getId()];
+}
+
RivenNameList::RivenNameList() {
}