aboutsummaryrefslogtreecommitdiff
path: root/engines/supernova/rooms.h
diff options
context:
space:
mode:
authorThierry Crozat2017-11-04 14:54:26 +0000
committerThierry Crozat2018-01-23 02:15:37 +0000
commit7bf803f6e677b9b8bf29caf55f9c211cfe175c1b (patch)
treecbb22fbbb3be74863f097e000d0be51915d0fe5d /engines/supernova/rooms.h
parent21899d8716475c08aa591c087b58c63bb00927ed (diff)
downloadscummvm-rg350-7bf803f6e677b9b8bf29caf55f9c211cfe175c1b.tar.gz
scummvm-rg350-7bf803f6e677b9b8bf29caf55f9c211cfe175c1b.tar.bz2
scummvm-rg350-7bf803f6e677b9b8bf29caf55f9c211cfe175c1b.zip
SUPERNOVA: Cleanup dialog code
The main change consists in using a separate byte array for the sentence removal flags, move some functions from the GameManager to the Room class, and add a few additional functions to manipulate this new array. This allows to clarify some code related to dialogs. This change also allows to switch the _shown array back to a bool array.
Diffstat (limited to 'engines/supernova/rooms.h')
-rw-r--r--engines/supernova/rooms.h29
1 files changed, 23 insertions, 6 deletions
diff --git a/engines/supernova/rooms.h b/engines/supernova/rooms.h
index 47249f0bb6..b9dbfd19fb 100644
--- a/engines/supernova/rooms.h
+++ b/engines/supernova/rooms.h
@@ -38,6 +38,8 @@ public:
_seen = false;
for (int i = 0; i < kMaxSection; ++i)
_shown[i] = kShownFalse;
+ for (int i = 0; i < kMaxDialog; ++i)
+ _sentenceRemoved[i] = 0;
}
bool hasSeen() {
@@ -64,18 +66,32 @@ public:
void removeSentence(int sentence, int number) {
if (number > 0)
- _shown[kMaxSection - number] |= (1 << sentence);
+ _sentenceRemoved[number - 1] |= (1 << sentence);
}
void addSentence(int sentence, int number) {
if (number > 0)
- _shown[kMaxSection - number] &= ~(1 << sentence);
+ _sentenceRemoved[number - 1] &= ~(1 << sentence);
}
- bool sentencedRemoved(int sentence, int number) {
+ void addAllSentences(int number) {
+ if (number > 0)
+ _sentenceRemoved[number - 1] = 0;
+ }
+
+ bool sentenceRemoved(int sentence, int number) {
+ if (number <= 0)
+ return false;
+ return (_sentenceRemoved[number - 1] & (1 << sentence));
+ }
+
+ bool allSentencesRemoved(int maxSentence, int number) {
if (number <= 0)
return false;
- return (_shown[kMaxSection - number] & (1 << sentence));
+ for (int i = 0, flag = 1 ; i < maxSentence ; ++i, flag <<= 1)
+ if (!(_sentenceRemoved[number - 1] & flag))
+ return false;
+ return true;
}
Object *getObject(uint index) {
@@ -89,11 +105,12 @@ public:
return false;
}
virtual bool serialize(Common::WriteStream *out);
- virtual bool deserialize(Common::ReadStream *in);
+ virtual bool deserialize(Common::ReadStream *in, int version);
protected:
int _fileNumber;
- byte _shown[kMaxSection];
+ bool _shown[kMaxSection];
+ byte _sentenceRemoved[kMaxDialog];
Object _objectState[kMaxObject];
RoomID _id;
SupernovaEngine *_vm;