[Scummvm-cvs-logs] scummvm master -> 9ada143d1450fcc61c6e3fbd505e1b04fe45140d

dreammaster dreammaster at scummvm.org
Sat Jun 6 03:15:28 CEST 2015


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

Summary:
9ada143d14 SHERLOCK: Further FIXED_INT_MULTIPLIER refactoring


Commit: 9ada143d1450fcc61c6e3fbd505e1b04fe45140d
    https://github.com/scummvm/scummvm/commit/9ada143d1450fcc61c6e3fbd505e1b04fe45140d
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2015-06-05T21:13:48-04:00

Commit Message:
SHERLOCK: Further FIXED_INT_MULTIPLIER refactoring

Also converted multiplier factor from 100 to 1000, which will be
needed for Rose Tattoo

Changed paths:
    engines/sherlock/map.cpp
    engines/sherlock/objects.cpp
    engines/sherlock/objects.h
    engines/sherlock/people.cpp
    engines/sherlock/people.h
    engines/sherlock/scalpel/scalpel.cpp
    engines/sherlock/scalpel/scalpel_user_interface.cpp
    engines/sherlock/scene.cpp
    engines/sherlock/talk.cpp



diff --git a/engines/sherlock/map.cpp b/engines/sherlock/map.cpp
index ffbca3f..dfc9798 100644
--- a/engines/sherlock/map.cpp
+++ b/engines/sherlock/map.cpp
@@ -392,8 +392,8 @@ void Map::updateMap(bool flushScreen) {
 
 	people[AL].adjustSprite();
 
-	_lDrawnPos.x = hPos.x = people[AL]._position.x / 100 - _bigPos.x;
-	_lDrawnPos.y = hPos.y = people[AL]._position.y / 100 - people[AL].frameHeight() - _bigPos.y;
+	_lDrawnPos.x = hPos.x = people[AL]._position.x / FIXED_INT_MULTIPLIER - _bigPos.x;
+	_lDrawnPos.y = hPos.y = people[AL]._position.y / FIXED_INT_MULTIPLIER - people[AL].frameHeight() - _bigPos.y;
 
 	// Draw the person icon
 	saveIcon(people[AL]._imageFrame, hPos);
@@ -407,8 +407,8 @@ void Map::updateMap(bool flushScreen) {
 		screen.slamArea(0, 0, SHERLOCK_SCREEN_WIDTH, SHERLOCK_SCREEN_HEIGHT);
 	} else if (!_drawMap) {
 		if (hPos.x > 0 && hPos.y >= 0 && hPos.x < SHERLOCK_SCREEN_WIDTH && hPos.y < SHERLOCK_SCREEN_HEIGHT)
-			screen.flushImage(people[AL]._imageFrame, Common::Point(people[AL]._position.x / 100 - _bigPos.x,
-			people[AL]._position.y / 100 - people[AL].frameHeight() - _bigPos.y),
+			screen.flushImage(people[AL]._imageFrame, Common::Point(people[AL]._position.x / FIXED_INT_MULTIPLIER - _bigPos.x,
+			people[AL]._position.y / FIXED_INT_MULTIPLIER - people[AL].frameHeight() - _bigPos.y),
 			&people[AL]._oldPosition.x, &people[AL]._oldPosition.y, &people[AL]._oldSize.x, &people[AL]._oldSize.y);
 
 		if (osPos.x != -1)
diff --git a/engines/sherlock/objects.cpp b/engines/sherlock/objects.cpp
index 0b3c294..6253712 100644
--- a/engines/sherlock/objects.cpp
+++ b/engines/sherlock/objects.cpp
@@ -146,18 +146,18 @@ void Sprite::adjustSprite() {
 	}
 
 	if (_type == CHARACTER && !map._active) {
-		if ((_position.y / 100) > LOWER_LIMIT) {
-			_position.y = LOWER_LIMIT * 100;
+		if ((_position.y / FIXED_INT_MULTIPLIER) > LOWER_LIMIT) {
+			_position.y = LOWER_LIMIT * FIXED_INT_MULTIPLIER;
 			people.gotoStand(*this);
 		}
 
-		if ((_position.y / 100) < UPPER_LIMIT) {
-			_position.y = UPPER_LIMIT * 100;
+		if ((_position.y / FIXED_INT_MULTIPLIER) < UPPER_LIMIT) {
+			_position.y = UPPER_LIMIT * FIXED_INT_MULTIPLIER;
 			people.gotoStand(*this);
 		}
 
-		if ((_position.x / 100) < LEFT_LIMIT) {
-			_position.x = LEFT_LIMIT * 100;
+		if ((_position.x / FIXED_INT_MULTIPLIER) < LEFT_LIMIT) {
+			_position.x = LEFT_LIMIT * FIXED_INT_MULTIPLIER;
 			people.gotoStand(*this);
 		}
 	} else if (!map._active) {
@@ -196,8 +196,8 @@ void Sprite::adjustSprite() {
 
 	// Check to see if character has entered an exit zone
 	if (!_walkCount && scene._walkedInScene && scene._goToScene == -1) {
-		Common::Rect charRect(_position.x / 100 - 5, _position.y / 100 - 2,
-			_position.x / 100 + 5, _position.y / 100 + 2);
+		Common::Rect charRect(_position.x / FIXED_INT_MULTIPLIER - 5, _position.y / FIXED_INT_MULTIPLIER - 2,
+			_position.x / FIXED_INT_MULTIPLIER + 5, _position.y / FIXED_INT_MULTIPLIER + 2);
 		Exit *exit = scene.checkForExit(charRect);
 
 		if (exit) {
@@ -222,7 +222,7 @@ void Sprite::checkSprite() {
 	Talk &talk = *_vm->_talk;
 	Point32 pt;
 	Common::Rect objBounds;
-	Common::Point spritePt(_position.x / 100, _position.y / 100);
+	Common::Point spritePt(_position.x / FIXED_INT_MULTIPLIER, _position.y / FIXED_INT_MULTIPLIER);
 
 	if (!talk._talkCounter && _type == CHARACTER) {
 		pt = _walkCount ? _position + _delta : _position;
@@ -657,8 +657,13 @@ void Object::load(Common::SeekableReadStream &s, bool isRoseTattoo) {
 	_oldPosition.y = s.readSint16LE();
 	_oldSize.x = s.readUint16LE();
 	_oldSize.y = s.readUint16LE();
+	
 	_goto.x = s.readSint16LE();
 	_goto.y = s.readSint16LE();
+	if (!isRoseTattoo) {
+		_goto.x = _goto.x * FIXED_INT_MULTIPLIER / 100;
+		_goto.y = _goto.y * FIXED_INT_MULTIPLIER / 100;
+	}
 
 	_pickup = isRoseTattoo ? 0 : s.readByte();
 	_defaultCommand = isRoseTattoo ? 0 : s.readByte();
@@ -678,8 +683,8 @@ void Object::load(Common::SeekableReadStream &s, bool isRoseTattoo) {
 	_aType = (AType)s.readByte();
 	_lookFrames = s.readByte();
 	_seqCounter = s.readByte();
-	_lookPosition.x = s.readUint16LE();
-	_lookPosition.y = isRoseTattoo ? s.readSint16LE() : s.readByte();
+	_lookPosition.x = s.readUint16LE() * FIXED_INT_MULTIPLIER / 100;
+	_lookPosition.y = (isRoseTattoo ? s.readSint16LE() : s.readByte()) * FIXED_INT_MULTIPLIER;
 	_lookFacing = s.readByte();
 	_lookcAnim = s.readByte();
 
@@ -1418,6 +1423,13 @@ void CAnim::load(Common::SeekableReadStream &s, bool isRoseTattoo) {
 	_gotoDir = s.readSint16LE();
 	_teleportPos.x = s.readSint16LE();
 	_teleportPos.y = s.readSint16LE();
+	if (!isRoseTattoo) {
+		_goto.x = _goto.x * FIXED_INT_MULTIPLIER / 100;
+		_goto.y = _goto.y * FIXED_INT_MULTIPLIER / 100;
+		_teleportPos.x = _teleportPos.x * FIXED_INT_MULTIPLIER / 100;
+		_teleportPos.y = _teleportPos.y * FIXED_INT_MULTIPLIER / 100;
+	}
+
 	_teleportDir = s.readSint16LE();
 }
 
diff --git a/engines/sherlock/objects.h b/engines/sherlock/objects.h
index 65840af..88e9db1 100644
--- a/engines/sherlock/objects.h
+++ b/engines/sherlock/objects.h
@@ -76,7 +76,7 @@ enum {
 
 #define MAX_HOLMES_SEQUENCE 16
 #define MAX_FRAME 30
-#define FIXED_INT_MULTIPLIER 100
+#define FIXED_INT_MULTIPLIER 1000
 
 // code put into sequences to defines 1-10 type seqs
 #define SEQ_TO_CODE 67
@@ -328,7 +328,7 @@ public:
 	Common::Point _delta;			// Momvement amount
 	Common::Point _oldPosition;		// Old position
 	Common::Point _oldSize;			// Image's old size
-	Common::Point _goto;			// Walk destination
+	Point32 _goto;					// Walk destination
 
 	int _pickup;
 	int _defaultCommand;			// Default right-click command
@@ -342,7 +342,7 @@ public:
 	AType _aType;					// Tells if this is an object, person, talk, etc.
 	int _lookFrames;				// How many frames to play of the look anim before pausing
 	int _seqCounter;				// How many times this sequence has been executed
-	Common::Point _lookPosition;	// Where to walk when examining object
+	Point32 _lookPosition;			// Where to walk when examining object
 	int _lookFacing;				// Direction to face when examining object
 	int _lookcAnim;
 	int _seqStack;					// Allows gosubs to return to calling frame
@@ -439,9 +439,9 @@ struct CAnim {
 	Common::Point _position;		// Position
 	int _size;						// Size of uncompressed animation
 	int _flags;						// Tells if can be walked behind
-	Common::Point _goto;			// coords holmes should walk to before starting canim
+	Point32 _goto;			// coords holmes should walk to before starting canim
 	int _gotoDir;
-	Common::Point _teleportPos;		// Location Holmes shoul teleport to after
+	Point32 _teleportPos;		// Location Holmes shoul teleport to after
 	int _teleportDir;					// playing canim
 
 	// Scalpel specific
diff --git a/engines/sherlock/people.cpp b/engines/sherlock/people.cpp
index ec67b44..f4060f6 100644
--- a/engines/sherlock/people.cpp
+++ b/engines/sherlock/people.cpp
@@ -98,7 +98,7 @@ People::People(SherlockEngine *vm) : _vm(vm), _player(_data[0]) {
 	_speakerFlip = false;
 	_holmesFlip = false;
 	_holmesQuotient = 0;
-	_hSavedPos = Common::Point(-1, -1);
+	_hSavedPos = Point32(-1, -1);
 	_hSavedFacing = -1;
 	_forceWalkReload = false;
 	_useWalkLib = false;
@@ -134,7 +134,7 @@ void People::reset() {
 		p._sequenceNumber = STOP_DOWNRIGHT;
 		p._imageFrame = nullptr;
 		p._frameNumber = 1;
-		p._delta = Common::Point(0, 0);
+		p._delta = Point32(0, 0);
 		p._oldPosition = Common::Point(0, 0);
 		p._oldSize = Common::Point(0, 0);
 		p._misc = 0;
@@ -297,8 +297,8 @@ void People::setWalking() {
 			_walkDest.x -= temp;
 
 		delta = Common::Point(
-			ABS(_player._position.x / 100 - _walkDest.x),
-			ABS(_player._position.y / 100 - _walkDest.y)
+			ABS(_player._position.x / FIXED_INT_MULTIPLIER - _walkDest.x),
+			ABS(_player._position.y / FIXED_INT_MULTIPLIER - _walkDest.y)
 		);
 
 		// If we're ready to move a sufficient distance, that's it. Otherwise,
@@ -316,20 +316,20 @@ void People::setWalking() {
 		if (delta.x >= delta.y) {
 			// Set the initial frame sequence for the left and right, as well
 			// as setting the delta x depending on direction
-			if (_walkDest.x < (_player._position.x / 100)) {
+			if (_walkDest.x < (_player._position.x / FIXED_INT_MULTIPLIER)) {
 				_player._sequenceNumber = (map._active ? (int)MAP_LEFT : (int)WALK_LEFT);
-				_player._delta.x = speed.x * -100;
+				_player._delta.x = speed.x * -FIXED_INT_MULTIPLIER;
 			} else {
 				_player._sequenceNumber = (map._active ? (int)MAP_RIGHT : (int)WALK_RIGHT);
-				_player._delta.x = speed.x * 100;
+				_player._delta.x = speed.x * FIXED_INT_MULTIPLIER;
 			}
 
 			// See if the x delta is too small to be divided by the speed, since
 			// this would cause a divide by zero error
 			if (delta.x >= speed.x) {
 				// Det the delta y
-				_player._delta.y = (delta.y * 100) / (delta.x / speed.x);
-				if (_walkDest.y < (_player._position.y / 100))
+				_player._delta.y = (delta.y * FIXED_INT_MULTIPLIER) / (delta.x / speed.x);
+				if (_walkDest.y < (_player._position.y / FIXED_INT_MULTIPLIER))
 					_player._delta.y = -_player._delta.y;
 
 				// Set how many times we should add the delta to the player's position
@@ -337,8 +337,9 @@ void People::setWalking() {
 			} else {
 				// The delta x was less than the speed (ie. we're really close to
 				// the destination). So set delta to 0 so the player won't move
-				_player._delta = Common::Point(0, 0);
-				_player._position = Common::Point(_walkDest.x * 100, _walkDest.y * 100);
+				_player._delta = Point32(0, 0);
+				_player._position = Point32(_walkDest.x * FIXED_INT_MULTIPLIER, _walkDest.y * FIXED_INT_MULTIPLIER);
+assert(_player._position.y >= 10000);/***DEBUG****/
 				_player._walkCount = 1;
 			}
 
@@ -369,12 +370,12 @@ void People::setWalking() {
 		} else {
 			// Major movement is vertical, so set the sequence for up and down,
 			// and set the delta Y depending on the direction
-			if (_walkDest.y < (_player._position.y / 100)) {
+			if (_walkDest.y < (_player._position.y / FIXED_INT_MULTIPLIER)) {
 				_player._sequenceNumber = WALK_UP;
-				_player._delta.y = speed.y * -100;
+				_player._delta.y = speed.y * -FIXED_INT_MULTIPLIER;
 			} else {
 				_player._sequenceNumber = WALK_DOWN;
-				_player._delta.y = speed.y * 100;
+				_player._delta.y = speed.y * FIXED_INT_MULTIPLIER;
 			}
 
 			// If we're on the overhead map, set the sequence so we keep moving
@@ -383,8 +384,8 @@ void People::setWalking() {
 				_player._sequenceNumber = (oldDirection == -1) ? MAP_RIGHT : oldDirection;
 
 			// Set the delta x
-			_player._delta.x = (delta.x * 100) / (delta.y / speed.y);
-			if (_walkDest.x < (_player._position.x / 100))
+			_player._delta.x = (delta.x * FIXED_INT_MULTIPLIER) / (delta.y / speed.y);
+			if (_walkDest.x < (_player._position.x / FIXED_INT_MULTIPLIER))
 				_player._delta.x = -_player._delta.x;
 
 			_player._walkCount = delta.y / speed.y;
@@ -451,15 +452,15 @@ void People::gotoStand(Sprite &sprite) {
 
 	if (map._active) {
 		sprite._sequenceNumber = 0;
-		_player._position.x = (map[map._charPoint].x -  6) * 100;
-		_player._position.y = (map[map._charPoint].y + 10) * 100;
+		_player._position.x = (map[map._charPoint].x - 6) * FIXED_INT_MULTIPLIER;
+		_player._position.y = (map[map._charPoint].y + 10) * FIXED_INT_MULTIPLIER;
 	}
 
 	_oldWalkSequence = -1;
 	_allowWalkAbort = true;
 }
 
-void People::walkToCoords(const Common::Point &destPos, int destDir) {
+void People::walkToCoords(const Point32 &destPos, int destDir) {
 	Events &events = *_vm->_events;
 	Scene &scene = *_vm->_scene;
 	Talk &talk = *_vm->_talk;
@@ -467,7 +468,7 @@ void People::walkToCoords(const Common::Point &destPos, int destDir) {
 	CursorId oldCursor = events.getCursor();
 	events.setCursor(WAIT);
 
-	_walkDest = Common::Point(destPos.x / 100 + 10, destPos.y / 100);
+	_walkDest = Common::Point(destPos.x / FIXED_INT_MULTIPLIER + 10, destPos.y / FIXED_INT_MULTIPLIER);
 	_allowWalkAbort = true;
 	goAllTheWay();
 
@@ -480,6 +481,8 @@ void People::walkToCoords(const Common::Point &destPos, int destDir) {
 	if (!talk._talkToAbort) {
 		// Put player exactly on destination position, and set direction
 		_player._position = destPos;
+assert(_player._position.y >= 10000);/***DEBUG****/
+
 		_player._sequenceNumber = destDir;
 		gotoStand(_player);
 
@@ -493,8 +496,8 @@ void People::walkToCoords(const Common::Point &destPos, int destDir) {
 
 void People::goAllTheWay() {
 	Scene &scene = *_vm->_scene;
-	Common::Point srcPt(_player._position.x / 100 + _player.frameWidth() / 2,
-		_player._position.y / 100);
+	Common::Point srcPt(_player._position.x / FIXED_INT_MULTIPLIER + _player.frameWidth() / 2,
+		_player._position.y / FIXED_INT_MULTIPLIER);
 
 	// Get the zone the player is currently in
 	_srcZone = scene.whichZone(srcPt);
@@ -516,17 +519,17 @@ void People::goAllTheWay() {
 		const Common::Point destCenter((destRect.left + destRect.right) / 2,
 			(destRect.top + destRect.bottom) / 2);
 		const Common::Point delta = _walkDest - destCenter;
-		Common::Point pt(destCenter.x * 100, destCenter.y * 100);
+		Point32 pt(destCenter.x * FIXED_INT_MULTIPLIER, destCenter.y * FIXED_INT_MULTIPLIER);
 
 		// Move along the line until the zone is left
 		do {
 			pt += delta;
-		} while (destRect.contains(pt.x / 100, pt.y / 100));
+		} while (destRect.contains(pt.x / FIXED_INT_MULTIPLIER, pt.y / FIXED_INT_MULTIPLIER));
 
 		// Set the new walk destination to the last point that was in the
 		// zone just before it was left
-		_walkDest = Common::Point((pt.x - delta.x * 2) / 100,
-			(pt.y - delta.y * 2) / 100);
+		_walkDest = Common::Point((pt.x - delta.x * 2) / FIXED_INT_MULTIPLIER,
+			(pt.y - delta.y * 2) / FIXED_INT_MULTIPLIER);
 	}
 
 	// Only do a walk if both zones are acceptable
diff --git a/engines/sherlock/people.h b/engines/sherlock/people.h
index 102d740..c26630c 100644
--- a/engines/sherlock/people.h
+++ b/engines/sherlock/people.h
@@ -110,7 +110,7 @@ public:
 	Common::Array<PersonData> _characters;
 	ImageFile *_talkPics;
 	Common::Point _walkDest;
-	Common::Point _hSavedPos;
+	Point32 _hSavedPos;
 	int _hSavedFacing;
 	Common::Queue<Common::Point> _walkTo;
 	Person &_player;
@@ -172,7 +172,7 @@ public:
 	/**
 	 * Walk to the co-ordinates passed, and then face the given direction
 	 */
-	void walkToCoords(const Common::Point &destPos, int destDir);
+	void walkToCoords(const Point32 &destPos, int destDir);
 
 	/**
 	 * Called to set the character walking to the current cursor location.
diff --git a/engines/sherlock/scalpel/scalpel.cpp b/engines/sherlock/scalpel/scalpel.cpp
index ed531a0..39d4437 100644
--- a/engines/sherlock/scalpel/scalpel.cpp
+++ b/engines/sherlock/scalpel/scalpel.cpp
@@ -687,7 +687,7 @@ void ScalpelEngine::startScene() {
 }
 
 void ScalpelEngine::eraseMirror12() {
-	Common::Point pt((*_people)[AL]._position.x / 100, (*_people)[AL]._position.y / 100);
+	Common::Point pt((*_people)[AL]._position.x / FIXED_INT_MULTIPLIER, (*_people)[AL]._position.y / FIXED_INT_MULTIPLIER);
 
 	// If player is in range of the mirror, then restore background from the secondary back buffer
 	if (Common::Rect(70, 100, 200, 200).contains(pt)) {
@@ -700,7 +700,7 @@ void ScalpelEngine::doMirror12() {
 	People &people = *_people;
 	Person &player = people._player;
 
-	Common::Point pt((*_people)[AL]._position.x / 100, (*_people)[AL]._position.y / 100);
+	Common::Point pt((*_people)[AL]._position.x / FIXED_INT_MULTIPLIER, (*_people)[AL]._position.y / FIXED_INT_MULTIPLIER);
 	int frameNum = player._walkSequences[player._sequenceNumber][player._frameNumber] +
 		player._walkSequences[player._sequenceNumber][0] - 2;
 
@@ -772,7 +772,7 @@ void ScalpelEngine::doMirror12() {
 }
 
 void ScalpelEngine::flushMirror12() {
-	Common::Point pt((*_people)[AL]._position.x / 100, (*_people)[AL]._position.y / 100);
+	Common::Point pt((*_people)[AL]._position.x / FIXED_INT_MULTIPLIER, (*_people)[AL]._position.y / FIXED_INT_MULTIPLIER);
 
 	// If player is in range of the mirror, then draw the entire mirror area to the screen
 	if (Common::Rect(70, 100, 200, 200).contains(pt))
diff --git a/engines/sherlock/scalpel/scalpel_user_interface.cpp b/engines/sherlock/scalpel/scalpel_user_interface.cpp
index 16f1659..e2c6678 100644
--- a/engines/sherlock/scalpel/scalpel_user_interface.cpp
+++ b/engines/sherlock/scalpel/scalpel_user_interface.cpp
@@ -500,7 +500,7 @@ void ScalpelUserInterface::examine() {
 			scene.startCAnim(_cNum, canimSpeed);
 		} else if (obj._lookPosition.y != 0) {
 			// Need to walk to the object to be examined
-			people.walkToCoords(Common::Point(obj._lookPosition.x, obj._lookPosition.y * 100), obj._lookFacing);
+			people.walkToCoords(obj._lookPosition, obj._lookFacing);
 		}
 
 		if (!talk._talkToAbort) {
@@ -2158,7 +2158,7 @@ void ScalpelUserInterface::checkAction(ActionType &action, const char *const mes
 	Scene &scene = *_vm->_scene;
 	Screen &screen = *_vm->_screen;
 	Talk &talk = *_vm->_talk;
-	Common::Point pt(-1, -1);
+	Point32 pt(-1, -1);
 
 	if (objNum >= 1000)
 		// Ignore actions done on characters
@@ -2197,7 +2197,7 @@ void ScalpelUserInterface::checkAction(ActionType &action, const char *const mes
 				}
 			}
 		} else {
-			pt = Common::Point(-1, -1);
+			pt = Point32(-1, -1);
 			dir = -1;
 		}
 
diff --git a/engines/sherlock/scene.cpp b/engines/sherlock/scene.cpp
index edb52f3..ec189ee 100644
--- a/engines/sherlock/scene.cpp
+++ b/engines/sherlock/scene.cpp
@@ -756,7 +756,7 @@ void Scene::transitionToScene() {
 	SaveManager &saves = *_vm->_saves;
 	Screen &screen = *_vm->_screen;
 	Talk &talk = *_vm->_talk;
-	Common::Point &hSavedPos = people._hSavedPos;
+	Point32 &hSavedPos = people._hSavedPos;
 	int &hSavedFacing = people._hSavedFacing;
 
 	if (hSavedPos.x < 1) {
@@ -764,7 +764,7 @@ void Scene::transitionToScene() {
 		if (_entrance._startPosition.x < 1) {
 			// No entrance info either, so use defaults
 			if (IS_SERRATED_SCALPEL) {
-				hSavedPos = Common::Point(160 * FIXED_INT_MULTIPLIER, 100 * FIXED_INT_MULTIPLIER);
+				hSavedPos = Point32(160 * FIXED_INT_MULTIPLIER, 100 * FIXED_INT_MULTIPLIER);
 				hSavedFacing = 4;
 			} else {
 				hSavedPos = people[PLAYER]._position;
@@ -772,7 +772,8 @@ void Scene::transitionToScene() {
 			}
 		} else {
 			// setup entrance info
-			hSavedPos = _entrance._startPosition;
+			hSavedPos.x = _entrance._startPosition.x * FIXED_INT_MULTIPLIER / 100;
+			hSavedPos.y = _entrance._startPosition.y * FIXED_INT_MULTIPLIER / 100;
 			hSavedFacing = _entrance._startDir;
 		}
 	} else {
@@ -919,7 +920,7 @@ int Scene::startCAnim(int cAnimNum, int playRate) {
 	Resources &res = *_vm->_res;
 	Talk &talk = *_vm->_talk;
 	UserInterface &ui = *_vm->_ui;
-	Common::Point tpPos, walkPos;
+	Point32 tpPos, walkPos;
 	int tpDir, walkDir;
 	int tFrames = 0;
 	int gotoCode = -1;
diff --git a/engines/sherlock/talk.cpp b/engines/sherlock/talk.cpp
index d48b66c..dd00d47 100644
--- a/engines/sherlock/talk.cpp
+++ b/engines/sherlock/talk.cpp
@@ -636,8 +636,7 @@ void Talk::talk(int objNum) {
 		events.setCursor(WAIT);
 		if (obj._lookPosition.y != 0)
 			// Need to walk to character first
-			people.walkToCoords(Common::Point(obj._lookPosition.x, obj._lookPosition.y * 100),
-				obj._lookFacing);
+			people.walkToCoords(obj._lookPosition, obj._lookFacing);
 		events.setCursor(ARROW);
 
 		if (!_talkToAbort)
@@ -652,8 +651,7 @@ void Talk::talk(int objNum) {
 		events.setCursor(WAIT);
 		if (obj._lookPosition.y != 0)
 			// Walk over to person to talk to
-			people.walkToCoords(Common::Point(obj._lookPosition.x, obj._lookPosition.y * 100),
-			obj._lookFacing);
+			people.walkToCoords(obj._lookPosition, obj._lookFacing);
 		events.setCursor(ARROW);
 
 		if (!_talkToAbort) {






More information about the Scummvm-git-logs mailing list