[Scummvm-cvs-logs] scummvm master -> d830c0edc9e53b5a3274535139179c2ef029a5d5

Littleboy littleboy22 at gmail.com
Tue Jul 17 05:52:17 CEST 2012


This automated email contains information about 14 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
43d3b2f378 LASTEXPRESS: Remove strange casts
9e64e62c08 LASTEXPRESS: Comment unused variable
876a8f9377 LASTEXPRESS: Replace COMPARTMENT_TO and COMPARTMENT_FROM_TO macros
96d0aedba9 LASTEXPRESS: Replace SAVEGAME_BLOOD_JACKET macro by function
d4f7c02323 LASTEXPRESS: Replace PLAY_STEAM macro by function
132dd5b4bc LASTEXPRESS: Replace SYNC_STRING macro by function
e517c1199a LASTEXPRESS: Move LOW_BYTE macro to helpers.h
3d1b7b2d96 LASTEXPRESS: Merge the two savegameBloodJacket functions into the base Entity class
2b116592cb LASTEXPRESS: Remove LOADSCENE_FROM_POSITION macro
04a181a787 LASTEXPRESS: Replace 2 macros in Sophie entity implementation
3cf7e8ccf3 LASTEXPRESS: Replace INCREMENT_DIRECTION_COUNTER macro
be94a24fd2 LASTEXPRESS: Replace INVERT_Y macro
0181a464eb LASTEXPRESS: Use filter 16 as default filter for NIS animations
d830c0edc9 LASTEXPRESS: Replace TIME_CHECK_SAVEPOINT and TIME_CHECK_OBJECT macros


Commit: 43d3b2f378220278f508bfcea89d1aea6decaf6e
    https://github.com/scummvm/scummvm/commit/43d3b2f378220278f508bfcea89d1aea6decaf6e
Author: Littleboy (littleboy at scummvm.org)
Date: 2012-07-16T20:51:23-07:00

Commit Message:
LASTEXPRESS: Remove strange casts

Changed paths:
    engines/lastexpress/data/font.cpp
    engines/lastexpress/game/inventory.cpp



diff --git a/engines/lastexpress/data/font.cpp b/engines/lastexpress/data/font.cpp
index 79cf64e..8ac1afc 100644
--- a/engines/lastexpress/data/font.cpp
+++ b/engines/lastexpress/data/font.cpp
@@ -149,7 +149,7 @@ uint8 Font::getCharWidth(uint16 c) const{
 uint16 Font::getStringWidth(Common::String str) const {
 	uint16 width = 0;
 	for (uint i = 0; i < str.size(); i++)
-		width += getCharWidth((unsigned) (int)str[i]);
+		width += getCharWidth((unsigned char)str[i]);
 
 	return width;
 }
@@ -185,8 +185,8 @@ void Font::drawChar(Graphics::Surface *surface, int16 x, int16 y, uint16 c) {
 Common::Rect Font::drawString(Graphics::Surface *surface, int16 x, int16 y, Common::String str) {
 	int16 currentX = x;
 	for (uint i = 0; i < str.size(); i++) {
-		drawChar(surface, currentX, y, (unsigned) (int)str[i]);
-		currentX += getCharWidth((unsigned) (int)str[i]);
+		drawChar(surface, currentX, y, (unsigned char)str[i]);
+		currentX += getCharWidth((unsigned char)str[i]);
 	}
 
 	return Common::Rect(x, y, x + currentX, y + (int16)_charHeight);
diff --git a/engines/lastexpress/game/inventory.cpp b/engines/lastexpress/game/inventory.cpp
index bb382ea..70536b7 100644
--- a/engines/lastexpress/game/inventory.cpp
+++ b/engines/lastexpress/game/inventory.cpp
@@ -259,7 +259,7 @@ void Inventory::handleMouseEvent(const Common::Event &ev) {
 
 		// Change item highlight on list
 		if (getFlags()->mouseLeftPressed) {
-			uint32 index = (unsigned) (int) ev.mouse.y / 40;
+			uint32 index = (uint16)ev.mouse.y / 40;
 
 			if (_highlightedItemIndex && _highlightedItemIndex != index)
 				drawHighlight(_highlightedItemIndex, true);


Commit: 9e64e62c08a9a170382bdeb394ad8ef39e0bb700
    https://github.com/scummvm/scummvm/commit/9e64e62c08a9a170382bdeb394ad8ef39e0bb700
Author: Littleboy (littleboy at scummvm.org)
Date: 2012-07-16T20:51:24-07:00

Commit Message:
LASTEXPRESS: Comment unused variable

Changed paths:
    engines/lastexpress/sound/queue.cpp
    engines/lastexpress/sound/queue.h



diff --git a/engines/lastexpress/sound/queue.cpp b/engines/lastexpress/sound/queue.cpp
index 5f3ab96..1fbb413 100644
--- a/engines/lastexpress/sound/queue.cpp
+++ b/engines/lastexpress/sound/queue.cpp
@@ -38,7 +38,7 @@ SoundQueue::SoundQueue(LastExpressEngine *engine) : _engine(engine) {
 
 	_subtitlesFlag = 0;
 	_currentSubtitle = NULL;
-	_soundCacheData = NULL;
+	//_soundCacheData = NULL;
 }
 
 SoundQueue::~SoundQueue() {
@@ -51,7 +51,7 @@ SoundQueue::~SoundQueue() {
 	_subtitles.clear();
 
 	_currentSubtitle = NULL;
-	SAFE_DELETE(_soundCacheData);
+	//SAFE_DELETE(_soundCacheData);
 
 	// Zero passed pointers
 	_engine = NULL;
diff --git a/engines/lastexpress/sound/queue.h b/engines/lastexpress/sound/queue.h
index 75fe068..e1f9be1 100644
--- a/engines/lastexpress/sound/queue.h
+++ b/engines/lastexpress/sound/queue.h
@@ -106,7 +106,7 @@ private:
 
 	// Entries
 	Common::List<SoundEntry *> _soundList;    ///< List of all sound entries
-	void *_soundCacheData;
+	//void *_soundCacheData;
 
 	// Subtitles
 	int _subtitlesFlag;


Commit: 876a8f9377b6c5533ca81c3c358e8b74014dc93f
    https://github.com/scummvm/scummvm/commit/876a8f9377b6c5533ca81c3c358e8b74014dc93f
Author: Littleboy (littleboy at scummvm.org)
Date: 2012-07-16T20:51:25-07:00

Commit Message:
LASTEXPRESS: Replace COMPARTMENT_TO and COMPARTMENT_FROM_TO macros

Changed paths:
    engines/lastexpress/entities/alouan.cpp
    engines/lastexpress/entities/entity.cpp
    engines/lastexpress/entities/entity.h
    engines/lastexpress/entities/entity_intern.h
    engines/lastexpress/entities/hadija.cpp



diff --git a/engines/lastexpress/entities/alouan.cpp b/engines/lastexpress/entities/alouan.cpp
index 3ae38dc..8e56ae4 100644
--- a/engines/lastexpress/entities/alouan.cpp
+++ b/engines/lastexpress/entities/alouan.cpp
@@ -86,22 +86,22 @@ IMPLEMENT_FUNCTION_END
 
 //////////////////////////////////////////////////////////////////////////
 IMPLEMENT_FUNCTION(6, Alouan, compartment6)
-	COMPARTMENT_TO(Alouan, kObjectCompartment6, kPosition_4070, "621Cf", "621Df");
+	Entity::goToCompartment(savepoint, kObjectCompartment6, kPosition_4070, "621Cf", "621Df", WRAP_ENTER_FUNCTION(Alouan, setup_enterExitCompartment));
 IMPLEMENT_FUNCTION_END
 
 //////////////////////////////////////////////////////////////////////////
 IMPLEMENT_FUNCTION(7, Alouan, compartment8)
-	COMPARTMENT_TO(Alouan, kObjectCompartment8, kPosition_2740, "621Ch", "621Dh");
+	Entity::goToCompartment(savepoint, kObjectCompartment8, kPosition_2740, "621Ch", "621Dh", WRAP_ENTER_FUNCTION(Alouan, setup_enterExitCompartment));
 IMPLEMENT_FUNCTION_END
 
 //////////////////////////////////////////////////////////////////////////
 IMPLEMENT_FUNCTION(8, Alouan, compartment6to8)
-	COMPARTMENT_FROM_TO(Alouan, kObjectCompartment6, kPosition_4070, "621Bf", kObjectCompartment8, kPosition_2740, "621Ah");
+	Entity::goToCompartmentFromCompartment(savepoint, kObjectCompartment6, kPosition_4070, "621Bf", kObjectCompartment8, kPosition_2740, "621Ah", WRAP_ENTER_FUNCTION(Alouan, setup_enterExitCompartment), WRAP_UPDATE_FUNCTION(Alouan, setup_updateEntity));
 IMPLEMENT_FUNCTION_END
 
 //////////////////////////////////////////////////////////////////////////
 IMPLEMENT_FUNCTION(9, Alouan, compartment8to6)
-	COMPARTMENT_FROM_TO(Alouan, kObjectCompartment8, kPosition_2740, "621Bh", kObjectCompartment6, kPosition_4070, "621Af");
+	Entity::goToCompartmentFromCompartment(savepoint, kObjectCompartment8, kPosition_2740, "621Bh", kObjectCompartment6, kPosition_4070, "621Af", WRAP_ENTER_FUNCTION(Alouan, setup_enterExitCompartment), WRAP_UPDATE_FUNCTION(Alouan, setup_updateEntity));
 IMPLEMENT_FUNCTION_END
 
 //////////////////////////////////////////////////////////////////////////
diff --git a/engines/lastexpress/entities/entity.cpp b/engines/lastexpress/entities/entity.cpp
index 7fdfd53..776b9f6 100644
--- a/engines/lastexpress/entities/entity.cpp
+++ b/engines/lastexpress/entities/entity.cpp
@@ -464,6 +464,74 @@ void Entity::enterExitCompartment(const SavePoint &savepoint, EntityPosition pos
 	}
 }
 
+void Entity::goToCompartment(const SavePoint &savepoint, ObjectIndex compartmentFrom, EntityPosition positionFrom, Common::String sequenceFrom, Common::String sequenceTo, Entity::EnterFunction *enterFunction) {
+	switch (savepoint.action) {
+	default:
+		break;
+
+	case kActionDefault:
+		getData()->entityPosition = positionFrom;
+		setCallback(1);
+		(*enterFunction)(sequenceFrom.c_str(), compartmentFrom);
+		break;
+
+	case kActionCallback:
+		switch (getCallback()) {
+		default:
+			break;
+
+		case 1:
+			setCallback(2);
+			(*enterFunction)(sequenceTo.c_str(), compartmentFrom);
+			break;
+
+		case 2:
+			getData()->entityPosition = positionFrom;
+			getEntities()->clearSequences(_entityIndex);
+			callbackAction();
+			break;
+		}
+		break;
+	}
+}
+
+void Entity::goToCompartmentFromCompartment(const SavePoint &savepoint, ObjectIndex compartmentFrom, EntityPosition positionFrom, Common::String sequenceFrom, ObjectIndex compartmentTo, EntityPosition positionTo, Common::String sequenceTo, Entity::EnterFunction *enterFunction, Entity::UpdateFunction *updateFunction) {
+	switch (savepoint.action) {
+	default:
+		break;
+
+	case kActionDefault:
+		getData()->entityPosition = positionFrom;
+		getData()->location = kLocationOutsideCompartment;
+		setCallback(1);
+		(*enterFunction)(sequenceFrom.c_str(), compartmentFrom);
+		break;
+
+	case kActionCallback:
+		switch (getCallback()) {
+		default:
+			break;
+
+		case 1:
+			setCallback(2);
+			(*updateFunction)(kCarGreenSleeping, positionTo);
+			break;
+
+		case 2:
+			setCallback(3);
+			(*enterFunction)(sequenceTo.c_str(), compartmentTo);
+			break;
+
+		case 3:
+			getData()->location = kLocationInsideCompartment;
+			getEntities()->clearSequences(_entityIndex);
+			callbackAction();
+			break;
+		}
+		break;
+	}
+}
+
 void Entity::updatePosition(const SavePoint &savepoint, bool handleExcuseMe) {
 	EXPOSE_PARAMS(EntityData::EntityParametersSIII)
 
diff --git a/engines/lastexpress/entities/entity.h b/engines/lastexpress/entities/entity.h
index 3fd2009..bb2b966 100644
--- a/engines/lastexpress/entities/entity.h
+++ b/engines/lastexpress/entities/entity.h
@@ -616,19 +616,19 @@ public:
 	EntityParameters  *getParameters(uint callback, byte index) const;
 	EntityParameters  *getCurrentParameters(byte index = 0) { return getParameters(_data.currentCall, index); }
 
-	int 			   getCallback(uint callback) const;
-	int				   getCurrentCallback() { return getCallback(_data.currentCall); }
-	void 			   setCallback(uint callback, byte index);
-	void 			   setCurrentCallback(uint index) { setCallback(_data.currentCall, index); }
+	int                getCallback(uint callback) const;
+	int                getCurrentCallback() { return getCallback(_data.currentCall); }
+	void               setCallback(uint callback, byte index);
+	void               setCurrentCallback(uint index) { setCallback(_data.currentCall, index); }
 
 	void               updateParameters(uint32 index) const;
 
 	// Serializable
-	void 			   saveLoadWithSerializer(Common::Serializer &ser);
+	void               saveLoadWithSerializer(Common::Serializer &ser);
 
 private:
 
-	EntityCallData 		 _data;
+	EntityCallData       _data;
 	EntityCallParameters _parameters[9];
 };
 
@@ -665,9 +665,15 @@ public:
 protected:
 	LastExpressEngine *_engine;
 
-	EntityIndex				  _entityIndex;
-	EntityData 				 *_data;
-	Common::Array<Callback *> _callbacks;
+	EntityIndex                _entityIndex;
+	EntityData                *_data;
+	Common::Array<Callback *>  _callbacks;
+
+	typedef Common::Functor2<const char *, ObjectIndex, void> EnterFunction;
+	typedef Common::Functor2<CarIndex, EntityPosition, void> UpdateFunction;
+
+	#define WRAP_ENTER_FUNCTION(className, method) new Common::Functor2Mem<const char *, ObjectIndex, void, className>(this, &className::method)
+	#define WRAP_UPDATE_FUNCTION(className, method) new Common::Functor2Mem<CarIndex, EntityPosition, void, className>(this, &className::method)
 
 	/**
 	 * Saves the game
@@ -782,6 +788,33 @@ protected:
 	void enterExitCompartment(const SavePoint &savepoint, EntityPosition position1 = kPositionNone, EntityPosition position2 = kPositionNone, CarIndex car = kCarNone, ObjectIndex compartment = kObjectNone, bool alternate = false, bool updateLocation = false);
 
 	/**
+	 * Go to compartment.
+	 *
+	 * @param	savepoint			 	The savepoint.
+	 * @param	compartmentFrom		 	The compartment from.
+	 * @param	positionFrom		 	The position from.
+	 * @param	sequenceFrom		 	The sequence from.
+	 * @param	sequenceTo			 	The sequence to.
+	 * @param	enterFunction			The enter/exit compartment function.
+	 */
+	void goToCompartment(const SavePoint &savepoint, ObjectIndex compartmentFrom, EntityPosition positionFrom, Common::String sequenceFrom, Common::String sequenceTo, EnterFunction *enterFunction);
+
+	/**
+	 * Go to compartment from compartment.
+	 *
+	 * @param	savepoint			  	The savepoint.
+	 * @param	compartmentFrom		  	The compartment from.
+	 * @param	positionFrom		  	The position from.
+	 * @param	sequenceFrom		  	The sequence from.
+	 * @param	compartmentTo		  	The compartment to.
+	 * @param	positionTo			  	The position to.
+	 * @param	sequenceTo			  	The sequence to.
+	 * @param	enterFunction			The enter/exit compartment function.
+	 * @param	enterFunction			The update entity function.
+	 */
+	void goToCompartmentFromCompartment(const SavePoint &savepoint, ObjectIndex compartmentFrom, EntityPosition positionFrom, Common::String sequenceFrom, ObjectIndex compartmentTo, EntityPosition positionTo, Common::String sequenceTo, Entity::EnterFunction *enterFunction, Entity::UpdateFunction *updateFunction);
+
+	/**
 	 * Updates the position
 	 *
 	 * @param savepoint       The savepoint
diff --git a/engines/lastexpress/entities/entity_intern.h b/engines/lastexpress/entities/entity_intern.h
index c21f2c1..0613b7b 100644
--- a/engines/lastexpress/entities/entity_intern.h
+++ b/engines/lastexpress/entities/entity_intern.h
@@ -451,66 +451,6 @@ void class::setup_##name() { \
 		if (!parameter) \
 			parameter = (uint)(type + value);
 
-//////////////////////////////////////////////////////////////////////////
-// Compartments
-//////////////////////////////////////////////////////////////////////////
-// Go from one compartment to another (or the same one if no optional args are passed
-#define COMPARTMENT_TO(class, compartmentFrom, positionFrom, sequenceFrom, sequenceTo) \
-	switch (savepoint.action) { \
-	default: \
-		break; \
-	case kActionDefault: \
-		getData()->entityPosition = positionFrom; \
-		setCallback(1); \
-		setup_enterExitCompartment(sequenceFrom, compartmentFrom); \
-		break; \
-	case kActionCallback: \
-		switch (getCallback()) { \
-		default: \
-			break; \
-		case 1: \
-			setCallback(2); \
-			setup_enterExitCompartment(sequenceTo, compartmentFrom); \
-			break; \
-		case 2: \
-			getData()->entityPosition = positionFrom; \
-			getEntities()->clearSequences(_entityIndex); \
-			callbackAction(); \
-		} \
-		break; \
-	}
-
-#define COMPARTMENT_FROM_TO(class, compartmentFrom, positionFrom, sequenceFrom, compartmentTo, positionTo, sequenceTo) \
-	switch (savepoint.action) { \
-	default: \
-		break; \
-	case kActionDefault: \
-		getData()->entityPosition = positionFrom; \
-		getData()->location = kLocationOutsideCompartment; \
-		setCallback(1); \
-		setup_enterExitCompartment(sequenceFrom, compartmentFrom); \
-		break; \
-	case kActionCallback: \
-		switch (getCallback()) { \
-		default: \
-			break; \
-		case 1: \
-			setCallback(2); \
-			setup_updateEntity(kCarGreenSleeping, positionTo); \
-			break; \
-		case 2: \
-			setCallback(3); \
-			setup_enterExitCompartment(sequenceTo, compartmentTo); \
-			break; \
-		case 3: \
-			getData()->location = kLocationInsideCompartment; \
-			getEntities()->clearSequences(_entityIndex); \
-			callbackAction(); \
-			break; \
-		} \
-		break; \
-	}
-
 } // End of namespace LastExpress
 
 #endif // LASTEXPRESS_ENTITY_INTERN_H
diff --git a/engines/lastexpress/entities/hadija.cpp b/engines/lastexpress/entities/hadija.cpp
index 09c8024..2dd239d 100644
--- a/engines/lastexpress/entities/hadija.cpp
+++ b/engines/lastexpress/entities/hadija.cpp
@@ -86,22 +86,22 @@ IMPLEMENT_FUNCTION_END
 
 //////////////////////////////////////////////////////////////////////////
 IMPLEMENT_FUNCTION(6, Hadija, compartment6)
-	COMPARTMENT_TO(Hadija, kObjectCompartment6, kPosition_4070, "619Cf", "619Df");
+	Entity::goToCompartment(savepoint, kObjectCompartment6, kPosition_4070, "619Cf", "619Df", WRAP_ENTER_FUNCTION(Hadija, setup_enterExitCompartment));
 IMPLEMENT_FUNCTION_END
 
 //////////////////////////////////////////////////////////////////////////
 IMPLEMENT_FUNCTION(7, Hadija, compartment8)
-	COMPARTMENT_TO(Hadija, kObjectCompartment8, kPosition_2740, "619Ch", "619Dh");
+	Entity::goToCompartment(savepoint, kObjectCompartment8, kPosition_2740, "619Ch", "619Dh", WRAP_ENTER_FUNCTION(Hadija, setup_enterExitCompartment));
 IMPLEMENT_FUNCTION_END
 
 //////////////////////////////////////////////////////////////////////////
 IMPLEMENT_FUNCTION(8, Hadija, compartment6to8)
-	COMPARTMENT_FROM_TO(Hadija, kObjectCompartment6, kPosition_4070, "619Bf", kObjectCompartment8, kPosition_2740, "619Ah");
+	Entity::goToCompartmentFromCompartment(savepoint, kObjectCompartment6, kPosition_4070, "619Bf", kObjectCompartment8, kPosition_2740, "619Ah", WRAP_ENTER_FUNCTION(Hadija, setup_enterExitCompartment), WRAP_UPDATE_FUNCTION(Hadija, setup_updateEntity));
 IMPLEMENT_FUNCTION_END
 
 //////////////////////////////////////////////////////////////////////////
 IMPLEMENT_FUNCTION(9, Hadija, compartment8to6)
-	COMPARTMENT_FROM_TO(Hadija, kObjectCompartment8, kPosition_2740, "619Bh", kObjectCompartment6, kPosition_4070, "619Af");
+	Entity::goToCompartmentFromCompartment(savepoint, kObjectCompartment8, kPosition_2740, "619Bh", kObjectCompartment6, kPosition_4070, "619Af", WRAP_ENTER_FUNCTION(Hadija, setup_enterExitCompartment), WRAP_UPDATE_FUNCTION(Hadija, setup_updateEntity));
 IMPLEMENT_FUNCTION_END
 
 //////////////////////////////////////////////////////////////////////////


Commit: 96d0aedba93e4ba2691a5ee1eba24a1f07539c96
    https://github.com/scummvm/scummvm/commit/96d0aedba93e4ba2691a5ee1eba24a1f07539c96
Author: Littleboy (littleboy at scummvm.org)
Date: 2012-07-16T20:51:25-07:00

Commit Message:
LASTEXPRESS: Replace SAVEGAME_BLOOD_JACKET macro by function

Changed paths:
    engines/lastexpress/entities/coudert.cpp
    engines/lastexpress/entities/coudert.h



diff --git a/engines/lastexpress/entities/coudert.cpp b/engines/lastexpress/entities/coudert.cpp
index dc7beb3..66733ac 100644
--- a/engines/lastexpress/entities/coudert.cpp
+++ b/engines/lastexpress/entities/coudert.cpp
@@ -37,15 +37,6 @@
 
 namespace LastExpress {
 
-#define SAVEGAME_BLOOD_JACKET() \
-	if (getProgress().jacket == kJacketBlood \
-		&& getEntities()->isDistanceBetweenEntities(kEntityCoudert, kEntityPlayer, 1000) \
-		&& !getEntities()->isInsideCompartments(kEntityPlayer) \
-		&& !getEntities()->checkFields10(kEntityPlayer)) { \
-		setCallback(1); \
-		setup_savegame(kSavegameTypeEvent, kEventMertensBloodJacket); \
-	}
-
 Coudert::Coudert(LastExpressEngine *engine) : Entity(engine, kEntityCoudert) {
 	ADD_CALLBACK_FUNCTION(Coudert, reset);
 	ADD_CALLBACK_FUNCTION(Coudert, bloodJacket);
@@ -124,7 +115,7 @@ IMPLEMENT_FUNCTION_S(2, Coudert, bloodJacket)
 		break;
 
 	case kActionNone:
-		SAVEGAME_BLOOD_JACKET();
+		savegameBloodJacket();
 		break;
 
 	case kActionExitCompartment:
@@ -151,7 +142,7 @@ IMPLEMENT_FUNCTION_SI(3, Coudert, enterExitCompartment, ObjectIndex)
 		break;
 
 	case kActionNone:
-		SAVEGAME_BLOOD_JACKET();
+		savegameBloodJacket();
 		return;
 
 	case kActionCallback:
@@ -177,7 +168,7 @@ IMPLEMENT_FUNCTION(4, Coudert, callbackActionOnDirection)
 			break;
 		}
 
-		SAVEGAME_BLOOD_JACKET();
+		savegameBloodJacket();
 		break;
 
 	case kActionExitCompartment:
@@ -200,7 +191,7 @@ IMPLEMENT_FUNCTION_SIII(5, Coudert, enterExitCompartment2, ObjectIndex, EntityPo
 		break;
 
 	case kActionNone:
-		SAVEGAME_BLOOD_JACKET();
+		savegameBloodJacket();
 		return;
 
 	case kActionCallback:
@@ -221,7 +212,7 @@ IMPLEMENT_FUNCTION_S(6, Coudert, playSound)
 		break;
 
 	case kActionNone:
-		SAVEGAME_BLOOD_JACKET();
+		savegameBloodJacket();
 		break;
 
 	case kActionEndSound:
@@ -250,7 +241,7 @@ IMPLEMENT_FUNCTION_NOSETUP(7, Coudert, playSound16)
 		break;
 
 	case kActionNone:
-		SAVEGAME_BLOOD_JACKET();
+		savegameBloodJacket();
 		break;
 
 	case kActionEndSound:
@@ -363,7 +354,7 @@ IMPLEMENT_FUNCTION_I(10, Coudert, updateFromTime, uint32)
 		break;
 
 	case kActionNone:
-		SAVEGAME_BLOOD_JACKET();
+		savegameBloodJacket();
 
 		UPDATE_PARAM(params->param2, getState()->time, params->param1);
 
@@ -386,7 +377,7 @@ IMPLEMENT_FUNCTION_I(11, Coudert, updateFromTicks, uint32)
 		break;
 
 	case kActionNone:
-		SAVEGAME_BLOOD_JACKET();
+		savegameBloodJacket();
 
 		UPDATE_PARAM(params->param2, getState()->timeTicks, params->param1);
 
@@ -460,7 +451,7 @@ IMPLEMENT_FUNCTION_II(13, Coudert, function13, bool, EntityIndex)
 		break;
 
 	case kActionNone:
-		SAVEGAME_BLOOD_JACKET();
+		savegameBloodJacket();
 
 		if (!params->param2 && !params->param3) {
 
@@ -582,7 +573,7 @@ IMPLEMENT_FUNCTION_I(14, Coudert, function14, EntityIndex)
 		break;
 
 	case kActionNone:
-		SAVEGAME_BLOOD_JACKET();
+		savegameBloodJacket();
 		break;
 
 	case kActionDefault:
@@ -4173,4 +4164,14 @@ void Coudert::visitCompartment(const SavePoint &savepoint, EntityPosition positi
 	}
 }
 
+void Coudert::savegameBloodJacket() {
+	if (getProgress().jacket == kJacketBlood
+	&& getEntities()->isDistanceBetweenEntities(kEntityCoudert, kEntityPlayer, 1000)
+	&& !getEntities()->isInsideCompartments(kEntityPlayer)
+	&& !getEntities()->checkFields10(kEntityPlayer)) {
+		setCallback(1);
+		setup_savegame(kSavegameTypeEvent, kEventMertensBloodJacket);
+	}
+}
+
 } // End of namespace LastExpress
diff --git a/engines/lastexpress/entities/coudert.h b/engines/lastexpress/entities/coudert.h
index 45d13ce..d06bb95 100644
--- a/engines/lastexpress/entities/coudert.h
+++ b/engines/lastexpress/entities/coudert.h
@@ -219,6 +219,7 @@ public:
 
 private:
 	void visitCompartment(const SavePoint &savepoint, EntityPosition position, const char *seq1, ObjectIndex compartment, const char *seq2, const char *seq3, EntityPosition sittingPosition, ObjectIndex object, const char *seq4);
+	void savegameBloodJacket();
 };
 
 } // End of namespace LastExpress


Commit: d4f7c0232380b94b42d280c3680e473cd0c2d9b5
    https://github.com/scummvm/scummvm/commit/d4f7c0232380b94b42d280c3680e473cd0c2d9b5
Author: Littleboy (littleboy at scummvm.org)
Date: 2012-07-16T20:51:26-07:00

Commit Message:
LASTEXPRESS: Replace PLAY_STEAM macro by function

Changed paths:
    engines/lastexpress/entities/chapters.cpp
    engines/lastexpress/entities/chapters.h



diff --git a/engines/lastexpress/entities/chapters.cpp b/engines/lastexpress/entities/chapters.cpp
index eab4dfe..b497816 100644
--- a/engines/lastexpress/entities/chapters.cpp
+++ b/engines/lastexpress/entities/chapters.cpp
@@ -384,12 +384,6 @@ IMPLEMENT_FUNCTION(7, Chapters, chapter1Init)
 IMPLEMENT_FUNCTION_END
 
 //////////////////////////////////////////////////////////////////////////
-#define PLAY_STEAM() { \
-	getSoundQueue()->resetState(); \
-	getSound()->playSteam((CityIndex)ENTITY_PARAM(0, 4)); \
-	ENTITY_PARAM(0, 2) = 0; \
-	}
-
 IMPLEMENT_FUNCTION(8, Chapters, chapter1Handler)
 	switch (savepoint.action) {
 	default:
@@ -522,43 +516,43 @@ label_chapter1_next:
 			getSavePoints()->push(kEntityChapters, kEntityTrain, kActionTrainStopRunning);
 
 			if (getEntityData(kEntityPlayer)->location != kLocationOutsideTrain) {
-				PLAY_STEAM();
+				playSteam();
 				break;
 			}
 
 			if (getEntities()->isOutsideAlexeiWindow()) {
 				getScenes()->loadSceneFromPosition(kCarGreenSleeping, 49);
-				PLAY_STEAM();
+				playSteam();
 				break;
 			}
 
 			if (getEntities()->isOutsideAnnaWindow()) {
 				getScenes()->loadSceneFromPosition(kCarRedSleeping, 49);
-				PLAY_STEAM();
+				playSteam();
 				break;
 			}
 
 			CarIndex car = getEntityData(kEntityPlayer)->car;
 			if (car < kCarRedSleeping || car > kCarCoalTender) {
 				if (car < kCarBaggageRear || car > kCarGreenSleeping) {
-					PLAY_STEAM();
+					playSteam();
 					break;
 				}
 
 				if (getEntities()->isPlayerPosition(kCarGreenSleeping, 98)) {
 					getSound()->playSound(kEntityPlayer, "LIB015");
 					getScenes()->loadSceneFromPosition(kCarGreenSleeping, 71);
-					PLAY_STEAM();
+					playSteam();
 					break;
 				}
 
 				getScenes()->loadSceneFromPosition(kCarGreenSleeping, 82);
-				PLAY_STEAM();
+				playSteam();
 				break;
 			}
 
 			getScenes()->loadSceneFromPosition(kCarRestaurant, 82);
-			PLAY_STEAM();
+			playSteam();
 			break;
 		}
 
@@ -1278,43 +1272,43 @@ label_callback_4:
 			getSavePoints()->push(kEntityChapters, kEntityTrain, kActionTrainStopRunning);
 
 			if (getEntityData(kEntityPlayer)->location != kLocationOutsideTrain) {
-				PLAY_STEAM();
+				playSteam();
 				break;
 			}
 
 			if (getEntities()->isOutsideAlexeiWindow()) {
 				getScenes()->loadSceneFromPosition(kCarGreenSleeping, 49);
-				PLAY_STEAM();
+				playSteam();
 				break;
 			}
 
 			if (getEntities()->isOutsideAnnaWindow()) {
 				getScenes()->loadSceneFromPosition(kCarRedSleeping, 49);
-				PLAY_STEAM();
+				playSteam();
 				break;
 			}
 
 			CarIndex car = getEntityData(kEntityPlayer)->car;
 			if (car < kCarRedSleeping || car > kCarCoalTender) {
 				if (car < kCarBaggageRear || car > kCarGreenSleeping) {
-					PLAY_STEAM();
+					playSteam();
 					break;
 				}
 
 				if (getEntities()->isPlayerPosition(kCarGreenSleeping, 98)) {
 					getSound()->playSound(kEntityPlayer, "LIB015");
 					getScenes()->loadSceneFromPosition(kCarGreenSleeping, 71);
-					PLAY_STEAM();
+					playSteam();
 					break;
 				}
 
 				getScenes()->loadSceneFromPosition(kCarGreenSleeping, 82);
-				PLAY_STEAM();
+				playSteam();
 				break;
 			}
 
 			getScenes()->loadSceneFromPosition(kCarRestaurant, 82);
-			PLAY_STEAM();
+			playSteam();
 			break;
 		}
 
@@ -1816,4 +1810,10 @@ void Chapters::enterExitHelper(bool isEnteringStation) {
 	callbackAction();
 }
 
+void Chapters::playSteam() {
+	getSoundQueue()->resetState();
+	getSound()->playSteam((CityIndex)ENTITY_PARAM(0, 4));
+	ENTITY_PARAM(0, 2) = 0;
+}
+
 } // End of namespace LastExpress
diff --git a/engines/lastexpress/entities/chapters.h b/engines/lastexpress/entities/chapters.h
index 353d3a6..62b8af9 100644
--- a/engines/lastexpress/entities/chapters.h
+++ b/engines/lastexpress/entities/chapters.h
@@ -156,6 +156,7 @@ public:
 private:
 	void enterExitStation(const SavePoint &savepoint, bool isEnteringStation);
 	void enterExitHelper(bool isEnteringStation);
+	void playSteam();
 };
 
 } // End of namespace LastExpress


Commit: 132dd5b4bc236f805babe0187797ef03bbb16310
    https://github.com/scummvm/scummvm/commit/132dd5b4bc236f805babe0187797ef03bbb16310
Author: Littleboy (littleboy at scummvm.org)
Date: 2012-07-16T20:51:27-07:00

Commit Message:
LASTEXPRESS: Replace SYNC_STRING macro by function

Changed paths:
    engines/lastexpress/entities/entity.cpp
    engines/lastexpress/entities/entity.h



diff --git a/engines/lastexpress/entities/entity.cpp b/engines/lastexpress/entities/entity.cpp
index 776b9f6..120c1f2 100644
--- a/engines/lastexpress/entities/entity.cpp
+++ b/engines/lastexpress/entities/entity.cpp
@@ -51,6 +51,17 @@ EntityData::EntityCallData::~EntityCallData() {
 	SAFE_DELETE(sequence3);
 }
 
+void EntityData::EntityCallData::syncString(Common::Serializer &s, Common::String &string, int length) {
+	char seqName[13];
+	memset(&seqName, 0, length);
+
+	if (s.isSaving()) strcpy((char *)&seqName, string.c_str());
+		s.syncBytes((byte *)&seqName, length);
+
+	if (s.isLoading())
+		string = seqName;
+}
+
 void EntityData::EntityCallData::saveLoadWithSerializer(Common::Serializer &s) {
 	for (uint i = 0; i < ARRAYSIZE(callbacks); i++)
 		s.syncAsByte(callbacks[i]);
@@ -77,20 +88,10 @@ void EntityData::EntityCallData::saveLoadWithSerializer(Common::Serializer &s) {
 	s.syncAsByte(directionSwitch);
 
 	// Sync strings
-#define SYNC_STRING(varName, count) { \
-	char seqName[13]; \
-	memset(&seqName, 0, count); \
-	if (s.isSaving()) strcpy((char *)&seqName, varName.c_str()); \
-	s.syncBytes((byte *)&seqName, count); \
-	if (s.isLoading()) varName = seqName; \
-}
-
-	SYNC_STRING(sequenceName, 13);
-	SYNC_STRING(sequenceName2, 13);
-	SYNC_STRING(sequenceNamePrefix, 7);
-	SYNC_STRING(sequenceNameCopy, 13);
-
-#undef SYNC_STRING
+	syncString(s, sequenceName, 13);
+	syncString(s, sequenceName2, 13);
+	syncString(s, sequenceNamePrefix, 7);
+	syncString(s, sequenceNameCopy, 13);
 
 	// Skip pointers to frame & sequences
 	s.skip(5 * 4);
diff --git a/engines/lastexpress/entities/entity.h b/engines/lastexpress/entities/entity.h
index bb2b966..4dca542 100644
--- a/engines/lastexpress/entities/entity.h
+++ b/engines/lastexpress/entities/entity.h
@@ -596,6 +596,15 @@ public:
 			return str;
 		}
 
+		/**
+		 * Synchronizes a string.
+		 *
+		 * @param	s	  	The Common::Serializer to use.
+		 * @param	string	The string.
+		 * @param	length	Length of the string.
+		 */
+		void syncString(Common::Serializer &s, Common::String &string, int length);
+
 		// Serializable
 		void saveLoadWithSerializer(Common::Serializer &s);
 	};


Commit: e517c1199a0a187d865fbf22ce964a7dad069eb9
    https://github.com/scummvm/scummvm/commit/e517c1199a0a187d865fbf22ce964a7dad069eb9
Author: Littleboy (littleboy at scummvm.org)
Date: 2012-07-16T20:51:27-07:00

Commit Message:
LASTEXPRESS: Move LOW_BYTE macro to helpers.h

Changed paths:
    engines/lastexpress/entities/entity_intern.h
    engines/lastexpress/helpers.h



diff --git a/engines/lastexpress/entities/entity_intern.h b/engines/lastexpress/entities/entity_intern.h
index 0613b7b..c622ff9 100644
--- a/engines/lastexpress/entities/entity_intern.h
+++ b/engines/lastexpress/entities/entity_intern.h
@@ -25,8 +25,6 @@
 
 namespace LastExpress {
 
-#define LOW_BYTE(w)           ((unsigned char)(((unsigned long)(w)) & 0xff))
-
 //////////////////////////////////////////////////////////////////////////
 // Callbacks
 #define ENTITY_CALLBACK(class, name, pointer) \
diff --git a/engines/lastexpress/helpers.h b/engines/lastexpress/helpers.h
index 7f3f1e2..02454be 100644
--- a/engines/lastexpress/helpers.h
+++ b/engines/lastexpress/helpers.h
@@ -27,6 +27,8 @@
 // Misc helpers
 //////////////////////////////////////////////////////////////////////////
 
+#define LOW_BYTE(w)           ((unsigned char)(((unsigned long)(w)) & 0xff))
+
 // Misc
 #define getArchive(name) _engine->getResourceManager()->getFileStream(name)
 #define rnd(value) _engine->getRandom().getRandomNumber(value - 1)


Commit: 3d1b7b2d962ac37d8fb706ac8b884d3e560f97b5
    https://github.com/scummvm/scummvm/commit/3d1b7b2d962ac37d8fb706ac8b884d3e560f97b5
Author: Littleboy (littleboy at scummvm.org)
Date: 2012-07-16T20:51:28-07:00

Commit Message:
LASTEXPRESS: Merge the two savegameBloodJacket functions into the base Entity class

Changed paths:
    engines/lastexpress/entities/coudert.cpp
    engines/lastexpress/entities/coudert.h
    engines/lastexpress/entities/entity.cpp
    engines/lastexpress/entities/entity.h
    engines/lastexpress/entities/entity39.h
    engines/lastexpress/entities/mertens.cpp
    engines/lastexpress/entities/mertens.h



diff --git a/engines/lastexpress/entities/coudert.cpp b/engines/lastexpress/entities/coudert.cpp
index 66733ac..eea9dda 100644
--- a/engines/lastexpress/entities/coudert.cpp
+++ b/engines/lastexpress/entities/coudert.cpp
@@ -115,7 +115,7 @@ IMPLEMENT_FUNCTION_S(2, Coudert, bloodJacket)
 		break;
 
 	case kActionNone:
-		savegameBloodJacket();
+		Entity::savegameBloodJacket(WRAP_SAVE_FUNCTION(Coudert, setup_savegame));
 		break;
 
 	case kActionExitCompartment:
@@ -142,7 +142,7 @@ IMPLEMENT_FUNCTION_SI(3, Coudert, enterExitCompartment, ObjectIndex)
 		break;
 
 	case kActionNone:
-		savegameBloodJacket();
+		Entity::savegameBloodJacket(WRAP_SAVE_FUNCTION(Coudert, setup_savegame));
 		return;
 
 	case kActionCallback:
@@ -168,7 +168,7 @@ IMPLEMENT_FUNCTION(4, Coudert, callbackActionOnDirection)
 			break;
 		}
 
-		savegameBloodJacket();
+		Entity::savegameBloodJacket(WRAP_SAVE_FUNCTION(Coudert, setup_savegame));
 		break;
 
 	case kActionExitCompartment:
@@ -191,7 +191,7 @@ IMPLEMENT_FUNCTION_SIII(5, Coudert, enterExitCompartment2, ObjectIndex, EntityPo
 		break;
 
 	case kActionNone:
-		savegameBloodJacket();
+		Entity::savegameBloodJacket(WRAP_SAVE_FUNCTION(Coudert, setup_savegame));
 		return;
 
 	case kActionCallback:
@@ -212,7 +212,7 @@ IMPLEMENT_FUNCTION_S(6, Coudert, playSound)
 		break;
 
 	case kActionNone:
-		savegameBloodJacket();
+		Entity::savegameBloodJacket(WRAP_SAVE_FUNCTION(Coudert, setup_savegame));
 		break;
 
 	case kActionEndSound:
@@ -241,7 +241,7 @@ IMPLEMENT_FUNCTION_NOSETUP(7, Coudert, playSound16)
 		break;
 
 	case kActionNone:
-		savegameBloodJacket();
+		Entity::savegameBloodJacket(WRAP_SAVE_FUNCTION(Coudert, setup_savegame));
 		break;
 
 	case kActionEndSound:
@@ -354,7 +354,7 @@ IMPLEMENT_FUNCTION_I(10, Coudert, updateFromTime, uint32)
 		break;
 
 	case kActionNone:
-		savegameBloodJacket();
+		Entity::savegameBloodJacket(WRAP_SAVE_FUNCTION(Coudert, setup_savegame));
 
 		UPDATE_PARAM(params->param2, getState()->time, params->param1);
 
@@ -377,7 +377,7 @@ IMPLEMENT_FUNCTION_I(11, Coudert, updateFromTicks, uint32)
 		break;
 
 	case kActionNone:
-		savegameBloodJacket();
+		Entity::savegameBloodJacket(WRAP_SAVE_FUNCTION(Coudert, setup_savegame));
 
 		UPDATE_PARAM(params->param2, getState()->timeTicks, params->param1);
 
@@ -451,7 +451,7 @@ IMPLEMENT_FUNCTION_II(13, Coudert, function13, bool, EntityIndex)
 		break;
 
 	case kActionNone:
-		savegameBloodJacket();
+		Entity::savegameBloodJacket(WRAP_SAVE_FUNCTION(Coudert, setup_savegame));
 
 		if (!params->param2 && !params->param3) {
 
@@ -573,7 +573,7 @@ IMPLEMENT_FUNCTION_I(14, Coudert, function14, EntityIndex)
 		break;
 
 	case kActionNone:
-		savegameBloodJacket();
+		Entity::savegameBloodJacket(WRAP_SAVE_FUNCTION(Coudert, setup_savegame));
 		break;
 
 	case kActionDefault:
@@ -4164,14 +4164,4 @@ void Coudert::visitCompartment(const SavePoint &savepoint, EntityPosition positi
 	}
 }
 
-void Coudert::savegameBloodJacket() {
-	if (getProgress().jacket == kJacketBlood
-	&& getEntities()->isDistanceBetweenEntities(kEntityCoudert, kEntityPlayer, 1000)
-	&& !getEntities()->isInsideCompartments(kEntityPlayer)
-	&& !getEntities()->checkFields10(kEntityPlayer)) {
-		setCallback(1);
-		setup_savegame(kSavegameTypeEvent, kEventMertensBloodJacket);
-	}
-}
-
 } // End of namespace LastExpress
diff --git a/engines/lastexpress/entities/coudert.h b/engines/lastexpress/entities/coudert.h
index d06bb95..45d13ce 100644
--- a/engines/lastexpress/entities/coudert.h
+++ b/engines/lastexpress/entities/coudert.h
@@ -219,7 +219,6 @@ public:
 
 private:
 	void visitCompartment(const SavePoint &savepoint, EntityPosition position, const char *seq1, ObjectIndex compartment, const char *seq2, const char *seq3, EntityPosition sittingPosition, ObjectIndex object, const char *seq4);
-	void savegameBloodJacket();
 };
 
 } // End of namespace LastExpress
diff --git a/engines/lastexpress/entities/entity.cpp b/engines/lastexpress/entities/entity.cpp
index 120c1f2..a412dc9 100644
--- a/engines/lastexpress/entities/entity.cpp
+++ b/engines/lastexpress/entities/entity.cpp
@@ -253,6 +253,28 @@ void Entity::savegame(const SavePoint &savepoint) {
 	}
 }
 
+void Entity::savegameBloodJacket(SaveFunction *savegame) {
+	if (getProgress().jacket == kJacketBlood
+	 && getEntities()->isDistanceBetweenEntities(_entityIndex, kEntityPlayer, 1000)
+	 && !getEntities()->isInsideCompartments(kEntityPlayer)
+	 && !getEntities()->checkFields10(kEntityPlayer)) {
+		setCallback(1);
+
+		switch (_entityIndex) {
+		default:
+			break;
+
+		case kEntityCoudert:
+			(*savegame)(kSavegameTypeEvent, kEventCoudertBloodJacket);
+			break;
+
+		case kEntityMertens:
+			(*savegame)(kSavegameTypeEvent, kEventCoudertBloodJacket);
+			break;
+		}
+	}
+}
+
 void Entity::playSound(const SavePoint &savepoint, bool resetItem, SoundFlag flag) {
 	EXPOSE_PARAMS(EntityData::EntityParametersSIIS)
 
diff --git a/engines/lastexpress/entities/entity.h b/engines/lastexpress/entities/entity.h
index 4dca542..01a1955 100644
--- a/engines/lastexpress/entities/entity.h
+++ b/engines/lastexpress/entities/entity.h
@@ -680,9 +680,11 @@ protected:
 
 	typedef Common::Functor2<const char *, ObjectIndex, void> EnterFunction;
 	typedef Common::Functor2<CarIndex, EntityPosition, void> UpdateFunction;
+	typedef Common::Functor2<SavegameType, uint32, void> SaveFunction;
 
 	#define WRAP_ENTER_FUNCTION(className, method) new Common::Functor2Mem<const char *, ObjectIndex, void, className>(this, &className::method)
 	#define WRAP_UPDATE_FUNCTION(className, method) new Common::Functor2Mem<CarIndex, EntityPosition, void, className>(this, &className::method)
+	#define WRAP_SAVE_FUNCTION(className, method) new Common::Functor2Mem<SavegameType, uint32, void, className>(this, &className::method)
 
 	/**
 	 * Saves the game
@@ -694,6 +696,11 @@ protected:
 	void savegame(const SavePoint &savepoint);
 
 	/**
+	 * Saves the game before being found out with a blood covered jacket
+	 */
+	void savegameBloodJacket(SaveFunction *savegame);
+
+	/**
 	 * Play sound
 	 *
 	 * @param savepoint The savepoint
diff --git a/engines/lastexpress/entities/entity39.h b/engines/lastexpress/entities/entity39.h
index 4335a95..148bca5 100644
--- a/engines/lastexpress/entities/entity39.h
+++ b/engines/lastexpress/entities/entity39.h
@@ -72,4 +72,4 @@ private:
 
 } // End of namespace LastExpress
 
-#endif // LASTEXPRESS_##define##_H
+#endif // LASTEXPRESS_ENTITY39_H
diff --git a/engines/lastexpress/entities/mertens.cpp b/engines/lastexpress/entities/mertens.cpp
index 5672fe4..dd69aea 100644
--- a/engines/lastexpress/entities/mertens.cpp
+++ b/engines/lastexpress/entities/mertens.cpp
@@ -37,14 +37,6 @@
 
 namespace LastExpress {
 
-#define SAVEGAME_BLOOD_JACKET() \
-	if (getProgress().jacket == kJacketBlood \
-	 && getEntities()->isDistanceBetweenEntities(kEntityMertens, kEntityPlayer, 1000) \
-	 && !getEntities()->isInsideCompartments(kEntityPlayer) \
-	 && !getEntities()->checkFields10(kEntityPlayer)) { \
-		setCallback(1); \
-		setup_savegame(kSavegameTypeEvent, kEventMertensBloodJacket); \
-	}
 
 Mertens::Mertens(LastExpressEngine *engine) : Entity(engine, kEntityMertens) {
 	ADD_CALLBACK_FUNCTION(Mertens, reset);
@@ -115,7 +107,7 @@ IMPLEMENT_FUNCTION_S(2, Mertens, bloodJacket)
 		break;
 
 	case kActionNone:
-		SAVEGAME_BLOOD_JACKET();
+		Entity::savegameBloodJacket(WRAP_SAVE_FUNCTION(Mertens, setup_savegame));
 		break;
 
 	case kActionExitCompartment:
@@ -142,7 +134,7 @@ IMPLEMENT_FUNCTION_SI(3, Mertens, enterExitCompartment, ObjectIndex)
 		break;
 
 	case kActionNone:
-		SAVEGAME_BLOOD_JACKET();
+		Entity::savegameBloodJacket(WRAP_SAVE_FUNCTION(Mertens, setup_savegame));
 		return;
 
 	case kActionCallback:
@@ -163,7 +155,7 @@ IMPLEMENT_FUNCTION_SI(4, Mertens, enterExitCompartment2, ObjectIndex)
 		break;
 
 	case kActionNone:
-		SAVEGAME_BLOOD_JACKET();
+		Entity::savegameBloodJacket(WRAP_SAVE_FUNCTION(Mertens, setup_savegame));
 		return;
 
 	case kAction4:
@@ -189,7 +181,7 @@ IMPLEMENT_FUNCTION_SIII(5, Mertens, enterExitCompartment3, ObjectIndex, EntityPo
 		break;
 
 	case kActionNone:
-		SAVEGAME_BLOOD_JACKET();
+		Entity::savegameBloodJacket(WRAP_SAVE_FUNCTION(Mertens, setup_savegame));
 		break;
 
 	case kActionExitCompartment:
@@ -231,7 +223,7 @@ IMPLEMENT_FUNCTION(6, Mertens, callbackActionOnDirection)
 			break;
 		}
 
-		SAVEGAME_BLOOD_JACKET();
+		Entity::savegameBloodJacket(WRAP_SAVE_FUNCTION(Mertens, setup_savegame));
 		break;
 
 	case kActionExitCompartment:
@@ -254,7 +246,7 @@ IMPLEMENT_FUNCTION_S(7, Mertens, playSound)
 		break;
 
 	case kActionNone:
-		SAVEGAME_BLOOD_JACKET();
+		Entity::savegameBloodJacket(WRAP_SAVE_FUNCTION(Mertens, setup_savegame));
 		break;
 
 	case kActionEndSound:
@@ -281,7 +273,7 @@ IMPLEMENT_FUNCTION_S(8, Mertens, playSound16)
 		break;
 
 	case kActionNone:
-		SAVEGAME_BLOOD_JACKET();
+		Entity::savegameBloodJacket(WRAP_SAVE_FUNCTION(Mertens, setup_savegame));
 		break;
 
 	case kActionEndSound:
@@ -480,7 +472,7 @@ IMPLEMENT_FUNCTION_I(11, Mertens, function11, uint32)
 		break;
 
 	case kActionNone:
-		SAVEGAME_BLOOD_JACKET();
+		Entity::savegameBloodJacket(WRAP_SAVE_FUNCTION(Mertens, setup_savegame));
 
 		UPDATE_PARAM(params->param2, getState()->time, params->param1)
 
@@ -548,7 +540,7 @@ IMPLEMENT_FUNCTION_II(13, Mertens, function13, bool, bool)
 		break;
 
 	case kActionNone:
-		SAVEGAME_BLOOD_JACKET();
+		Entity::savegameBloodJacket(WRAP_SAVE_FUNCTION(Mertens, setup_savegame));
 
 		if (!params->param2 && !params->param3) {
 			UPDATE_PARAM_PROC(params->param4, getState()->timeTicks, 75)
@@ -670,7 +662,7 @@ IMPLEMENT_FUNCTION_I(14, Mertens, function14, EntityIndex)
 		break;
 
 	case kActionNone:
-		SAVEGAME_BLOOD_JACKET();
+		Entity::savegameBloodJacket(WRAP_SAVE_FUNCTION(Mertens, setup_savegame));
 		break;
 
 	case kActionDefault:
diff --git a/engines/lastexpress/entities/mertens.h b/engines/lastexpress/entities/mertens.h
index 31b7a97..55c2a76 100644
--- a/engines/lastexpress/entities/mertens.h
+++ b/engines/lastexpress/entities/mertens.h
@@ -210,6 +210,9 @@ public:
 	DECLARE_FUNCTION(function53)
 
 	DECLARE_NULL_FUNCTION()
+
+private:
+	void loadSceneFromPosition();
 };
 
 } // End of namespace LastExpress


Commit: 2b116592cb5654656d2b8118e1a3674e195bb00e
    https://github.com/scummvm/scummvm/commit/2b116592cb5654656d2b8118e1a3674e195bb00e
Author: Littleboy (littleboy at scummvm.org)
Date: 2012-07-16T20:51:29-07:00

Commit Message:
LASTEXPRESS: Remove LOADSCENE_FROM_POSITION macro

Changed paths:
    engines/lastexpress/entities/mertens.cpp



diff --git a/engines/lastexpress/entities/mertens.cpp b/engines/lastexpress/entities/mertens.cpp
index dd69aea..517ff76 100644
--- a/engines/lastexpress/entities/mertens.cpp
+++ b/engines/lastexpress/entities/mertens.cpp
@@ -300,14 +300,6 @@ IMPLEMENT_FUNCTION_END
 
 //////////////////////////////////////////////////////////////////////////
 IMPLEMENT_FUNCTION_II(10, Mertens, updateEntity, CarIndex, EntityPosition)
-
-#define LOADSCENE_FROM_POSITION() \
-	if (getData()->direction != kDirectionUp) { \
-		getEntities()->loadSceneFromEntityPosition(getData()->car, (EntityPosition)(getData()->entityPosition + 750)); \
-	} else { \
-		getEntities()->loadSceneFromEntityPosition(getData()->car, (EntityPosition)(getData()->entityPosition - 750), true); \
-	}
-
 	switch (savepoint.action) {
 	default:
 		break;
@@ -406,7 +398,7 @@ IMPLEMENT_FUNCTION_II(10, Mertens, updateEntity, CarIndex, EntityPosition)
 			ENTITY_PARAM(0, 7) = 0;
 
 			if (params->param1 != 3 || (params->param2 != kPosition_8200 && params->param2 != kPosition_9510)) {
-				LOADSCENE_FROM_POSITION();
+				loadSceneFromPosition();
 				break;
 			}
 
@@ -438,31 +430,29 @@ IMPLEMENT_FUNCTION_II(10, Mertens, updateEntity, CarIndex, EntityPosition)
 				break;
 			}
 
-			LOADSCENE_FROM_POSITION();
+			loadSceneFromPosition();
 			break;
 
 		case 4:
 			getAction()->playAnimation(kEventMertensKronosConcertInvitation);
 			ENTITY_PARAM(2, 4) = 0;
 
-			LOADSCENE_FROM_POSITION();
+			loadSceneFromPosition();
 			break;
 
 		case 5:
 			getAction()->playAnimation(getData()->entityPosition < getEntityData(kEntityPlayer)->entityPosition ? kEventMertensAskTylerCompartmentD : kEventMertensAskTylerCompartment);
-			LOADSCENE_FROM_POSITION();
+			loadSceneFromPosition();
 			break;
 
 		case 6:
 			getAction()->playAnimation(kEventMertensDontMakeBed);
-			LOADSCENE_FROM_POSITION();
+			loadSceneFromPosition();
 			ENTITY_PARAM(0, 4) = 0;
 			break;
 		}
 		break;
 	}
-
-#undef LOADSCENE_FROM_POSITION
 IMPLEMENT_FUNCTION_END
 
 //////////////////////////////////////////////////////////////////////////
@@ -4098,4 +4088,15 @@ IMPLEMENT_FUNCTION_END
 //////////////////////////////////////////////////////////////////////////
 IMPLEMENT_NULL_FUNCTION(54, Mertens)
 
+//////////////////////////////////////////////////////////////////////////
+// Helper functions
+//////////////////////////////////////////////////////////////////////////
+
+void Mertens::loadSceneFromPosition() {
+	if (getData()->direction != kDirectionUp)
+		getEntities()->loadSceneFromEntityPosition(getData()->car, (EntityPosition)(getData()->entityPosition + 750));
+	else
+		getEntities()->loadSceneFromEntityPosition(getData()->car, (EntityPosition)(getData()->entityPosition - 750), true);
+}
+
 } // End of namespace LastExpress


Commit: 04a181a787befb9ef5bc2a3d524f622a5fcfaeeb
    https://github.com/scummvm/scummvm/commit/04a181a787befb9ef5bc2a3d524f622a5fcfaeeb
Author: Littleboy (littleboy at scummvm.org)
Date: 2012-07-16T20:51:30-07:00

Commit Message:
LASTEXPRESS: Replace 2 macros in Sophie entity implementation

Changed paths:
    engines/lastexpress/entities/sophie.cpp
    engines/lastexpress/entities/sophie.h



diff --git a/engines/lastexpress/entities/sophie.cpp b/engines/lastexpress/entities/sophie.cpp
index c2f25b7..10c4147 100644
--- a/engines/lastexpress/entities/sophie.cpp
+++ b/engines/lastexpress/entities/sophie.cpp
@@ -31,31 +31,6 @@
 
 namespace LastExpress {
 
-#define CHAPTER_IMPLEMENTATION() \
-	switch (savepoint.action) { \
-	default: \
-		break; \
-	case kActionNone: \
-		setup_chaptersHandler(); \
-		break; \
-	case kActionDefault: \
-		getEntities()->clearSequences(kEntitySophie); \
-		getData()->entityPosition = kPosition_4840; \
-		getData()->location = kLocationInsideCompartment; \
-		getData()->car = kCarRedSleeping; \
-		getData()->clothes = kClothesDefault; \
-		getData()->inventoryItem = kItemNone; \
-		break; \
-	}
-
-#define DEFAULT_ACTION_IMPLEMENTATION() \
-	if (savepoint.action == kActionDefault) { \
-		getData()->entityPosition = kPosition_4840; \
-		getData()->location = kLocationInsideCompartment; \
-		getData()->car = kCarRedSleeping; \
-		getEntities()->clearSequences(kEntitySophie); \
-	}
-
 Sophie::Sophie(LastExpressEngine *engine) : Entity(engine, kEntitySophie) {
 	ADD_CALLBACK_FUNCTION(Sophie, reset);
 	ADD_CALLBACK_FUNCTION(Sophie, updateEntity);
@@ -217,27 +192,27 @@ IMPLEMENT_FUNCTION_END
 
 //////////////////////////////////////////////////////////////////////////
 IMPLEMENT_FUNCTION(5, Sophie, function5)
-	DEFAULT_ACTION_IMPLEMENTATION()
+	handleAction(savepoint);
 IMPLEMENT_FUNCTION_END
 
 //////////////////////////////////////////////////////////////////////////
 IMPLEMENT_FUNCTION(6, Sophie, chapter2)
-	CHAPTER_IMPLEMENTATION()
+	handleChapter(savepoint);
 IMPLEMENT_FUNCTION_END
 
 //////////////////////////////////////////////////////////////////////////
 IMPLEMENT_FUNCTION(7, Sophie, chapter3)
-	CHAPTER_IMPLEMENTATION()
+	handleChapter(savepoint);
 IMPLEMENT_FUNCTION_END
 
 //////////////////////////////////////////////////////////////////////////
 IMPLEMENT_FUNCTION(8, Sophie, chapter4)
-	CHAPTER_IMPLEMENTATION()
+	handleChapter(savepoint);
 IMPLEMENT_FUNCTION_END
 
 //////////////////////////////////////////////////////////////////////////
 IMPLEMENT_FUNCTION(9, Sophie, function9)
-	DEFAULT_ACTION_IMPLEMENTATION()
+	handleAction(savepoint);
 IMPLEMENT_FUNCTION_END
 
 //////////////////////////////////////////////////////////////////////////
@@ -271,4 +246,37 @@ IMPLEMENT_FUNCTION_END
 //////////////////////////////////////////////////////////////////////////
 IMPLEMENT_NULL_FUNCTION(12, Sophie)
 
+//////////////////////////////////////////////////////////////////////////
+// Helpers functions
+//////////////////////////////////////////////////////////////////////////
+
+void Sophie::handleAction(const SavePoint &savepoint) {
+	if (savepoint.action == kActionDefault) {
+		getData()->entityPosition = kPosition_4840;
+		getData()->location = kLocationInsideCompartment;
+		getData()->car = kCarRedSleeping;
+		getEntities()->clearSequences(kEntitySophie);
+	}
+}
+
+void Sophie::handleChapter(const SavePoint &savepoint) {
+	switch (savepoint.action) {
+	default:
+		break;
+
+	case kActionNone:
+		setup_chaptersHandler();
+		break;
+
+	case kActionDefault:
+		getEntities()->clearSequences(kEntitySophie);
+		getData()->entityPosition = kPosition_4840;
+		getData()->location = kLocationInsideCompartment;
+		getData()->car = kCarRedSleeping;
+		getData()->clothes = kClothesDefault;
+		getData()->inventoryItem = kItemNone;
+		break;
+	}
+}
+
 } // End of namespace LastExpress
diff --git a/engines/lastexpress/entities/sophie.h b/engines/lastexpress/entities/sophie.h
index c2ca348..47cfa80 100644
--- a/engines/lastexpress/entities/sophie.h
+++ b/engines/lastexpress/entities/sophie.h
@@ -88,6 +88,10 @@ public:
 	DECLARE_FUNCTION(chapter5Handler)
 
 	DECLARE_NULL_FUNCTION()
+
+private:
+	void handleAction(const SavePoint &savepoint);
+	void handleChapter(const SavePoint &savepoint);
 };
 
 } // End of namespace LastExpress


Commit: 3cf7e8ccf347fd57a82eb5df39ac4941a4f6c2b1
    https://github.com/scummvm/scummvm/commit/3cf7e8ccf347fd57a82eb5df39ac4941a4f6c2b1
Author: Littleboy (littleboy at scummvm.org)
Date: 2012-07-16T20:51:30-07:00

Commit Message:
LASTEXPRESS: Replace INCREMENT_DIRECTION_COUNTER macro

Changed paths:
    engines/lastexpress/game/entities.cpp
    engines/lastexpress/game/entities.h



diff --git a/engines/lastexpress/game/entities.cpp b/engines/lastexpress/game/entities.cpp
index f2201ac..4cdefcd 100644
--- a/engines/lastexpress/game/entities.cpp
+++ b/engines/lastexpress/game/entities.cpp
@@ -669,11 +669,12 @@ void Entities::executeCallbacks() {
 //////////////////////////////////////////////////////////////////////////
 // Processing
 //////////////////////////////////////////////////////////////////////////
-#define INCREMENT_DIRECTION_COUNTER() { \
-	data->doProcessEntity = false; \
-	if (data->direction == kDirectionRight || (data->direction == kDirectionSwitch && data->directionSwitch == kDirectionRight)) \
-		++data->field_4A1; \
-	}
+void Entities::incrementDirectionCounter(EntityData::EntityCallData *data) {
+	data->doProcessEntity = false;
+
+	if (data->direction == kDirectionRight || (data->direction == kDirectionSwitch && data->directionSwitch == kDirectionRight))
+		++data->field_4A1;
+}
 
 void Entities::processEntity(EntityIndex entityIndex) {
 	EntityData::EntityCallData *data = getData(entityIndex);
@@ -692,7 +693,7 @@ void Entities::processEntity(EntityIndex entityIndex) {
 		getScenes()->removeAndRedraw(&data->frame, false);
 		getScenes()->removeAndRedraw(&data->frame1, false);
 
-		INCREMENT_DIRECTION_COUNTER();
+		incrementDirectionCounter(data);
 		return;
 	}
 
@@ -722,7 +723,7 @@ label_nosequence:
 			processFrame(entityIndex, false, true);
 
 			if (!getFlags()->flag_entities_0 && !data->doProcessEntity) {
-				INCREMENT_DIRECTION_COUNTER();
+				incrementDirectionCounter(data);
 				return;
 			}
 		} else {
@@ -740,7 +741,7 @@ label_nosequence:
 				data->position = 0;
 			}
 
-			INCREMENT_DIRECTION_COUNTER();
+			incrementDirectionCounter(data);
 		}
 		return;
 	}
@@ -789,7 +790,7 @@ label_nosequence:
 		}
 	}
 
-	INCREMENT_DIRECTION_COUNTER();
+	incrementDirectionCounter(data);
 }
 
 void Entities::computeCurrentFrame(EntityIndex entityIndex) const {
diff --git a/engines/lastexpress/game/entities.h b/engines/lastexpress/game/entities.h
index eb5eae4..a9de793 100644
--- a/engines/lastexpress/game/entities.h
+++ b/engines/lastexpress/game/entities.h
@@ -344,6 +344,7 @@ private:
 	uint _positions[_positionsCount];
 
 	void executeCallbacks();
+	void incrementDirectionCounter(EntityData::EntityCallData *data);
 	void processEntity(EntityIndex entity);
 
 	void drawSequence(EntityIndex entity, const char *sequence, EntityDirection direction) const;


Commit: be94a24fd2cf3e89e3976eb52581c5a8a65d81a1
    https://github.com/scummvm/scummvm/commit/be94a24fd2cf3e89e3976eb52581c5a8a65d81a1
Author: Littleboy (littleboy at scummvm.org)
Date: 2012-07-16T20:51:31-07:00

Commit Message:
LASTEXPRESS: Replace INVERT_Y macro

Changed paths:
    engines/lastexpress/game/beetle.cpp
    engines/lastexpress/game/beetle.h



diff --git a/engines/lastexpress/game/beetle.cpp b/engines/lastexpress/game/beetle.cpp
index f959476..2a72459 100644
--- a/engines/lastexpress/game/beetle.cpp
+++ b/engines/lastexpress/game/beetle.cpp
@@ -336,26 +336,13 @@ void Beetle::drawUpdate() {
 		}
 	}
 
-#define INVERT_Y() \
-	switch (_data->indexes[_data->offset]) { \
-	default: \
-		break; \
-	case 24: \
-	case 25: \
-	case 26: \
-	case 27: \
-	case 28: \
-		_data->coordY = -_data->coordY; \
-		break; \
-	}
-
 	// Invert direction
-	INVERT_Y();
+	invertDirection();
 
 	SequenceFrame *frame = new SequenceFrame(_data->currentSequence, (uint16)_data->currentFrame);
 	updateFrame(frame);
 
-	INVERT_Y();
+	invertDirection();
 
 	getScenes()->addToQueue(frame);
 
@@ -363,6 +350,21 @@ void Beetle::drawUpdate() {
 	_data->frame = frame;
 }
 
+void Beetle::invertDirection() {
+	switch (_data->indexes[_data->offset]) {
+	default:
+		break;
+
+	case 24:
+	case 25:
+	case 26:
+	case 27:
+	case 28:
+		_data->coordY = -_data->coordY;
+		break;
+	}
+}
+
 void Beetle::move() {
 	if (!_data)
 		error("[Beetle::move] Sequences have not been loaded");
diff --git a/engines/lastexpress/game/beetle.h b/engines/lastexpress/game/beetle.h
index d3c47f3..034ebbd 100644
--- a/engines/lastexpress/game/beetle.h
+++ b/engines/lastexpress/game/beetle.h
@@ -111,6 +111,7 @@ private:
 	void updateFrame(SequenceFrame *frame) const;
 	void updateData(uint32 index);
 	void drawUpdate();
+	void invertDirection();
 };
 
 } // End of namespace LastExpress


Commit: 0181a464eb864e15a02acd3ab7fb700a7cac0007
    https://github.com/scummvm/scummvm/commit/0181a464eb864e15a02acd3ab7fb700a7cac0007
Author: Littleboy (littleboy at scummvm.org)
Date: 2012-07-16T20:51:32-07:00

Commit Message:
LASTEXPRESS: Use filter 16 as default filter for NIS animations

This makes sure the sound is at the correct volume

Changed paths:
    engines/lastexpress/data/snd.cpp
    engines/lastexpress/shared.h



diff --git a/engines/lastexpress/data/snd.cpp b/engines/lastexpress/data/snd.cpp
index 3deb2d6..51d0815 100644
--- a/engines/lastexpress/data/snd.cpp
+++ b/engines/lastexpress/data/snd.cpp
@@ -526,7 +526,7 @@ void AppendableSound::queueBuffer(Common::SeekableReadStream *bufferIn) {
 	// Setup the ADPCM decoder
 	uint32 sizeIn = (uint32)bufferIn->size();
 	Audio::AudioStream *adpcm = makeDecoder(bufferIn, sizeIn);
-	((LastExpress_ADPCMStream *)adpcm)->setFilterId(1);
+	((LastExpress_ADPCMStream *)adpcm)->setFilterId(16);
 
 	// Queue the stream
 	_as->queueAudioStream(adpcm);
diff --git a/engines/lastexpress/shared.h b/engines/lastexpress/shared.h
index d60a498..bebd149 100644
--- a/engines/lastexpress/shared.h
+++ b/engines/lastexpress/shared.h
@@ -80,7 +80,8 @@ enum SoundFlag {
 	kFlagMusic       = 0x5000010,
 	kFlagType3       = 0x6000000,
 	kFlagLoop        = 0x6001008,
-	kFlagType9       = 0x7000000
+	kFlagType9       = 0x7000000,
+	kFlagNIS         = 0x7002010
 };
 
 enum SoundState {


Commit: d830c0edc9e53b5a3274535139179c2ef029a5d5
    https://github.com/scummvm/scummvm/commit/d830c0edc9e53b5a3274535139179c2ef029a5d5
Author: Littleboy (littleboy at scummvm.org)
Date: 2012-07-16T20:51:32-07:00

Commit Message:
LASTEXPRESS: Replace TIME_CHECK_SAVEPOINT and TIME_CHECK_OBJECT macros

Changed paths:
    engines/lastexpress/entities/abbot.cpp
    engines/lastexpress/entities/august.cpp
    engines/lastexpress/entities/coudert.cpp
    engines/lastexpress/entities/entity.cpp
    engines/lastexpress/entities/entity.h
    engines/lastexpress/entities/entity_intern.h
    engines/lastexpress/entities/kahina.cpp
    engines/lastexpress/entities/mertens.cpp
    engines/lastexpress/entities/milos.cpp
    engines/lastexpress/entities/rebecca.cpp
    engines/lastexpress/entities/tatiana.cpp



diff --git a/engines/lastexpress/entities/abbot.cpp b/engines/lastexpress/entities/abbot.cpp
index eef64bd..9280068 100644
--- a/engines/lastexpress/entities/abbot.cpp
+++ b/engines/lastexpress/entities/abbot.cpp
@@ -415,7 +415,7 @@ IMPLEMENT_FUNCTION(22, Abbot, function22)
 		break;
 
 	case kActionNone:
-		TIME_CHECK_SAVEPOINT(kTime1971000, params->param1, kEntityAbbot, kEntityServers0, kAction218586752);
+		Entity::timeCheckSavepoint(kTime1971000, params->param1, kEntityAbbot, kEntityServers0, kAction218586752);
 
 		if (getState()->time > kTime1989000 && getEntities()->isSomebodyInsideRestaurantOrSalon()) {
 			getData()->inventoryItem = kItemNone;
@@ -1319,7 +1319,7 @@ IMPLEMENT_FUNCTION(41, Abbot, chapter4Handler)
 		break;
 
 	case kActionNone:
-		TIME_CHECK_SAVEPOINT(kTime2358000, params->param1, kEntityAbbot, kEntityServers0, kAction218128129);
+		Entity::timeCheckSavepoint(kTime2358000, params->param1, kEntityAbbot, kEntityServers0, kAction218128129);
 
 		if (getState()->time > kTime2389500 && getEntities()->isSomebodyInsideRestaurantOrSalon())
 			setup_function42();
diff --git a/engines/lastexpress/entities/august.cpp b/engines/lastexpress/entities/august.cpp
index 86c02e4..f255d04 100644
--- a/engines/lastexpress/entities/august.cpp
+++ b/engines/lastexpress/entities/august.cpp
@@ -1811,7 +1811,7 @@ IMPLEMENT_FUNCTION(36, August, chapter2Handler)
 		break;
 
 	case kActionNone:
-		TIME_CHECK_SAVEPOINT(kTime1755000, params->param2, kEntityAugust, kEntityServers0, kAction252568704);
+		Entity::timeCheckSavepoint(kTime1755000, params->param2, kEntityAugust, kEntityServers0, kAction252568704);
 
 		if (getState()->time > kTime1773000 && params->param1 && getEntities()->isSomebodyInsideRestaurantOrSalon()) {
 			getData()->inventoryItem = kItemNone;
@@ -1960,7 +1960,7 @@ IMPLEMENT_FUNCTION(38, August, function38)
 		break;
 
 	case kActionNone:
-		TIME_CHECK_SAVEPOINT(kTime1801800, params->param1, kEntityAugust, kEntityRebecca, kAction155980128);
+		Entity::timeCheckSavepoint(kTime1801800, params->param1, kEntityAugust, kEntityRebecca, kAction155980128);
 
 		TIME_CHECK_CALLBACK(kTime1820700, params->param2, 3, setup_callbackActionRestaurantOrSalon);
 		break;
@@ -2210,7 +2210,7 @@ IMPLEMENT_FUNCTION(43, August, chapter3Handler)
 		break;
 
 	case kActionNone:
-		TIME_CHECK_SAVEPOINT(kTime1953000, params->param2, kEntityAugust, kEntityAnna, kAction291662081);
+		Entity::timeCheckSavepoint(kTime1953000, params->param2, kEntityAugust, kEntityAnna, kAction291662081);
 
 		// Set as same position as Anna
 		if (params->param1) {
diff --git a/engines/lastexpress/entities/coudert.cpp b/engines/lastexpress/entities/coudert.cpp
index eea9dda..77cdddd 100644
--- a/engines/lastexpress/entities/coudert.cpp
+++ b/engines/lastexpress/entities/coudert.cpp
@@ -2285,9 +2285,9 @@ label_callback_10:
 		if (!ENTITY_PARAM(0, 2))
 			break;
 
-		TIME_CHECK_OBJECT(kTime1107000, params->param4, kObject111, kObjectLocation2);
-		TIME_CHECK_OBJECT(kTime1161000, params->param5, kObject111, kObjectLocation3);
-		TIME_CHECK_OBJECT(kTime1206000, params->param6, kObject111, kObjectLocation4);
+		timeCheckObject(kTime1107000, params->param4, kObject111, kObjectLocation2);
+		timeCheckObject(kTime1161000, params->param5, kObject111, kObjectLocation3);
+		timeCheckObject(kTime1206000, params->param6, kObject111, kObjectLocation4);
 		break;
 
 	case kAction1:
@@ -2835,9 +2835,9 @@ label_callback_18:
 
 label_callback_19:
 		if (ENTITY_PARAM(0, 2)) {
-			TIME_CHECK_OBJECT(kTime2025000, params->param7, kObject111, kObjectLocation7);
-			TIME_CHECK_OBJECT(kTime2133000, params->param8, kObject111, kObjectLocation8);
-			TIME_CHECK_OBJECT(kTime2173500, CURRENT_PARAM(1, 1), kObject111, kObjectLocation9);
+			timeCheckObject(kTime2025000, params->param7, kObject111, kObjectLocation7);
+			timeCheckObject(kTime2133000, params->param8, kObject111, kObjectLocation8);
+			timeCheckObject(kTime2173500, CURRENT_PARAM(1, 1), kObject111, kObjectLocation9);
 		}
 		break;
 
diff --git a/engines/lastexpress/entities/entity.cpp b/engines/lastexpress/entities/entity.cpp
index a412dc9..743adc3 100644
--- a/engines/lastexpress/entities/entity.cpp
+++ b/engines/lastexpress/entities/entity.cpp
@@ -29,6 +29,7 @@
 #include "lastexpress/game/action.h"
 #include "lastexpress/game/entities.h"
 #include "lastexpress/game/logic.h"
+#include "lastexpress/game/object.h"
 #include "lastexpress/game/scenes.h"
 #include "lastexpress/game/state.h"
 #include "lastexpress/game/savegame.h"
@@ -592,4 +593,22 @@ void Entity::callbackAction() {
 	getSavePoints()->call(_entityIndex, _entityIndex, kActionCallback);
 }
 
+//////////////////////////////////////////////////////////////////////////
+// Helper functions
+//////////////////////////////////////////////////////////////////////////
+
+void Entity::timeCheckSavepoint(TimeValue timeValue, uint &parameter, EntityIndex entity1, EntityIndex entity2, ActionIndex action) {
+	if (getState()->time > timeValue && !parameter) {
+		parameter = 1;
+		getSavePoints()->push(entity1, entity2, action);
+	}
+}
+
+void Entity::timeCheckObject(TimeValue timeValue, uint &parameter, ObjectIndex object, ObjectLocation location) {
+	if (getState()->time > timeValue && !parameter) {
+		parameter = 1;
+		getObjects()->updateLocation2(object, location);
+	}
+}
+
 } // End of namespace LastExpress
diff --git a/engines/lastexpress/entities/entity.h b/engines/lastexpress/entities/entity.h
index 01a1955..f29d78e 100644
--- a/engines/lastexpress/entities/entity.h
+++ b/engines/lastexpress/entities/entity.h
@@ -845,6 +845,13 @@ protected:
 	 * Store the current callback information and perform the callback action
 	 */
 	void callbackAction();
+
+	//////////////////////////////////////////////////////////////////////////
+	// Helper functions
+	//////////////////////////////////////////////////////////////////////////
+
+	void timeCheckSavepoint(TimeValue timeValue, uint &parameter, EntityIndex entity1, EntityIndex entity2, ActionIndex action);
+	void timeCheckObject(TimeValue timeValue, uint &parameter, ObjectIndex index, ObjectLocation location);
 };
 
 
diff --git a/engines/lastexpress/entities/entity_intern.h b/engines/lastexpress/entities/entity_intern.h
index c622ff9..64814a1 100644
--- a/engines/lastexpress/entities/entity_intern.h
+++ b/engines/lastexpress/entities/entity_intern.h
@@ -326,12 +326,6 @@ void class::setup_##name() { \
 		break; \
 	}
 
-#define TIME_CHECK_SAVEPOINT(timeValue, parameter, entity1, entity2, action) \
-	if (getState()->time > timeValue && !parameter) { \
-		parameter = 1; \
-		getSavePoints()->push(entity1, entity2, action); \
-	}
-
 #define TIME_CHECK_CALLBACK(timeValue, parameter, callback, function) \
 	if (getState()->time > timeValue && !parameter) { \
 		parameter = 1; \
@@ -366,11 +360,11 @@ void class::setup_##name() { \
 
 #define TIME_CHECK_CALLBACK_INVENTORY(timeValue, parameter, callback, function) \
 	if (getState()->time > timeValue && !parameter) { \
-	parameter = 1; \
-	getData()->inventoryItem = kItemNone; \
-	setCallback(callback); \
-	function(); \
-	break; \
+		parameter = 1; \
+		getData()->inventoryItem = kItemNone; \
+		setCallback(callback); \
+		function(); \
+		break; \
 	}
 
 #define TIME_CHECK_CALLBACK_ACTION(timeValue, parameter) \
@@ -389,12 +383,6 @@ void class::setup_##name() { \
 		break; \
 	}
 
-#define TIME_CHECK_OBJECT(timeValue, parameter, object, location) \
-	if (getState()->time > timeValue && !parameter) { \
-		parameter = 1; \
-		getObjects()->updateLocation2(object, location); \
-	}
-
 #define TIME_CHECK_CAR(timeValue, parameter, callback, function) {\
 	if ((getState()->time <= timeValue && !getEntities()->isPlayerInCar(kCarGreenSleeping)) || !parameter) \
 		parameter = (uint)getState()->time + 75; \
diff --git a/engines/lastexpress/entities/kahina.cpp b/engines/lastexpress/entities/kahina.cpp
index 0c40450..6bb2e6b 100644
--- a/engines/lastexpress/entities/kahina.cpp
+++ b/engines/lastexpress/entities/kahina.cpp
@@ -267,7 +267,7 @@ IMPLEMENT_FUNCTION(11, Kahina, chapter1Handler)
 		return;
 
 	if (getProgress().jacket != kJacketOriginal)
-		TIME_CHECK_SAVEPOINT(kTime1107000, params->param1, kEntityKahina, kEntityMertens, kAction238732837);
+		Entity::timeCheckSavepoint(kTime1107000, params->param1, kEntityKahina, kEntityMertens, kAction238732837);
 
 	if (getProgress().eventMertensKronosInvitation)
 		setup_function12();
diff --git a/engines/lastexpress/entities/mertens.cpp b/engines/lastexpress/entities/mertens.cpp
index 517ff76..328c8e8 100644
--- a/engines/lastexpress/entities/mertens.cpp
+++ b/engines/lastexpress/entities/mertens.cpp
@@ -2993,7 +2993,7 @@ IMPLEMENT_FUNCTION(42, Mertens, function42)
 			getData()->inventoryItem = kItemInvalid;
 
 		if (!params->param2) {
-			TIME_CHECK_SAVEPOINT(kTime1125000, params->param3, kEntityMertens, kEntityMahmud, kAction170483072);
+			Entity::timeCheckSavepoint(kTime1125000, params->param3, kEntityMertens, kEntityMahmud, kAction170483072);
 
 			if (params->param4 != kTimeInvalid && getState()->time > kTimeCityChalons) {
 
diff --git a/engines/lastexpress/entities/milos.cpp b/engines/lastexpress/entities/milos.cpp
index 21f3b06..c33a8b8 100644
--- a/engines/lastexpress/entities/milos.cpp
+++ b/engines/lastexpress/entities/milos.cpp
@@ -720,7 +720,7 @@ IMPLEMENT_FUNCTION(15, Milos, chapter1Handler)
 		break;
 
 	case kActionNone:
-		TIME_CHECK_SAVEPOINT(kTime1071000, params->param3, kEntityMilos, kEntityServers1, kAction223002560);
+		Entity::timeCheckSavepoint(kTime1071000, params->param3, kEntityMilos, kEntityServers1, kAction223002560);
 
 		if (getState()->time > kTime1089000 && getEntities()->isSomebodyInsideRestaurantOrSalon()) {
 			setup_function16();
@@ -1534,7 +1534,7 @@ IMPLEMENT_FUNCTION(29, Milos, chapter4Handler)
 
 		TIME_CHECK_PLAYSOUND_MILOS(kTime2370600, params->param5, "Mil4015");
 
-		TIME_CHECK_SAVEPOINT(kTime2407500, params->param6, kEntityMilos, kEntityVesna, kAction55996766);
+		Entity::timeCheckSavepoint(kTime2407500, params->param6, kEntityMilos, kEntityVesna, kAction55996766);
 		break;
 
 	case kActionCallback:
diff --git a/engines/lastexpress/entities/rebecca.cpp b/engines/lastexpress/entities/rebecca.cpp
index 4f7be38..3ef2669 100644
--- a/engines/lastexpress/entities/rebecca.cpp
+++ b/engines/lastexpress/entities/rebecca.cpp
@@ -841,7 +841,7 @@ IMPLEMENT_FUNCTION(24, Rebecca, function24)
 		break;
 
 	case kActionNone:
-		TIME_CHECK_SAVEPOINT(kTime1134000, params->param2, kEntityRebecca, kEntityServers0, kAction223712416);
+		Entity::timeCheckSavepoint(kTime1134000, params->param2, kEntityRebecca, kEntityServers0, kAction223712416);
 
 		if (!params->param1)
 			break;
diff --git a/engines/lastexpress/entities/tatiana.cpp b/engines/lastexpress/entities/tatiana.cpp
index 3b9cc6d..b15a0a1 100644
--- a/engines/lastexpress/entities/tatiana.cpp
+++ b/engines/lastexpress/entities/tatiana.cpp
@@ -440,7 +440,7 @@ IMPLEMENT_FUNCTION(19, Tatiana, chapter1Handler)
 		}
 
 label_tatiana_chapter1_2:
-		TIME_CHECK_SAVEPOINT(kTime1084500, params->param7, kEntityTatiana, kEntityPascale, kAction257489762);
+		Entity::timeCheckSavepoint(kTime1084500, params->param7, kEntityTatiana, kEntityPascale, kAction257489762);
 
 		if (params->param1) {
 			UPDATE_PARAM(params->param8, getState()->timeTicks, 90);






More information about the Scummvm-git-logs mailing list