[Scummvm-cvs-logs] SF.net SVN: scummvm:[55416] scummvm/trunk/engines/mohawk
fuzzie at users.sourceforge.net
fuzzie at users.sourceforge.net
Sat Jan 22 12:37:19 CET 2011
Revision: 55416
http://scummvm.svn.sourceforge.net/scummvm/?rev=55416&view=rev
Author: fuzzie
Date: 2011-01-22 11:37:19 +0000 (Sat, 22 Jan 2011)
Log Message:
-----------
MOHAWK: Finish hard-coded logic for CSTime case 1.
Modified Paths:
--------------
scummvm/trunk/engines/mohawk/cstime_cases.cpp
scummvm/trunk/engines/mohawk/cstime_cases.h
Modified: scummvm/trunk/engines/mohawk/cstime_cases.cpp
===================================================================
--- scummvm/trunk/engines/mohawk/cstime_cases.cpp 2011-01-22 11:37:01 UTC (rev 55415)
+++ scummvm/trunk/engines/mohawk/cstime_cases.cpp 2011-01-22 11:37:19 UTC (rev 55416)
@@ -149,13 +149,128 @@
break;
case 2:
- // FIXME: Leaving the mummy-preparing room?
- error("cond event 2");
+ // Leaving the dark tomb.
+ if (!_vm->getInterface()->getCarmenNote()->havePiece(1)) {
+ // Should probably get that note.
+ _vm->insertEventAtFront(CSTimeEvent(kCSTimeEventCharStartFlapping, 0, 16356));
+ } else {
+ bool doAfter = true;
+ if (_vm->_haveInvItem[1]) {
+ // Still have the unlit torch.
+ _vm->insertEventAtFront(CSTimeEvent(kCSTimeEventCharStartFlapping, 1, 14553));
+ _vm->insertEventAtFront(CSTimeEvent(kCSTimeEventSetInsertBefore, 0, 0xffff));
+ _vm->insertEventAtFront(CSTimeEvent(kCSTimeEventCharStartFlapping, getCurrScene()->getHelperId(), 14356));
+ } else if (_vm->_caseVariable[4]) {
+ // Let's start the mummy-making again!
+ _vm->_caseVariable[4] = 0;
+ _vm->insertEventAtFront(CSTimeEvent(kCSTimeEventCharStartFlapping, 1, 14565));
+ _vm->insertEventAtFront(CSTimeEvent(kCSTimeEventSetInsertBefore, 0, 0xffff));
+ } else if (_vm->_caseVariable[2] && !_vm->_caseVariable[6]) {
+ // One-time remark after we saw the hieroglyphs.
+ _vm->_caseVariable[6] = 1;
+ _vm->insertEventAtFront(CSTimeEvent(kCSTimeEventCharStartFlapping, getCurrScene()->getHelperId(), 14355));
+ _vm->insertEventAtFront(CSTimeEvent(kCSTimeEventCharStartFlapping, 1, 14563));
+ _vm->insertEventAtFront(CSTimeEvent(kCSTimeEventSetInsertBefore, 0, 0xffff));
+ } else
+ doAfter = false;
+
+ if (doAfter) {
+ _vm->insertEventAtFront(CSTimeEvent(kCSTimeEventInitScene, 0xffff, 0xffff));
+ _vm->insertEventAtFront(CSTimeEvent(kCSTimeEventCharSetupRestPos, 1, 0xffff));
+ _vm->insertEventAtFront(CSTimeEvent(kCSTimeEventSetInsertBefore, 0, 0xffff));
+ }
+
+ // Move back to the main room.
+ _vm->insertEventAtFront(CSTimeEvent(kCSTimeEventNewScene, 0xffff, 3));
+ }
break;
case 3:
- // FIXME: Body sequence stuff.
- error("cond event 3");
+ // Body sequence logic.
+ if (!_vm->_caseVariable[2]) {
+ // We haven't seen the hieroglyphs yet. No guessing!
+ _vm->insertEventAtFront(CSTimeEvent(kCSTimeEventCharStartFlapping, getCurrScene()->getHelperId(), 14354));
+ break;
+ }
+
+ switch (event.param1) {
+ case 1:
+ // Second part.
+ if (_vm->_caseVariable[3] == 1) {
+ _vm->_caseVariable[3] = 2;
+ // Yes, that was the right thing.
+ _vm->insertEventAtFront(CSTimeEvent(kCSTimeEventCharStartFlapping, getCurrScene()->getHelperId(), 14361));
+ _vm->insertEventAtFront(CSTimeEvent(kCSTimeEventCharStartFlapping, 1, 14555));
+ _vm->insertEventAtFront(CSTimeEvent(kCSTimeEventSetInsertBefore, 0, 0xffff));
+ // Update the features.
+ _vm->insertEventAtFront(CSTimeEvent(kCSTimeEventAddFeature, 0xffff, 8));
+ _vm->insertEventAtFront(CSTimeEvent(kCSTimeEventAddFeature, 0xffff, event.param1));
+ _vm->insertEventAtFront(CSTimeEvent(kCSTimeEventCharPlayNIS, 2, 1));
+ _vm->insertEventAtFront(CSTimeEvent(kCSTimeEventDisableFeature, 2, 6));
+ } else if (_vm->_caseVariable[3] == 2) {
+ // We've already done that part!
+ _vm->insertEventAtFront(CSTimeEvent(kCSTimeEventCharStartFlapping, getCurrScene()->getHelperId(), 14357));
+ _vm->insertEventAtFront(CSTimeEvent(kCSTimeEventAddFeature, 0xffff, event.param1));
+ } else {
+ incorrectBodySequence(4, 14559, event.param1);
+ }
+ break;
+
+ case 2:
+ // Third/final part.
+ if (_vm->_caseVariable[3] == 2) {
+ _vm->_caseVariable[1] = 1;
+ // Move to the final room (we can't get here without having all the notes so far).
+ _vm->insertEventAtFront(CSTimeEvent(kCSTimeEventNewScene, 0xffff, 5));
+ // Yes, that was the right thing. We'll move onward now.
+ _vm->insertEventAtFront(CSTimeEvent(kCSTimeEventCharStartFlapping, 1, 14558));
+ _vm->insertEventAtFront(CSTimeEvent(kCSTimeEventSetInsertBefore, 0, 0xffff));
+ _vm->insertEventAtFront(CSTimeEvent(kCSTimeEventCharStartFlapping, 1, 14556));
+ _vm->insertEventAtFront(CSTimeEvent(kCSTimeEventSetInsertBefore, 0, 0xffff));
+ // Update the features.
+ _vm->insertEventAtFront(CSTimeEvent(kCSTimeEventAddFeature, 0xffff, 9));
+ _vm->insertEventAtFront(CSTimeEvent(kCSTimeEventAddFeature, 0xffff, event.param1));
+ } else {
+ incorrectBodySequence(9, 14560, event.param1);
+ }
+ break;
+
+ case 3:
+ // First part.
+ if (_vm->_caseVariable[3]) {
+ // We've already done that part!
+ _vm->insertEventAtFront(CSTimeEvent(kCSTimeEventCharStartFlapping, getCurrScene()->getHelperId(), 14357));
+ _vm->insertEventAtFront(CSTimeEvent(kCSTimeEventAddFeature, 0xffff, event.param1));
+ } else {
+ _vm->_caseVariable[3] = 1;
+ // Yes, that was the right thing.
+ _vm->insertEventAtFront(CSTimeEvent(kCSTimeEventCharStartFlapping, getCurrScene()->getHelperId(), 14360));
+ _vm->insertEventAtFront(CSTimeEvent(kCSTimeEventCharStartFlapping, 1, 14554));
+ _vm->insertEventAtFront(CSTimeEvent(kCSTimeEventSetInsertBefore, 0, 0xffff));
+ // Update the features.
+ _vm->insertEventAtFront(CSTimeEvent(kCSTimeEventAddFeature, 0xffff, event.param1));
+ _vm->insertEventAtFront(CSTimeEvent(kCSTimeEventAddFeature, 0xffff, 7));
+ _vm->insertEventAtFront(CSTimeEvent(kCSTimeEventCharPlayNIS, 2, 0));
+ _vm->insertEventAtFront(CSTimeEvent(kCSTimeEventDisableFeature, 2, 6));
+ }
+ break;
+
+ case 4:
+ if (_vm->_caseVariable[3] == 2)
+ incorrectBodySequence(5, 14561, event.param1);
+ else
+ incorrectBodySequence(2, 14561, event.param1);
+ break;
+
+ case 5:
+ if (_vm->_caseVariable[3] == 2)
+ incorrectBodySequence(6, 14562, event.param1);
+ else
+ incorrectBodySequence(3, 14562, event.param1);
+ break;
+ }
+
+ _vm->insertEventAtFront(CSTimeEvent(kCSTimeEventDisableFeature, 0xffff, event.param1));
break;
case 4:
@@ -194,7 +309,7 @@
case 5:
// We're ready to shove off!
- _vm->addEvent(CSTimeEvent(kCSTimeEventCharStartFlapping, getCurrScene()->getHelperId(), 10356));
+ _vm->insertEventAtFront(CSTimeEvent(kCSTimeEventCharStartFlapping, getCurrScene()->getHelperId(), 10356));
break;
case 6:
@@ -238,4 +353,64 @@
}
}
+void CSTimeCase1::incorrectBodySequence(uint16 stage, uint16 speech, uint16 feature) {
+ // (This adds events backwards, so read from the bottom up.)
+
+ // You did it wrong! Set the case variable for leaving the dark tomb, and get sent there.
+ _vm->_caseVariable[4] = 1;
+ _vm->insertEventAtFront(CSTimeEvent(kCSTimeEventNewScene, 0xffff, 4));
+
+ CSTimeEvent event;
+ event.type = kCSTimeEventCharStartFlapping;
+ event.param1 = getCurrScene()->getHelperId();
+ if (!_vm->_caseVariable[5]) {
+ // The first time, you get a nice "let's have another look" suggestion.
+ event.param2 = 14353;
+ _vm->_caseVariable[5] = 1;
+ } else if (_vm->_rnd->getRandomBit()) {
+ // Randomly repeat that suggestion...
+ event.param2 = 14353;
+ } else {
+ // Or else something a little grumpier.
+ event.param2 = 14358 + _vm->_rnd->getRandomBit();
+ }
+ _vm->insertEventAtFront(event);
+
+ // "What a mess!"
+ _vm->insertEventAtFront(CSTimeEvent(kCSTimeEventCharStartFlapping, 1, 14557));
+ _vm->insertEventAtFront(CSTimeEvent(kCSTimeEventSetInsertBefore, 0, 0xffff));
+ _vm->insertEventAtFront(CSTimeEvent(kCSTimeEventCharPlayNIS, 1, 1));
+ _vm->insertEventAtFront(CSTimeEvent(kCSTimeEventSetInsertBefore, 0, 0xffff));
+
+ // Enable the head priest(?!).
+ _vm->insertEventAtFront(CSTimeEvent(kCSTimeEventCharSetState, 1, 1));
+
+ // Explain what went wrong.
+ _vm->insertEventAtFront(CSTimeEvent(kCSTimeEventCharStartFlapping, 1, speech));
+ _vm->insertEventAtFront(CSTimeEvent(kCSTimeEventSetInsertBefore, 0, 0xffff));
+ _vm->insertEventAtFront(CSTimeEvent(kCSTimeEventCharPlayNIS, 1, 0));
+
+ // Reset the features, with an animation if necessary.
+ if (stage == 9) {
+ _vm->insertEventAtFront(CSTimeEvent(kCSTimeEventAddFeature, 0xffff, 9));
+ _vm->insertEventAtFront(CSTimeEvent(kCSTimeEventAddFeature, 0xffff, feature));
+ } else {
+ _vm->insertEventAtFront(CSTimeEvent(kCSTimeEventAddFeature, 0xffff, stage + 8));
+ _vm->insertEventAtFront(CSTimeEvent(kCSTimeEventAddFeature, 0xffff, feature));
+ _vm->insertEventAtFront(CSTimeEvent(kCSTimeEventCharPlayNIS, 2, 1));
+ event.type = kCSTimeEventDisableFeature;
+ event.param1 = 2;
+ if (_vm->_caseVariable[3] == 0)
+ event.param2 = 6;
+ else if (_vm->_caseVariable[3] == 1)
+ event.param2 = 7;
+ else
+ event.param2 = 8;
+ _vm->insertEventAtFront(event);
+ }
+
+ // And so, we're back to the beginning of the body sequence.
+ _vm->_caseVariable[3] = 0;
+}
+
} // End of namespace Mohawk
Modified: scummvm/trunk/engines/mohawk/cstime_cases.h
===================================================================
--- scummvm/trunk/engines/mohawk/cstime_cases.h 2011-01-22 11:37:01 UTC (rev 55415)
+++ scummvm/trunk/engines/mohawk/cstime_cases.h 2011-01-22 11:37:19 UTC (rev 55416)
@@ -40,6 +40,9 @@
bool checkObjectCondition(uint16 objectId);
void selectHelpStrings();
void handleConditionalEvent(const CSTimeEvent &event);
+
+protected:
+ void incorrectBodySequence(uint16 stage, uint16 speech, uint16 feature);
};
} // End of namespace Mohawk
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
More information about the Scummvm-git-logs
mailing list