diff options
| -rw-r--r-- | engines/lastexpress/entities/mahmud.cpp | 10 | ||||
| -rw-r--r-- | engines/lastexpress/entities/mertens.cpp | 20 | ||||
| -rw-r--r-- | engines/lastexpress/entities/milos.cpp | 14 | ||||
| -rw-r--r-- | engines/lastexpress/entities/mmeboutarel.cpp | 2 | ||||
| -rw-r--r-- | engines/lastexpress/entities/rebecca.cpp | 6 | ||||
| -rw-r--r-- | engines/lastexpress/entities/salko.cpp | 2 | ||||
| -rw-r--r-- | engines/lastexpress/entities/tatiana.cpp | 8 | ||||
| -rw-r--r-- | engines/lastexpress/entities/vassili.cpp | 14 | ||||
| -rw-r--r-- | engines/lastexpress/entities/verges.cpp | 3 | ||||
| -rw-r--r-- | engines/lastexpress/entities/vesna.cpp | 3 | ||||
| -rw-r--r-- | engines/lastexpress/entities/waiter2.cpp | 2 | 
11 files changed, 49 insertions, 35 deletions
diff --git a/engines/lastexpress/entities/mahmud.cpp b/engines/lastexpress/entities/mahmud.cpp index 9f43c695ea..1468bce5a7 100644 --- a/engines/lastexpress/entities/mahmud.cpp +++ b/engines/lastexpress/entities/mahmud.cpp @@ -664,15 +664,15 @@ IMPLEMENT_FUNCTION(14, Mahmud, chaptersHandler)  			break;  		case 5: { -			CursorStyle cursor = kCursorHand; -			CursorStyle cursor2 = kCursorHandKnock; +			CursorStyle cursor = kCursorHandKnock; +			CursorStyle cursor2 = kCursorHand;  			if (getProgress().jacket == kJacketBlood  			 || getEvent(kEventMahmudWrongDoor)  			 || getEvent(kEventMahmudWrongDoorOriginalJacket)  			 || getEvent(kEventMahmudWrongDoorDay)) { -				cursor = kCursorNormal; -				cursor2 = kCursorTalk; +				cursor = kCursorTalk; +				cursor2 = kCursorNormal;  			}  			getObjects()->update(kObjectCompartment4, kEntityMahmud, kObjectLocation1, cursor, cursor2); @@ -825,7 +825,7 @@ IMPLEMENT_FUNCTION(19, Mahmud, chapter4)  		getData()->location = kLocationInsideCompartment;  		getData()->car = kCarGreenSleeping;  		getData()->clothes = kClothesDefault; -		getData()->inventoryItem = kItemNone; +		getData()->inventoryItem = kItemNone; // not in the original game, but it does no harm, I suppose?  		break;  	} diff --git a/engines/lastexpress/entities/mertens.cpp b/engines/lastexpress/entities/mertens.cpp index 573a35013e..cb2311fddd 100644 --- a/engines/lastexpress/entities/mertens.cpp +++ b/engines/lastexpress/entities/mertens.cpp @@ -400,6 +400,10 @@ IMPLEMENT_FUNCTION_II(10, Mertens, updateEntity, CarIndex, EntityPosition)  			if (params->param1 != 3 || (params->param2 != kPosition_8200 && params->param2 != kPosition_9510)) {  				loadSceneFromPosition(); +				if (getEntities()->updateEntity(kEntityMertens, (CarIndex)params->param1, (EntityPosition)params->param2)) { +					getData()->inventoryItem = kItemNone; +					callbackAction(); +				}  				break;  			} @@ -432,6 +436,10 @@ IMPLEMENT_FUNCTION_II(10, Mertens, updateEntity, CarIndex, EntityPosition)  			}  			loadSceneFromPosition(); +			if (getEntities()->updateEntity(kEntityMertens, (CarIndex)params->param1, (EntityPosition)params->param2)) { +				getData()->inventoryItem = kItemNone; +				callbackAction(); +			}  			break;  		case 4: @@ -439,6 +447,10 @@ IMPLEMENT_FUNCTION_II(10, Mertens, updateEntity, CarIndex, EntityPosition)  			ENTITY_PARAM(2, 4) = 0;  			loadSceneFromPosition(); +			if (getEntities()->updateEntity(kEntityMertens, (CarIndex)params->param1, (EntityPosition)params->param2)) { +				getData()->inventoryItem = kItemNone; +				callbackAction(); +			}  			break;  		case 5: @@ -501,7 +513,6 @@ IMPLEMENT_FUNCTION_I(12, Mertens, bonsoir, EntityIndex)  				getSound()->playSound(kEntityMertens, "CON1112F");  			} else {  				switch (rnd(3)) { -				default:  				case 0:  					getSound()->playSound(kEntityMertens, "CON1061");  					break; @@ -1964,6 +1975,7 @@ label_callback11:  		case 27:  			getAction()->playAnimation(kEventMertensBloodJacket);  			getLogic()->gameOver(kSavegameTypeIndex, 1, kSceneGameOverBloodJacket, true); +			// BUG: for [case 13] the original game continues executing code here  			break;  		case 14: @@ -3040,10 +3052,10 @@ IMPLEMENT_FUNCTION(42, Mertens, function42)  					}  					if (params->param4 >= getState()->time) -						break; +						goto label_callback_8;  				} -				ENTITY_PARAM(0, 4) = kTimeInvalid; +				params->param4 = kTimeInvalid;  				getData()->inventoryItem = kItemNone;  				setCallback(8); @@ -3240,7 +3252,7 @@ label_callback_5_6:  			goto label_callback_2_4;  		case 3: -			getAction()->playAnimation(getProgress().jacket == kJacketOriginal ? kEventMertensLastCarOriginalJacket : kEventMertensLastCar); +			getAction()->playAnimation(getProgress().jacket == kJacketGreen ? kEventMertensLastCar : kEventMertensLastCarOriginalJacket);  			getEntities()->drawSequenceRight(kEntityMertens, "601A");  			getScenes()->loadSceneFromPosition(kCarGreenSleeping, 6);  			getScenes()->loadSceneFromItemPosition(kItem7); diff --git a/engines/lastexpress/entities/milos.cpp b/engines/lastexpress/entities/milos.cpp index 8177f99ff6..d982b5585a 100644 --- a/engines/lastexpress/entities/milos.cpp +++ b/engines/lastexpress/entities/milos.cpp @@ -141,7 +141,6 @@ IMPLEMENT_FUNCTION_II(10, Milos, enterCompartmentDialog, CarIndex, EntityPositio  		if (getEvent(kEventMilosTylerCompartmentDefeat)) {  			// Robert saying: "Milos"  			switch(rnd(3)) { -			default:  			case 0:  				getSound()->playSound(kEntityPlayer, "CAT1014");  				break; @@ -443,7 +442,7 @@ IMPLEMENT_FUNCTION(14, Milos, function14)  					++params->param5;  					switch (params->param5) {  					default: -						getObjects()->update(kObjectCompartment1, kEntityMilos, getObjects()->get(kObjectCompartment1).status, params->param3 < 1 ? kCursorTalk : kCursorNormal, kCursorHand); +						getObjects()->update(kObjectCompartment1, kEntityMilos, getObjects()->get(kObjectCompartment1).status, params->param3 == 0 ? kCursorTalk : kCursorNormal, kCursorHand);  						CURRENT_PARAM(1, 2) = 0;  						break; @@ -467,7 +466,7 @@ IMPLEMENT_FUNCTION(14, Milos, function14)  						if (params->param7 < 3) {  							params->param5 = 1; -							getObjects()->update(kObjectCompartment1, kEntityMilos, getObjects()->get(kObjectCompartment1).status, params->param3 < 1 ? kCursorTalk : kCursorNormal, kCursorHand); +							getObjects()->update(kObjectCompartment1, kEntityMilos, getObjects()->get(kObjectCompartment1).status, params->param3 == 0 ? kCursorTalk : kCursorNormal, kCursorHand);  							CURRENT_PARAM(1, 2) = 0;  							break;  						} @@ -645,7 +644,7 @@ label_callback_12:  		case 7:  		case 9:  		case 11: -			getObjects()->update(kObjectCompartment1, kEntityMilos, getObjects()->get(kObjectCompartment1).status, params->param3 < 1 ? kCursorTalk : kCursorNormal, kCursorHand); +			getObjects()->update(kObjectCompartment1, kEntityMilos, getObjects()->get(kObjectCompartment1).status, params->param3 == 0 ? kCursorTalk : kCursorNormal, kCursorHand);  			CURRENT_PARAM(1, 2) = 0;  			break; @@ -1367,9 +1366,13 @@ IMPLEMENT_FUNCTION(25, Milos, function25)  		case 3:  			getObjects()->update(kObjectCompartmentG, kEntityMilos, kObjectLocation1, kCursorTalk, kCursorNormal); -			getObjects()->update(kObjectCompartmentG, kEntityMilos, kObjectLocation1, kCursorHandKnock, kCursorHand);  			params->param1 = 1; +			// BUG: the original game executes the last line of [case 4:] here too, resetting cursor once again. +			// We get here when Cath knocks or tries to enter the compartment G when Vesna is there, +			// after Vesna says VES1015A (in Serbian, supposedly a variant of "Who is it?"). +			// The action for next knock / attempt to enter is saying CAT1505/CAT1505A, +			// so the cursor should be kCursorTalk and not kCursorHandKnock as in the original game.  			break;  		case 4: @@ -1524,7 +1527,6 @@ IMPLEMENT_FUNCTION(29, Milos, chapter4Handler)  		getSound()->playSound(kEntityMilos, sound); \  		if (getEntities()->isDistanceBetweenEntities(kEntityMilos, kEntityPlayer, 2000)) \  			getProgress().field_94 = 1; \ -		break; \  	}  	switch (savepoint.action) { diff --git a/engines/lastexpress/entities/mmeboutarel.cpp b/engines/lastexpress/entities/mmeboutarel.cpp index 994a0ceda6..d9a7ea1db6 100644 --- a/engines/lastexpress/entities/mmeboutarel.cpp +++ b/engines/lastexpress/entities/mmeboutarel.cpp @@ -887,7 +887,7 @@ IMPLEMENT_FUNCTION(21, MmeBoutarel, chapter3Handler)  			if (getState()->time <= kTime2038500) {  				if (!getEntities()->isPlayerInCar(kCarRedSleeping)  				 || !params->param1 -				 || getSoundQueue()->isBuffered("FRA2012") +				 || getSoundQueue()->isBuffered("FRA2012") // the original game tests this sound twice. Maybe a bug?  				 || getSoundQueue()->isBuffered("FRA2010")  				 ||!params->param2)  					params->param2 = (uint)getState()->time; diff --git a/engines/lastexpress/entities/rebecca.cpp b/engines/lastexpress/entities/rebecca.cpp index acb58f7870..fec0891ce9 100644 --- a/engines/lastexpress/entities/rebecca.cpp +++ b/engines/lastexpress/entities/rebecca.cpp @@ -309,7 +309,7 @@ IMPLEMENT_FUNCTION_I(17, Rebecca, function17, bool)  			break;  		case 2: -			getEntities()->clearSequences(kEntitySophie); +			getEntities()->clearSequences(kEntityRebecca);  			break;  		case 3: @@ -1371,7 +1371,7 @@ IMPLEMENT_FUNCTION(36, Rebecca, function36)  				getSound()->playSound(kEntityRebecca, "Reb3007");  				setCallback(2); -				setup_updatePosition("118E", kCarRedSleeping, 52); +				setup_updatePosition("118E", kCarRestaurant, 52);  				break;  			}  		} @@ -1726,7 +1726,7 @@ label_callback_2:  		break;  	case kAction123712592: -		getEntities()->drawSequenceLeft(kEntityRebecca, "BLANK"); +		getEntities()->drawSequenceLeft(kEntityWaiter1, "BLANK");  		getSound()->playSound(kEntityRebecca, "Reb4003");  		setCallback(4); diff --git a/engines/lastexpress/entities/salko.cpp b/engines/lastexpress/entities/salko.cpp index f93d13c849..f1595d6d0f 100644 --- a/engines/lastexpress/entities/salko.cpp +++ b/engines/lastexpress/entities/salko.cpp @@ -181,7 +181,7 @@ IMPLEMENT_FUNCTION(10, Salko, chapter1Handler)  	case kActionCallback:  		if (getCallback() == 1) { -			getEntities()->clearSequences(kEntitySalko); +			getEntities()->drawSequenceLeft(kEntitySalko, "BLANK");  			setup_function8();  		}  		break; diff --git a/engines/lastexpress/entities/tatiana.cpp b/engines/lastexpress/entities/tatiana.cpp index 5dd61e3f46..31de491983 100644 --- a/engines/lastexpress/entities/tatiana.cpp +++ b/engines/lastexpress/entities/tatiana.cpp @@ -209,7 +209,7 @@ IMPLEMENT_FUNCTION(15, Tatiana, exitCompartment)  	case kActionDefault:  		setCallback(getProgress().chapter == kChapter1 ? 1 : 2); -		setup_enterExitCompartment2(getProgress().chapter == kChapter1 ? "603Bb" : "673Bb", kObjectCompartmentB); +		setup_enterExitCompartment(getProgress().chapter == kChapter1 ? "603Bb" : "673Bb", kObjectCompartmentB);  		break;  	case kActionCallback: @@ -615,8 +615,7 @@ IMPLEMENT_FUNCTION(22, Tatiana, getSomeAir)  		if (params->param1 == kTimeInvalid || getState()->time <= kTime1179000)  			goto label_update; -		if (Entity::updateParameterTime(kTime1233000, ((!getEvent(kEventTatianaAskMatchSpeakRussian) && !getEvent(kEventTatianaAskMatch)) || getEntities()->isInGreenCarEntrance(kEntityPlayer)), params->param1, 0)) { -			params->param1 = kTimeInvalid; +		if (!Entity::updateParameterTime(kTime1233000, ((!getEvent(kEventTatianaAskMatchSpeakRussian) && !getEvent(kEventTatianaAskMatch)) || getEntities()->isInGreenCarEntrance(kEntityPlayer)), params->param1, 0)) {  label_update:  			if (!getEvent(kEventTatianaAskMatchSpeakRussian) @@ -1036,6 +1035,7 @@ IMPLEMENT_FUNCTION(32, Tatiana, playChess)  		break;  	case  kActionEndSound: +		parameters->param2 = 0;  		++parameters->param3;  		switch (parameters->param3) { @@ -1200,7 +1200,7 @@ IMPLEMENT_FUNCTION(35, Tatiana, concert)  label_callback_1:  		if (getState()->time > kTime2133000) { -			if (getData()->car >= kCarRedSleeping || (getData()->car == kCarGreenSleeping && getData()->entityPosition > kPosition_5790)) +			if (getEntityData(kEntityAugust)->car >= kCarRedSleeping || (getEntityData(kEntityAugust)->car == kCarGreenSleeping && getEntityData(kEntityAugust)->entityPosition > kPosition_5790))  				setup_leaveConcert();  		}  		break; diff --git a/engines/lastexpress/entities/vassili.cpp b/engines/lastexpress/entities/vassili.cpp index 1c25ce2cb0..cff6ec472c 100644 --- a/engines/lastexpress/entities/vassili.cpp +++ b/engines/lastexpress/entities/vassili.cpp @@ -108,7 +108,7 @@ IMPLEMENT_FUNCTION(5, Vassili, chapter1Handler)  			if (!Entity::updateParameterCheck(params->param3, getState()->time, 450))  				break; -			if (!params->param2 && getObjects()->get(kObjectCompartmentA).status == kObjectLocation1) { +			if (!params->param2 && getObjects()->get(kObjectCompartmentA).model == kObjectLocation1) {  				params->param2 = 1;  				getEntities()->drawSequenceLeft(kEntityVassili, "303A");  				getObjects()->update(kObjectCompartmentA, kEntityPlayer, kObjectLocationNone, kCursorHandKnock, kCursorHand); @@ -313,19 +313,19 @@ IMPLEMENT_FUNCTION(10, Vassili, seizure)  		// Check that we have removed the body from the train and changed jacket  		if (!getProgress().eventCorpseMovedFromFloor) {  			getAction()->playAnimation(kEventMertensCorpseFloor); -			getLogic()->gameOver(kSavegameTypeIndex, 0, kSceneNone, false); +			getLogic()->gameOver(kSavegameTypeIndex, 0, kSceneNone, true);  			break;  		}  		if (!getProgress().eventCorpseThrown) {  			getAction()->playAnimation(kEventMertensCorpseBed); -			getLogic()->gameOver(kSavegameTypeIndex, 0, kSceneNone, false); +			getLogic()->gameOver(kSavegameTypeIndex, 0, kSceneNone, true);  			break;  		}  		if (getProgress().jacket == kJacketBlood) {  			getAction()->playAnimation(kEventMertensBloodJacket); -			getLogic()->gameOver(kSavegameTypeIndex, 0, kSceneNone, false); +			getLogic()->gameOver(kSavegameTypeIndex, 0, kSceneNone, true);  			break;  		} @@ -410,7 +410,7 @@ IMPLEMENT_FUNCTION(13, Vassili, sleeping)  		break;  	case kActionDefault: -		params->param5 = 5 * (3 * rnd(25) + 15); +		params->param1 = 5 * (3 * rnd(25) + 15);  		getEntities()->drawSequenceLeft(kEntityVassili, "303A");  		break; @@ -475,7 +475,7 @@ IMPLEMENT_FUNCTION(15, Vassili, stealEgg)  		break;  	case kActionDefault: -		params->param5 = 5 * (3 * rnd(25) + 15); +		params->param1 = 5 * (3 * rnd(25) + 15);  		getEntities()->drawSequenceLeft(kEntityVassili, "303A");  		break; @@ -555,7 +555,7 @@ IMPLEMENT_FUNCTION(17, Vassili, chapter4Handler)  		break;  	case kActionDefault: -		params->param5 = 5 * (3 * rnd(25) + 15); +		params->param1 = 5 * (3 * rnd(25) + 15);  		getEntities()->drawSequenceLeft(kEntityVassili, "303A");  		break; diff --git a/engines/lastexpress/entities/verges.cpp b/engines/lastexpress/entities/verges.cpp index c3e56d98c1..7811aa880f 100644 --- a/engines/lastexpress/entities/verges.cpp +++ b/engines/lastexpress/entities/verges.cpp @@ -1083,6 +1083,7 @@ IMPLEMENT_FUNCTION(28, Verges, chapter2Handler)  		if (getEntities()->isInBaggageCarEntrance(kEntityPlayer)) {  			setCallback(1);  			setup_baggageCar(false); +			break;  		}  label_callback_1: @@ -1708,7 +1709,7 @@ IMPLEMENT_FUNCTION(38, Verges, resetState)  		getData()->entityPosition = kPosition_6469;  		getData()->location = kLocationOutsideCompartment; -		getData()->car = kCarGreenSleeping; +		getData()->car = kCarRedSleeping;  		break;  	case kActionCallback: diff --git a/engines/lastexpress/entities/vesna.cpp b/engines/lastexpress/entities/vesna.cpp index 7ac53ce6e7..af7adfa327 100644 --- a/engines/lastexpress/entities/vesna.cpp +++ b/engines/lastexpress/entities/vesna.cpp @@ -1049,8 +1049,6 @@ IMPLEMENT_FUNCTION(29, Vesna, guarding)  	case kActionOpenDoor:  		setCallback(1); - -		getData()->currentCall++;  		setup_savegame(kSavegameTypeEvent, kEventCathVesnaRestaurantKilled);  		break; @@ -1118,6 +1116,7 @@ IMPLEMENT_FUNCTION(30, Vesna, climbing)  				getLogic()->gameOver(kSavegameTypeIndex, 0, kSceneNone, params->param2 == Fight::kFightEndLost);  			} else {  				getSound()->playSound(kEntityPlayer, "TUNNEL"); +				// TODO: fade to black screen  				getState()->time = (TimeValue)(getState()->time + 1800); diff --git a/engines/lastexpress/entities/waiter2.cpp b/engines/lastexpress/entities/waiter2.cpp index 2be7b4e7c6..f009551498 100644 --- a/engines/lastexpress/entities/waiter2.cpp +++ b/engines/lastexpress/entities/waiter2.cpp @@ -131,7 +131,7 @@ IMPLEMENT_FUNCTION(7, Waiter2, monsieurServeUs)  		case 2:  			getSavePoints()->push(kEntityWaiter2, kEntityBoutarel, kAction122288808); -			setCallback(2); +			setCallback(3);  			setup_draw("926");  			break;  | 
