diff options
Diffstat (limited to 'engines/lastexpress/entities/coudert.cpp')
| -rw-r--r-- | engines/lastexpress/entities/coudert.cpp | 100 | 
1 files changed, 99 insertions, 1 deletions
| diff --git a/engines/lastexpress/entities/coudert.cpp b/engines/lastexpress/entities/coudert.cpp index 6093110c6c..d585205eb0 100644 --- a/engines/lastexpress/entities/coudert.cpp +++ b/engines/lastexpress/entities/coudert.cpp @@ -3124,7 +3124,105 @@ IMPLEMENT_FUNCTION(50, Coudert, function50)  //////////////////////////////////////////////////////////////////////////  IMPLEMENT_FUNCTION(51, Coudert, function51) -	error("Coudert: callback function 51 not implemented!"); +	switch (savepoint.action) { +	default: +		break; + +	case kActionNone: +		if (getState()->time > kTime2133000 && !getProgress().field_40) { +			getEntities()->exitCompartment(kEntityCoudert, kObjectCompartmentB); +			getObjects()->update(kObjectCompartmentA, kEntityPlayer, kObjectLocationNone, kCursorHandKnock, kCursorHand); +			getObjects()->update(kObjectCompartmentB, kEntityPlayer, kObjectLocation1, kCursorHandKnock, kCursorHand); + +			setCallback(1); +			setup_updateEntity(kCarRedSleeping, kPosition_2000); +		} +		break; + +	case kActionOpenDoor: +		if (savepoint.param.intValue == kObjectCompartmentB) +			getData()->entityPosition = kPosition_7500; + +		getSound()->playSound(kEntityPlayer, "LIB014"); +		getAction()->playAnimation(kEventCoudertGoingOutOfVassiliCompartment); +		getEntities()->updateEntity(kEntityCoudert, kCarRedSleeping, kPosition_2000); +		getScenes()->loadSceneFromObject(savepoint.param.intValue == kObjectCompartmentB ? kObjectCompartmentB : kObjectCompartmentA); +		getEntities()->exitCompartment(kEntityCoudert, kObjectCompartmentB, true); +		getObjects()->update(kObjectCompartmentA, kEntityPlayer, kObjectLocationNone, kCursorHandKnock, kCursorHand); +		getObjects()->update(kObjectCompartmentB, kEntityPlayer, kObjectLocation1, kCursorHandKnock, kCursorHand); + +		setCallback(3); +		setup_updateEntity(kCarRedSleeping, kPosition_2000); +		break; + +	case kActionDefault: +		getData()->car = kCarRedSleeping; +		getData()->entityPosition = kPosition_7500; +		getData()->location = kLocationOutsideCompartment; + +		getSavePoints()->push(kEntityCoudert, kEntityMax, kActionMaxFreeFromCage); + +		if (ENTITY_PARAM(0, 5)) { +			ENTITY_PARAM(0, 5) = 0; + +			getSavePoints()->push(kEntityCoudert, kEntityMertens, kAction155853632); +			getSavePoints()->push(kEntityCoudert, kEntityMertens, kActionEndSound); +		} + +		if (ENTITY_PARAM(0, 3)) { +			ENTITY_PARAM(0, 3) = 0; + +			getSavePoints()->push(kEntityCoudert, kEntityVerges, kAction155853632); +			getSavePoints()->push(kEntityCoudert, kEntityVerges, kActionEndSound); +		} + +		getEntities()->drawSequenceLeft(kEntityCoudert, "627Wb"); +		getEntities()->enterCompartment(kEntityCoudert, kObjectCompartmentB, true); +		getSavePoints()->push(kEntityCoudert, kEntityTatiana, kAction154071333); +		break; + +	case kActionCallback: +		switch (getCallback()) { +		default: +			break; + +		case 1: +			setCallback(2); +			setup_function18(); +			break; + +		case 2: +		case 4: +		case 6: +			setup_function45(); +			break; + +		case 3: +			setCallback(4); +			setup_function18(); +			break; + +		case 5: +			setCallback(5); +			setup_function18(); +			break; +		} +		break; + +	case kAction168316032: +		getObjects()->update(kObjectCompartmentA, kEntityCoudert, kObjectLocationNone, kCursorNormal, kCursorHand); +		getObjects()->update(kObjectCompartmentB, kEntityCoudert, kObjectLocation1, kCursorNormal, kCursorHand); +		break; + +	case kAction235061888: +		getEntities()->exitCompartment(kEntityCoudert, kObjectCompartmentB, true); +		getObjects()->update(kObjectCompartmentA, kEntityPlayer, kObjectLocationNone, kCursorHandKnock, kCursorHand); +		getObjects()->update(kObjectCompartmentB, kEntityPlayer, kObjectLocation1, kCursorHandKnock, kCursorHand); + +		setCallback(5); +		setup_updateEntity(kCarRedSleeping, kPosition_2000); +		break; +	}  }  ////////////////////////////////////////////////////////////////////////// | 
