[Scummvm-git-logs] scummvm master -> 9c940c7c6ad7fec08eeab257e80f68ea979716a7

OMGPizzaGuy noreply at scummvm.org
Sat Jun 8 04:28:00 UTC 2024


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:
9c940c7c6a ULTIMA8: Expand use of Point3, part 2


Commit: 9c940c7c6ad7fec08eeab257e80f68ea979716a7
    https://github.com/scummvm/scummvm/commit/9c940c7c6ad7fec08eeab257e80f68ea979716a7
Author: Matthew Jimenez (matthew.jimenez at outlook.com)
Date: 2024-06-07T23:27:29-05:00

Commit Message:
ULTIMA8: Expand use of Point3, part 2

Changed paths:
    engines/ultima/ultima8/games/start_u8_process.cpp
    engines/ultima/ultima8/gumps/game_map_gump.cpp
    engines/ultima/ultima8/misc/debugger.cpp
    engines/ultima/ultima8/world/actors/actor.cpp
    engines/ultima/ultima8/world/actors/actor_anim_process.cpp
    engines/ultima/ultima8/world/actors/attack_process.cpp
    engines/ultima/ultima8/world/actors/cru_avatar_mover_process.cpp
    engines/ultima/ultima8/world/actors/cru_pathfinder_process.cpp
    engines/ultima/ultima8/world/actors/cru_pathfinder_process.h
    engines/ultima/ultima8/world/actors/loiter_process.cpp
    engines/ultima/ultima8/world/actors/main_actor.cpp
    engines/ultima/ultima8/world/actors/pathfinder.cpp
    engines/ultima/ultima8/world/actors/pathfinder_process.cpp
    engines/ultima/ultima8/world/actors/pathfinder_process.h
    engines/ultima/ultima8/world/actors/quick_avatar_mover_process.cpp
    engines/ultima/ultima8/world/actors/rolling_thunder_process.cpp
    engines/ultima/ultima8/world/actors/u8_avatar_mover_process.cpp
    engines/ultima/ultima8/world/camera_process.cpp
    engines/ultima/ultima8/world/camera_process.h
    engines/ultima/ultima8/world/damage_info.cpp
    engines/ultima/ultima8/world/fireball_process.cpp
    engines/ultima/ultima8/world/gravity_process.cpp
    engines/ultima/ultima8/world/item.cpp
    engines/ultima/ultima8/world/item.h
    engines/ultima/ultima8/world/item_selection_process.cpp
    engines/ultima/ultima8/world/map.cpp
    engines/ultima/ultima8/world/snap_process.cpp
    engines/ultima/ultima8/world/super_sprite_process.cpp
    engines/ultima/ultima8/world/target_reticle_process.cpp
    engines/ultima/ultima8/world/world.cpp


diff --git a/engines/ultima/ultima8/games/start_u8_process.cpp b/engines/ultima/ultima8/games/start_u8_process.cpp
index c07e035a142..6de0c90c94d 100644
--- a/engines/ultima/ultima8/games/start_u8_process.cpp
+++ b/engines/ultima/ultima8/games/start_u8_process.cpp
@@ -86,7 +86,7 @@ void StartU8Process::run() {
 		Egg *egg = dynamic_cast<Egg *>(getObject(objid));
 		Point3 pt = egg->getLocation();
 		// Center on egg
-		CameraProcess::SetCameraProcess(new CameraProcess(pt.x, pt.y, pt.z));
+		CameraProcess::SetCameraProcess(new CameraProcess(pt));
 		egg->hatch();
 	}
 
diff --git a/engines/ultima/ultima8/gumps/game_map_gump.cpp b/engines/ultima/ultima8/gumps/game_map_gump.cpp
index 43c7fd64b65..3912f4beb3a 100644
--- a/engines/ultima/ultima8/gumps/game_map_gump.cpp
+++ b/engines/ultima/ultima8/gumps/game_map_gump.cpp
@@ -322,7 +322,7 @@ void GameMapGump::onMouseClick(int button, int32 mx, int32 my) {
 				debugC(kDebugObject, "Can't move: avatarInStasis");
 			} else {
 				Actor *avatarControlled = getControlledActor();
-				PathfinderProcess *pfp = new PathfinderProcess(avatarControlled, coords.x, coords.y, coords.z);
+				PathfinderProcess *pfp = new PathfinderProcess(avatarControlled, coords);
 				Kernel::get_instance()->killProcesses(avatarControlled->getObjId(), PathfinderProcess::PATHFINDER_PROC_TYPE, true);
 				Kernel::get_instance()->addProcess(pfp);
 			}
@@ -437,7 +437,7 @@ bool GameMapGump::DraggingItem(Item *item, int mx, int my) {
 		}
 	}
 
-	if (!item->canExistAt(_draggingPos.x, _draggingPos.y, _draggingPos.z))
+	if (!item->canExistAt(_draggingPos))
 		return false;
 
 	if (throwing)
diff --git a/engines/ultima/ultima8/misc/debugger.cpp b/engines/ultima/ultima8/misc/debugger.cpp
index ac278eecf09..aa2e08d36ed 100644
--- a/engines/ultima/ultima8/misc/debugger.cpp
+++ b/engines/ultima/ultima8/misc/debugger.cpp
@@ -758,7 +758,8 @@ void Debugger::dumpCurrentMap() {
 	// Now render the map
 	s->BeginPainting();
 	s->SetOrigin(0, 0);
-	CameraProcess::SetCameraProcess(new CameraProcess(cx + camheight * 4, cy + camheight * 4, camheight));
+	Point3 pt(cx + camheight * 4, cy + camheight * 4, camheight);
+	CameraProcess::SetCameraProcess(new CameraProcess(pt));
 	g->Paint(s, 256, false);
 	s->EndPainting();
 
@@ -1222,10 +1223,9 @@ bool Debugger::cmdCameraOnAvatar(int argc, const char **argv) {
 	}
 	Actor *actor = getControlledActor();
 	if (actor) {
-		int32 x, y, z;
-		actor->getCentre(x, y, z);
-		if (x > 0 || y > 0)
-			CameraProcess::SetCameraProcess(new CameraProcess(x, y, z));
+		Point3 pt = actor->getCentre();
+		if (pt.x > 0 || pt.y > 0)
+			CameraProcess::SetCameraProcess(new CameraProcess(pt));
 	}
 	return false;
 }
diff --git a/engines/ultima/ultima8/world/actors/actor.cpp b/engines/ultima/ultima8/world/actors/actor.cpp
index 1ec95ab803c..5803ae03fed 100644
--- a/engines/ultima/ultima8/world/actors/actor.cpp
+++ b/engines/ultima/ultima8/world/actors/actor.cpp
@@ -2553,7 +2553,7 @@ uint32 Actor::I_pathfindToPoint(const uint8 *args, unsigned int /*argsize*/) {
 	World_FromUsecodeXY(x, y);
 
 	return Kernel::get_instance()->addProcess(
-	           new PathfinderProcess(actor, x, y, z));
+	           new PathfinderProcess(actor, Point3(x, y, z)));
 }
 
 uint32 Actor::I_areEnemiesNear(const uint8 *args, unsigned int /*argsize*/) {
@@ -2646,7 +2646,7 @@ uint32 Actor::I_createActorCru(const uint8 *args, unsigned int /*argsize*/) {
 	newactor->setDir(static_cast<Direction>(dir * 2));
 
 	Point3 pt = item->getLocation();
-	newactor->move(pt.x, pt.y, pt.z);
+	newactor->move(pt);
 
 	newactor->setDefaultActivity(0, other->getQuality() >> 8);
 	newactor->setDefaultActivity(1, item->getQuality() >> 8);
diff --git a/engines/ultima/ultima8/world/actors/actor_anim_process.cpp b/engines/ultima/ultima8/world/actors/actor_anim_process.cpp
index 86a2edca25f..4e94fb60f72 100644
--- a/engines/ultima/ultima8/world/actors/actor_anim_process.cpp
+++ b/engines/ultima/ultima8/world/actors/actor_anim_process.cpp
@@ -425,11 +425,11 @@ void ActorAnimProcess::doSpecial() {
 			Actor *ghoul = Actor::createActor(0x8e, 0);
 			if (!ghoul) return;
 			ghoul->setFlag(Item::FLG_FAST_ONLY);
-			if (!ghoul->canExistAt(pt.x, pt.y, pt.z, true)) {
+			if (!ghoul->canExistAt(pt, true)) {
 				ghoul->destroy();
 				return;
 			}
-			ghoul->move(pt.x, pt.y, pt.z);
+			ghoul->move(pt);
 			ghoul->doAnim(Animation::standUp, dir_north);
 			hostile = ghoul;
 		}
diff --git a/engines/ultima/ultima8/world/actors/attack_process.cpp b/engines/ultima/ultima8/world/actors/attack_process.cpp
index 718812b770a..cc0121ebacd 100644
--- a/engines/ultima/ultima8/world/actors/attack_process.cpp
+++ b/engines/ultima/ultima8/world/actors/attack_process.cpp
@@ -274,7 +274,7 @@ void AttackProcess::run() {
 			int32 x, y, z;
 			a->getHomePosition(x, y, z);
 			ProcId pid = Kernel::get_instance()->addProcess(
-					   new CruPathfinderProcess(a, x, y, z, 100, 0x80, true));
+					   new CruPathfinderProcess(a, Point3(x, y, z), 100, 0x80, true));
 			waitFor(pid);
 			return;
 		}
@@ -283,7 +283,7 @@ void AttackProcess::run() {
 			// Pathfind to target
 			Point3 pt = target->getLocation();
 			ProcId pid = Kernel::get_instance()->addProcess(
-					   new CruPathfinderProcess(a, pt.x, pt.y, pt.z, 12, 0x80, true));
+					   new CruPathfinderProcess(a, pt, 12, 0x80, true));
 			waitFor(pid);
 			return;
 		}
@@ -296,7 +296,7 @@ void AttackProcess::run() {
 			int32 y = (tpt.y + apt.y) / 2;
 			int32 z = (tpt.z + apt.z) / 2;
 			ProcId pid = Kernel::get_instance()->addProcess(
-					   new CruPathfinderProcess(a, x, y, z, 12, 0x80, true));
+					   new CruPathfinderProcess(a, Point3(x, y, z), 12, 0x80, true));
 			waitFor(pid);
 			return;
 		}
@@ -599,7 +599,7 @@ void AttackProcess::genericAttack() {
 			pt.y += rs.getRandomNumberRngSigned(-0x1ff, 0x1ff);
 			_field96 = true;
 			const ProcId pid = Kernel::get_instance()->addProcess(
-								new CruPathfinderProcess(a, pt.x, pt.y, pt.z, 12, 0x80, true));
+								new CruPathfinderProcess(a, pt, 12, 0x80, true));
 			// add a tiny delay to avoid tight loops
 			Process *delayproc = new DelayProcess(2);
 			Kernel::get_instance()->addProcess(delayproc);
diff --git a/engines/ultima/ultima8/world/actors/cru_avatar_mover_process.cpp b/engines/ultima/ultima8/world/actors/cru_avatar_mover_process.cpp
index bec549f9c91..f8465b54f67 100644
--- a/engines/ultima/ultima8/world/actors/cru_avatar_mover_process.cpp
+++ b/engines/ultima/ultima8/world/actors/cru_avatar_mover_process.cpp
@@ -520,7 +520,7 @@ void CruAvatarMoverProcess::step(Animation::Sequence action, Direction direction
 			end[0] = x;
 			end[1] = y;
 			end[2] = z;
-			avatar->setLocation(origpt.x, origpt.y, origpt.z);
+			avatar->setLocation(origpt);
 			currentmap->sweepTest(start, end, dims, avatar->getShapeInfo()->_flags,
 								  avatar->getObjId(), true, &collisions);
 			for (Std::list<CurrentMap::SweepItem>::iterator it = collisions.begin();
@@ -536,7 +536,7 @@ void CruAvatarMoverProcess::step(Animation::Sequence action, Direction direction
 				res = avatar->tryAnim(testaction, direction);
 				if (res == Animation::SUCCESS) {
 					// move to starting point for real (trigger fast area updates etc)
-					avatar->setLocation(origpt.x, origpt.y, origpt.z);
+					avatar->setLocation(origpt);
 					avatar->move(x, y, z);
 					break;
 				}
@@ -546,7 +546,7 @@ void CruAvatarMoverProcess::step(Animation::Sequence action, Direction direction
 		if (res != Animation::SUCCESS) {
 			// reset location and result (in case it's END_OFF_LAND now)
 			// couldn't find a better move.
-			avatar->setLocation(origpt.x, origpt.y, origpt.z);
+			avatar->setLocation(origpt);
 			res = initialres;
 		}
 	}
diff --git a/engines/ultima/ultima8/world/actors/cru_pathfinder_process.cpp b/engines/ultima/ultima8/world/actors/cru_pathfinder_process.cpp
index f08e555ee07..13b1d1abe9d 100644
--- a/engines/ultima/ultima8/world/actors/cru_pathfinder_process.cpp
+++ b/engines/ultima/ultima8/world/actors/cru_pathfinder_process.cpp
@@ -77,8 +77,8 @@ CruPathfinderProcess::CruPathfinderProcess(Actor *actor, Item *target, int maxst
 		actor->doAnim(Animation::unreadyWeapon, dir_current);
 }
 
-CruPathfinderProcess::CruPathfinderProcess(Actor *actor, int32 x, int32 y, int32 z, int maxsteps, int stopdistance, bool turnatend) :
-		_target(x, y, z), _targetItem(0), _currentStep(0),
+CruPathfinderProcess::CruPathfinderProcess(Actor *actor, const Point3 &target, int maxsteps, int stopdistance, bool turnatend) :
+		_target(target), _targetItem(0), _currentStep(0),
 		_maxSteps(maxsteps), _stopDistance(stopdistance), _nextTurn(false), _turnAtEnd(turnatend),
 		_lastDir(dir_current), _nextDir(dir_current), _nextDir2(dir_current),
 		_directPathBlocked(false), _noShotAvailable(true), _dir16Flag(false) {
diff --git a/engines/ultima/ultima8/world/actors/cru_pathfinder_process.h b/engines/ultima/ultima8/world/actors/cru_pathfinder_process.h
index 068727489a3..1cf3738e22d 100644
--- a/engines/ultima/ultima8/world/actors/cru_pathfinder_process.h
+++ b/engines/ultima/ultima8/world/actors/cru_pathfinder_process.h
@@ -42,7 +42,7 @@ class CruPathfinderProcess : public Process {
 public:
 	CruPathfinderProcess();
 	CruPathfinderProcess(Actor *actor, Item *item, int maxsteps, int stopdistance, bool turnatend);
-	CruPathfinderProcess(Actor *actor, int32 x, int32 y, int32 z, int maxsteps, int stopdistance, bool turnatend);
+	CruPathfinderProcess(Actor *actor, const Point3 &target, int maxsteps, int stopdistance, bool turnatend);
 	~CruPathfinderProcess() override;
 
 	ENABLE_RUNTIME_CLASSTYPE()
diff --git a/engines/ultima/ultima8/world/actors/loiter_process.cpp b/engines/ultima/ultima8/world/actors/loiter_process.cpp
index 23a51ea25a6..75cb331fabe 100644
--- a/engines/ultima/ultima8/world/actors/loiter_process.cpp
+++ b/engines/ultima/ultima8/world/actors/loiter_process.cpp
@@ -79,9 +79,9 @@ void LoiterProcess::run() {
 
 	Process *pfp;
 	if (GAME_IS_U8)
-		pfp = new PathfinderProcess(a, pt.x, pt.y, pt.z);
+		pfp = new PathfinderProcess(a, pt);
 	else
-		pfp = new CruPathfinderProcess(a, pt.x, pt.y, pt.z, 0xc, 0x80, false);
+		pfp = new CruPathfinderProcess(a, pt, 0xc, 0x80, false);
 
 	Kernel::get_instance()->addProcess(pfp);
 
diff --git a/engines/ultima/ultima8/world/actors/main_actor.cpp b/engines/ultima/ultima8/world/actors/main_actor.cpp
index debb5c52955..0ddb0fb61f6 100644
--- a/engines/ultima/ultima8/world/actors/main_actor.cpp
+++ b/engines/ultima/ultima8/world/actors/main_actor.cpp
@@ -176,7 +176,7 @@ int16 MainActor::addItemCru(Item *item, bool showtoast) {
 			} else {
 				item->setQuality(winfo->_clipSize);
 			}
-			item->setLocation(pt.x, pt.y, pt.z);
+			item->setLocation(pt);
 			item->moveToContainer(this);
 			if (!_activeWeapon)
 				_activeWeapon = item->getObjId();
@@ -422,7 +422,7 @@ void MainActor::teleport(int mapNum, int teleport_id) {
 		// Keep the camera on the avatar (the snap process will update on next move)
 		// We don't add a new camera process here, as that would update the fast area
 		// before the cachein calls above have run.
-		CameraProcess::GetCameraProcess()->moveToLocation(pt.x, pt.y, pt.z);
+		CameraProcess::GetCameraProcess()->moveToLocation(pt);
 	}
 
 	Actor::teleport(mapNum, pt.x, pt.y, pt.z);
@@ -1032,14 +1032,14 @@ int MainActor::receiveShieldHit(int damage, uint16 damage_type) {
 				remembersprite = false;
 				// NOTE: In the game, this is put in the location of the
 				// hit.  For now just put in centre.
-				getCentre(pt.x, pt.y, pt.z);
+				pt = getCentre();
 				break;
 			case 2:
 				shieldsprite = 0x5a9;
 				shieldstartframe = 0;
 				shieldendframe = 6;
 				remembersprite = false;
-				getCentre(pt.x, pt.y, pt.z);
+				pt = getCentre();
 				break;
 			default:
 				shieldsprite = 0x52b;
diff --git a/engines/ultima/ultima8/world/actors/pathfinder.cpp b/engines/ultima/ultima8/world/actors/pathfinder.cpp
index 2874db37aa2..25962d4f392 100644
--- a/engines/ultima/ultima8/world/actors/pathfinder.cpp
+++ b/engines/ultima/ultima8/world/actors/pathfinder.cpp
@@ -155,7 +155,7 @@ void Pathfinder::setTarget(Item *item, bool hit) {
 	_targetItem = root ? root : item;
 
 	// set target to centre of item for the cost heuristic
-	item->getCentre(_target.x, _target.y, _target.z);
+	_target = item->getCentre();
 	_target.z = item->getZ();
 
 	if (hit) {
diff --git a/engines/ultima/ultima8/world/actors/pathfinder_process.cpp b/engines/ultima/ultima8/world/actors/pathfinder_process.cpp
index cf48b1cb816..1f8cfb9a626 100644
--- a/engines/ultima/ultima8/world/actors/pathfinder_process.cpp
+++ b/engines/ultima/ultima8/world/actors/pathfinder_process.cpp
@@ -78,8 +78,8 @@ PathfinderProcess::PathfinderProcess(Actor *actor, ObjId itemid, bool hit) :
 	actor->setActorFlag(Actor::ACT_PATHFINDING);
 }
 
-PathfinderProcess::PathfinderProcess(Actor *actor, int32 x, int32 y, int32 z) :
-		_target(x, y, z), _targetItem(0), _currentStep(0),
+PathfinderProcess::PathfinderProcess(Actor *actor, const Point3 &target) :
+		_target(target), _targetItem(0), _currentStep(0),
 		_hitMode(false) {
 	assert(actor);
 	_itemNum = actor->getObjId();
diff --git a/engines/ultima/ultima8/world/actors/pathfinder_process.h b/engines/ultima/ultima8/world/actors/pathfinder_process.h
index 46377c3299e..7b20af7aae8 100644
--- a/engines/ultima/ultima8/world/actors/pathfinder_process.h
+++ b/engines/ultima/ultima8/world/actors/pathfinder_process.h
@@ -36,7 +36,7 @@ class PathfinderProcess : public Process {
 public:
 	PathfinderProcess();
 	PathfinderProcess(Actor *actor, ObjId item, bool hit = false);
-	PathfinderProcess(Actor *actor, int32 x, int32 y, int32 z);
+	PathfinderProcess(Actor *actor, const Point3 &target);
 	~PathfinderProcess() override;
 
 	ENABLE_RUNTIME_CLASSTYPE()
diff --git a/engines/ultima/ultima8/world/actors/quick_avatar_mover_process.cpp b/engines/ultima/ultima8/world/actors/quick_avatar_mover_process.cpp
index 9ddec105314..ed93c47dc43 100644
--- a/engines/ultima/ultima8/world/actors/quick_avatar_mover_process.cpp
+++ b/engines/ultima/ultima8/world/actors/quick_avatar_mover_process.cpp
@@ -161,7 +161,8 @@ void QuickAvatarMoverProcess::run() {
 
 	if (GAME_IS_CRUSADER) {
 		// Keep the camera on the avatar while we're quick-moving.
-		CameraProcess::SetCameraProcess(new CameraProcess(pt.x + dxv, pt.y + dyv, pt.z + dzv));
+		Point3 cpt(pt.x + dxv, pt.y + dyv, pt.z + dzv);
+		CameraProcess::SetCameraProcess(new CameraProcess(cpt));
 	}
 
 	// Prevent avatar from running an idle animation while moving around
diff --git a/engines/ultima/ultima8/world/actors/rolling_thunder_process.cpp b/engines/ultima/ultima8/world/actors/rolling_thunder_process.cpp
index 64b12f53485..3977deb8507 100644
--- a/engines/ultima/ultima8/world/actors/rolling_thunder_process.cpp
+++ b/engines/ultima/ultima8/world/actors/rolling_thunder_process.cpp
@@ -262,11 +262,10 @@ bool RollingThunderProcess::fireDistance(Direction dir, int32 x, int32 y, int32
 			if (info.blocker->getObjId() == target->getObjId())
 				dist = MAX(abs(x - pt.x), abs(y - pt.y));
 		} else {
-			int32 ocx, ocy, ocz;
-			target->getCentre(ocx, ocy, ocz);
-			ocz = target->getTargetZRelativeToAttackerZ(z);
+			Point3 oc = target->getCentre();
+			oc.z = target->getTargetZRelativeToAttackerZ(z);
 			const int32 start[3] = {cx, cy, cz};
-			const int32 end[3] = {ocx, ocy, ocz};
+			const int32 end[3] = {oc.x, oc.y, oc.z};
 			const int32 dims[3] = {2, 2, 2};
 
 			Std::list<CurrentMap::SweepItem> collisions;
diff --git a/engines/ultima/ultima8/world/actors/u8_avatar_mover_process.cpp b/engines/ultima/ultima8/world/actors/u8_avatar_mover_process.cpp
index 8756f4b5ba0..6f82853fd89 100644
--- a/engines/ultima/ultima8/world/actors/u8_avatar_mover_process.cpp
+++ b/engines/ultima/ultima8/world/actors/u8_avatar_mover_process.cpp
@@ -757,11 +757,10 @@ void U8AvatarMoverProcess::jump(Animation::Sequence action, Direction direction)
 		ObjId targetId = gameMap->TraceCoordinates(mx, my, coords);
 		Item *target = getItem(targetId);
 
-		int32 ax, ay, az;
-		avatar->getCentre(ax, ay, az);
+		Point3 a = avatar->getCentre();
 
-		int32 xrange = abs(ax - coords.x);
-		int32 yrange = abs(ay - coords.y);
+		int32 xrange = abs(a.x - coords.x);
+		int32 yrange = abs(a.y - coords.y);
 		int maxrange = avatar->getStr() * 32;
 
 		if (target && target->getShapeInfo()->is_land() &&
diff --git a/engines/ultima/ultima8/world/camera_process.cpp b/engines/ultima/ultima8/world/camera_process.cpp
index 4b716427d94..a11ea3f14c9 100644
--- a/engines/ultima/ultima8/world/camera_process.cpp
+++ b/engines/ultima/ultima8/world/camera_process.cpp
@@ -64,6 +64,10 @@ void CameraProcess::ResetCameraProcess() {
 }
 
 void CameraProcess::moveToLocation(int32 x, int32 y, int32 z) {
+	moveToLocation(Point3(x, y, z));
+}
+
+void CameraProcess::moveToLocation(const Point3 &p) {
 	if (_itemNum) {
 		Item *item = getItem(_itemNum);
 		if (item)
@@ -73,9 +77,7 @@ void CameraProcess::moveToLocation(int32 x, int32 y, int32 z) {
 
 	_s.x = _s.y = _s.z = _time = _elapsed = _lastFrameNum = 0;
 	_eqX = _eqY = _earthquake = 0;
-	_e.x = x;
-	_e.y = y;
-	_e.z = z;
+	_e = p;
 	_s = GetCameraLocation();
 }
 
@@ -129,14 +131,14 @@ CameraProcess::CameraProcess(uint16 _itemnum) :
 }
 
 // Stay over point
-CameraProcess::CameraProcess(int32 x, int32 y, int32 z) :
-	_e(x, y, z), _time(0), _elapsed(0), _itemNum(0), _lastFrameNum(0) {
+CameraProcess::CameraProcess(const Point3 &p) :
+	_e(p), _time(0), _elapsed(0), _itemNum(0), _lastFrameNum(0) {
 	_s = GetCameraLocation();
 }
 
 // Scroll
-CameraProcess::CameraProcess(int32 x, int32 y, int32 z, int32 time) :
-	_e(x, y, z), _time(time), _elapsed(0), _itemNum(0), _lastFrameNum(0) {
+CameraProcess::CameraProcess(const Point3 &p, int32 time) :
+	_e(p), _time(time), _elapsed(0), _itemNum(0), _lastFrameNum(0) {
 	_s = GetCameraLocation();
 	debug(10, "Scrolling from (%d, %d,%d) to (%d, %d, %d) in %d frames",
 		_s.x, _s.y, _s.z, _e.x, _e.y, _e.z,  _time);
@@ -343,7 +345,8 @@ uint32 CameraProcess::I_moveTo(const uint8 *args, unsigned int argsize) {
 	}
 
 	World_FromUsecodeXY(x, y);
-	CameraProcess::SetCameraProcess(new CameraProcess(x, y, z));
+	Point3 pt(x, y, z);
+	CameraProcess::SetCameraProcess(new CameraProcess(pt));
 	return 0;
 }
 
@@ -362,7 +365,8 @@ uint32 CameraProcess::I_scrollTo(const uint8 *args, unsigned int /*argsize*/) {
 	ARG_NULL16(); // some uint16?
 
 	World_FromUsecodeXY(x, y);
-	return CameraProcess::SetCameraProcess(new CameraProcess(x, y, z, 25));
+	Point3 pt(x, y, z);
+	return CameraProcess::SetCameraProcess(new CameraProcess(pt, 25));
 }
 
 //	Camera::startQuake(word)
diff --git a/engines/ultima/ultima8/world/camera_process.h b/engines/ultima/ultima8/world/camera_process.h
index 7056142e1a5..48ab04e9a0f 100644
--- a/engines/ultima/ultima8/world/camera_process.h
+++ b/engines/ultima/ultima8/world/camera_process.h
@@ -41,9 +41,9 @@ namespace Ultima8 {
 class CameraProcess : public Process {
 public:
 	CameraProcess();
-	CameraProcess(uint16 itemnum);                          // Follow item/Do nothing
-	CameraProcess(int32 x, int32 y, int32 z);               // Goto location
-	CameraProcess(int32 x, int32 y, int32 z, int32 time);   // Scroll to location
+	CameraProcess(uint16 itemnum);                // Follow item/Do nothing
+	CameraProcess(const Point3 &p);               // Goto location
+	CameraProcess(const Point3 &p, int32 time);   // Scroll to location
 
 	~CameraProcess() override;
 
@@ -67,6 +67,7 @@ public:
 	 * so other pending events will all happen before the fast area is updated
 	 */
 	void moveToLocation(int32 x, int32 y, int32 z);
+	void moveToLocation(const Point3 &p);
 
 	INTRINSIC(I_setCenterOn);
 	INTRINSIC(I_moveTo);
diff --git a/engines/ultima/ultima8/world/damage_info.cpp b/engines/ultima/ultima8/world/damage_info.cpp
index 9b095f744ae..e18c6db1e20 100644
--- a/engines/ultima/ultima8/world/damage_info.cpp
+++ b/engines/ultima/ultima8/world/damage_info.cpp
@@ -76,7 +76,7 @@ bool DamageInfo::applyToItem(Item *item, uint16 points) const {
 		uint16 replacementShape = getReplacementShape();
 		uint8 replacementFrame = getReplacementFrame();
 		Item *newitem = ItemFactory::createItem(replacementShape, replacementFrame, q, 0, 0, mapnum, 0, true);
-		newitem->move(pt.x, pt.y, pt.z);
+		newitem->move(pt);
 		if (item)
 			item->destroy();
 	} else if (!explodeDestroysItem()) {
diff --git a/engines/ultima/ultima8/world/fireball_process.cpp b/engines/ultima/ultima8/world/fireball_process.cpp
index be418aed561..99c4ee7cce7 100644
--- a/engines/ultima/ultima8/world/fireball_process.cpp
+++ b/engines/ultima/ultima8/world/fireball_process.cpp
@@ -124,7 +124,7 @@ void FireballProcess::run() {
 	Item *tailitem = getItem(_tail[2]);
 	Direction movedir = Direction_GetWorldDir(_ySpeed, _xSpeed, dirmode_8dirs);
 	tailitem->setFrame(Direction_ToUsecodeDir(movedir));
-	tailitem->move(pt1.x, pt1.y, pt1.z);
+	tailitem->move(pt1);
 
 	_tail[2] = _tail[1];
 	_tail[1] = _tail[0];
@@ -179,12 +179,14 @@ uint32 FireballProcess::I_TonysBalls(const uint8 *args,
 		warning("I_TonysBalls failed to create item (260, 4).");
 		return 0;
 	}
-	if (!ball->canExistAt(x, y, z)) {
+
+	Point3 pt(x, y, z);
+	if (!ball->canExistAt(pt)) {
 		warning("I_TonysBalls: failed to create fireball.");
 		ball->destroy();
 		return 0;
 	}
-	ball->move(x, y, z);
+	ball->move(pt);
 
 	MainActor *avatar = getMainActor();
 
diff --git a/engines/ultima/ultima8/world/gravity_process.cpp b/engines/ultima/ultima8/world/gravity_process.cpp
index 4420b7c1b4e..9b215c2f597 100644
--- a/engines/ultima/ultima8/world/gravity_process.cpp
+++ b/engines/ultima/ultima8/world/gravity_process.cpp
@@ -160,7 +160,7 @@ void GravityProcess::run() {
 			termFlag = false;
 			_zSpeed = 0;
 
-			item->getCentre(pt.x, pt.y, pt.z);
+			pt = item->getCentre();
 			target = hititem->getWorldBox();
 			if (ABS(_xSpeed) < 16) {
 				if (pt.x + 16 > target._x)
diff --git a/engines/ultima/ultima8/world/item.cpp b/engines/ultima/ultima8/world/item.cpp
index 493e541644f..dd12ae78c1c 100644
--- a/engines/ultima/ultima8/world/item.cpp
+++ b/engines/ultima/ultima8/world/item.cpp
@@ -151,6 +151,12 @@ void Item::setLocation(int32 X, int32 Y, int32 Z) {
 	_z = Z;
 }
 
+void Item::setLocation(const Point3 &pt) {
+	_x = pt.x;
+	_y = pt.y;
+	_z = pt.z;
+}
+
 void Item::move(const Point3 &pt) {
 	move(pt.x, pt.y, pt.z);
 }
@@ -451,18 +457,20 @@ void Item::randomGumpLocation() {
 	_y = 0xFFFF;
 }
 
-void Item::getCentre(int32 &X, int32 &Y, int32 &Z) const {
+Point3 Item::getCentre() const {
 	// constants!
+	Point3 pt(_x, _y, _z);
 	const ShapeInfo *shapeinfo = getShapeInfo();
 	if (_flags & FLG_FLIPPED) {
-		X = _x - shapeinfo->_y * 16;
-		Y = _y - shapeinfo->_x * 16;
+		pt.x -= shapeinfo->_y * 16;
+		pt.y -= shapeinfo->_x * 16;
 	} else {
-		X = _x - shapeinfo->_x * 16;
-		Y = _y - shapeinfo->_y * 16;
+		pt.x -= shapeinfo->_x * 16;
+		pt.y -= shapeinfo->_y * 16;
 	}
 
-	Z = _z + shapeinfo->_z * 4;
+	pt.y += shapeinfo->_z * 4;
+	return pt;
 }
 
 Box Item::getWorldBox() const {
@@ -594,21 +602,19 @@ bool Item::isCompletelyOn(const Item &item2) const {
 }
 
 bool Item::isCentreOn(const Item &item2) const {
-	int32 x1c, y1c, z1c;
 	int32 x2a, y2a, z2b;
+	Point3 pt1 = getCentre();
 	Point3 pt2 = item2.getLocation();
 
-	getCentre(x1c, y1c, z1c);
-
 	int32 xd, yd, zd;
 	item2.getFootpadWorld(xd, yd, zd);
 	x2a = pt2.x - xd;
 	y2a = pt2.y - yd;
 	z2b = pt2.z + zd;
 
-	if (x1c <= x2a || pt2.x <= x1c)
+	if (pt1.x <= x2a || pt2.x <= pt1.x)
 		return false;
-	if (y1c <= y2a || pt2.y <= y1c)
+	if (pt1.y <= y2a || pt2.y <= pt1.y)
 		return false;
 	if (z2b == getZ())
 		return true;
@@ -678,21 +684,21 @@ bool Item::canExistAt(int32 x, int32 y, int32 z, bool needsupport) const {
 	return info.valid && (!needsupport || info.supported);
 }
 
-Direction Item::getDirToItemCentre(const Item &item2) const {
-	int32 xv, yv, zv;
-	getCentre(xv, yv, zv);
+bool Item::canExistAt(const Point3 &pt, bool needsupport) const {
+	return canExistAt(pt.x, pt.y, pt.z, needsupport);
+}
 
-	int32 i2x, i2y, i2z;
-	item2.getCentre(i2x, i2y, i2z);
+Direction Item::getDirToItemCentre(const Item &item2) const {
+	Point3 i1 = getCentre();
+	Point3 i2 = item2.getCentre();
 
-	return Direction_GetWorldDir(i2y - yv, i2x - xv, dirmode_8dirs);
+	return Direction_GetWorldDir(i2.y - i1.y, i2.x - i1.x, dirmode_8dirs);
 }
 
 Direction Item::getDirToItemCentre(const Point3 &pt) const {
-	int32 xv, yv, zv;
-	getCentre(xv, yv, zv);
+	Point3 i1 = getCentre();
 
-	return Direction_GetWorldDir(pt.y - yv, pt.x - xv, dirmode_8dirs);
+	return Direction_GetWorldDir(pt.y - i1.y, pt.x - i1.x, dirmode_8dirs);
 }
 
 
@@ -736,12 +742,13 @@ int Item::getRange(const Item &item2, bool checkz) const {
 int Item::getRangeIfVisible(const Item &item2) const {
 	World *world = World::get_instance();
 	CurrentMap *map = world->getCurrentMap();
-	int32 start[3];
-	int32 end[3];
-	int32 dims[3] = {1, 1, 1};
 	Std::list<CurrentMap::SweepItem> hitItems;
-	getCentre(start[0], start[1], start[2]);
-	item2.getCentre(end[0], end[1], end[2]);
+
+	Point3 pt1 = getCentre();
+	Point3 pt2 = item2.getCentre();
+	int32 start[3] = {pt1.x, pt1.y, pt1.z};
+	int32 end[3] = {pt2.x, pt2.y, pt2.z};
+	int32 dims[3] = {1, 1, 1};
 
 	int xdiff = abs(start[0] - end[0]);
 	int ydiff = abs(start[1] - end[1]);
@@ -1326,12 +1333,10 @@ uint16 Item::fireWeapon(int32 x, int32 y, int32 z, Direction dir, int firetype,
 		}
 	}
 
-	int32 tx = -1;
-	int32 ty = 0;
-	int32 tz = 0;
+	Point3 t(-1, 0, 0);
 	if (target) {
-		target->getCentre(tx, ty, tz);
-		tz = target->getTargetZRelativeToAttackerZ(getZ());
+		t = target->getCentre();
+		t.z = target->getTargetZRelativeToAttackerZ(getZ());
 	}
 
 	// TODO: check if we need the equivalent of FUN_1130_0299 here..
@@ -1346,11 +1351,9 @@ uint16 Item::fireWeapon(int32 x, int32 y, int32 z, Direction dir, int firetype,
 		assert(chp);
 		const Item *crosshair = getItem(chp->getItemNum());
 		Point3 ss;
-		if (tx != -1) {
+		if (t.x != -1) {
 			// Shoot toward the target
-			ss.x = tx;
-			ss.y = ty;
-			ss.z = tz;
+			ss = t;
 			findtarget = true;
 		} else if (this == getControlledActor() && crosshair) {
 			// Shoot toward the crosshair
@@ -1454,11 +1457,10 @@ uint16 Item::fireDistance(const Item *other, Direction dir, int16 xoff, int16 yo
 			if (info.blocker->getObjId() == other->getObjId())
 				dist = MAX(abs(_x - pto.x), abs(_y - pto.y));
 		} else {
-			int32 ocx, ocy, ocz;
-			other->getCentre(ocx, ocy, ocz);
-			ocz = other->getTargetZRelativeToAttackerZ(getZ());
+			Point3 oc = other->getCentre();
+			oc.z = other->getTargetZRelativeToAttackerZ(getZ());
 			const int32 start[3] = {cx, cy, cz};
-			const int32 end[3] = {ocx, ocy, ocz};
+			const int32 end[3] = {oc.x, oc.y, oc.z};
 			const int32 dims[3] = {2, 2, 2};
 
 			Std::list<CurrentMap::SweepItem> collisions;
@@ -2117,8 +2119,9 @@ int32 Item::ascend(int delta) {
 		_iy = pti.y;
 		_iz = pti.z;
 
-		if (item->canExistAt(_ix, _iy, _iz + delta)) {
-			item->move(_ix, _iy, _iz + delta); // automatically un-etherealizes item
+		pti.z += delta;
+		if (item->canExistAt(pti)) {
+			item->move(pti); // automatically un-etherealizes item
 		} else {
 			// uh oh...
 			// CHECKME: what do we do here?
@@ -2222,8 +2225,7 @@ void Item::explode(int explosion_type, bool destroy_item, bool cause_damage) {
 
 		setFlag(FLG_BROKEN);
 		// TODO: original game puts them at cx/cy/cz, but that looks wrong..
-		int32 cx, cy, cz;
-		getCentre(cx, cy, cz);
+		Point3 c = getCentre();
 		static const int expshapes[] = {0x31C, 0x31F, 0x326, 0x320, 0x321, 0x324, 0x323, 0x325};
 		uint rnd = rs.getRandomNumber(UINT_MAX);
 		int spriteno;
@@ -2242,7 +2244,7 @@ void Item::explode(int explosion_type, bool destroy_item, bool cause_damage) {
 			break;
 		}
 		p = new SpriteProcess(spriteno, 0, 39, 1, 1, //!! constants
-	                               _x, _y, cz);
+	                               _x, _y, c.z);
 	} else {
 		p = new SpriteProcess(578, 20, 34, 1, 1, //!! constants
 	                               _x, _y, _z);
diff --git a/engines/ultima/ultima8/world/item.h b/engines/ultima/ultima8/world/item.h
index a1e23928b52..4cd9fae65ba 100644
--- a/engines/ultima/ultima8/world/item.h
+++ b/engines/ultima/ultima8/world/item.h
@@ -71,6 +71,7 @@ public:
 	//! Set item location. This strictly sets the location, and does not
 	//! even update CurrentMap
 	void setLocation(int32 x, int32 y, int32 z); // this only sets the loc.
+	void setLocation(const Point3 &pt); // this only sets the loc.
 
 	//! Move an item. This moves an item to the new location, and updates
 	//! CurrentMap and fastArea if necessary.
@@ -127,7 +128,7 @@ public:
 
 	//! Get the world coordinates of the Item's centre. Undefined if the Item
 	//! is contained or equipped.
-	void getCentre(int32 &x, int32 &y, int32 &z) const;
+	Point3 getCentre() const;
 
 	//! Get the size of this item's 3D bounding box, in world coordinates.
 	inline void getFootpadWorld(int32 &x, int32 &y, int32 &z) const;
@@ -299,6 +300,7 @@ public:
 
 	//! Check if this item can exist at the given coordinates
 	bool canExistAt(int32 x, int32 y, int32 z, bool needsupport = false) const;
+	bool canExistAt(const Point3 &pt, bool needsupport = false) const;
 
 	//! Get direction from centre to another item's centre.
 	//! Undefined if either item is contained or equipped.
diff --git a/engines/ultima/ultima8/world/item_selection_process.cpp b/engines/ultima/ultima8/world/item_selection_process.cpp
index 4969b2fdc53..ab52f03501e 100644
--- a/engines/ultima/ultima8/world/item_selection_process.cpp
+++ b/engines/ultima/ultima8/world/item_selection_process.cpp
@@ -63,7 +63,9 @@ bool ItemSelectionProcess::selectNextItem(bool grab) {
 	if (!mainactor || !currentmap)
 		return false;
 
-	mainactor->getCentre(_ax, _ay, _az);
+	Point3 pt = mainactor->getCentre();
+	_ax = pt.x;
+	_ay = pt.y;
 	_az = mainactor->getZ();
 
 	UCList uclist(2);
@@ -91,10 +93,9 @@ bool ItemSelectionProcess::selectNextItem(bool grab) {
 			family == ShapeInfo::SF_CRUINVITEM ||
 			(info && (info->_flags & ShapeInfo::SI_CRU_SELECTABLE))) {
 
-			int32 cx, cy, cz;
-			item->getCentre(cx, cy, cz);
+			Point3 c = item->getCentre();
 			int32 iz = item->getZ();
-			if (abs(cx - _ax) > 0x100 || abs(cy - _ay) > 0x100 ||
+			if (abs(c.x - _ax) > 0x100 || abs(c.y - _ay) > 0x100 ||
 				(iz - _az) >= 0x50 || (_az - iz) >= 0x18)
 				continue;
 
@@ -171,9 +172,8 @@ void ItemSelectionProcess::avatarMoved() {
 
 	// Only clear if actor has moved a little
 	if (item && mainactor) {
-		int32 ax, ay, az;
-		mainactor->getCentre(ax, ay, az);
-		uint32 range = MAX(abs(ax - _ax), MAX(abs(ay - _ay), abs(az - _az)));
+		Point3 a = mainactor->getCentre();
+		uint32 range = MAX(abs(a.x - _ax), MAX(abs(a.y - _ay), abs(a.z - _az)));
 		if (range > 16)
 			clearSelection();
 	}
@@ -192,16 +192,15 @@ void ItemSelectionProcess::clearSelection() {
 
 void ItemSelectionProcess::putItemSelectionOnItem(Item *item) {
 	assert(item);
-	int32 x, y, z;
 
 	clearSelection();
 
-	item->getCentre(x, y, z);
+	Point3 pt = item->getCentre();
 	_selectedItem = item->getObjId();
 
 	Item *sprite = ItemFactory::createItem(SELECTOR_SHAPE, 0, 0, Item::FLG_DISPOSABLE,
 										   0, 0, Item::EXT_SPRITE, true);
-	sprite->move(x, y, z);
+	sprite->move(pt);
 	setItemNum(sprite->getObjId());
 }
 
diff --git a/engines/ultima/ultima8/world/map.cpp b/engines/ultima/ultima8/world/map.cpp
index 1ca363d8b13..f54f4047469 100644
--- a/engines/ultima/ultima8/world/map.cpp
+++ b/engines/ultima/ultima8/world/map.cpp
@@ -21,6 +21,7 @@
 
 #include "ultima/ultima.h"
 #include "ultima/ultima8/misc/debugger.h"
+#include "ultima/ultima8/misc/point3.h"
 #include "ultima/ultima8/world/map.h"
 #include "ultima/ultima8/world/item_factory.h"
 #include "ultima/ultima8/world/container.h"
@@ -148,7 +149,7 @@ void Map::loadFixed(Common::SeekableReadStream *rs) {
 				if ((pt.x == 23007 && pt.y == 21343) || (pt.x == 23135 && pt.y == 21471) ||
 				        (pt.x == 23135 && pt.y == 21343)) {
 					shiftCoordsToZ(pt.x, pt.y, pt.z, 40);
-					(*iter)->setLocation(pt.x, pt.y, pt.z);
+					(*iter)->setLocation(pt);
 				}
 			}
 		}
@@ -165,7 +166,7 @@ void Map::loadFixed(Common::SeekableReadStream *rs) {
 				Point3 pt = (*iter)->getLocation();
 				if ((pt.x == 6783 || pt.x == 6655) && (pt.y == 15743 || pt.y == 15615)) {
 					shiftCoordsToZ(pt.x, pt.y, pt.z, 16);
-					(*iter)->setLocation(pt.x, pt.y, pt.z);
+					(*iter)->setLocation(pt);
 				}
 			}
 		}
@@ -183,7 +184,7 @@ void Map::loadFixed(Common::SeekableReadStream *rs) {
 				        (pt.x == 10303 && pt.y == 23487) || (pt.x == 9919 && pt.y == 23487) ||
 				        (pt.x == 10559 && pt.y == 23487)) {
 					shiftCoordsToZ(pt.x, pt.y, pt.z, 48);
-					(*iter)->setLocation(pt.x, pt.y, pt.z);
+					(*iter)->setLocation(pt);
 				}
 			}
 		}
diff --git a/engines/ultima/ultima8/world/snap_process.cpp b/engines/ultima/ultima8/world/snap_process.cpp
index 04443193a99..40145f80f69 100644
--- a/engines/ultima/ultima8/world/snap_process.cpp
+++ b/engines/ultima/ultima8/world/snap_process.cpp
@@ -55,13 +55,12 @@ void SnapProcess::run() {
 	if (snap_to_player && !in_stasis) {
 		const Actor *controlled = getControlledActor();
 		if (controlled) {
-			int32 x, y, z;
-			controlled->getCentre(x, y, z);
-			if (x > 0 || y > 0) {
+			Point3 pt = controlled->getCentre();
+			if (pt.x > 0 || pt.y > 0) {
 				_currentSnapEgg = 0;
 				CameraProcess *camera = CameraProcess::GetCameraProcess();
 				if (camera->getItemNum() != controlled->getObjId())
-					CameraProcess::SetCameraProcess(new CameraProcess(x, y, z));
+					CameraProcess::SetCameraProcess(new CameraProcess(pt));
 			}
 		}
 	} else {
diff --git a/engines/ultima/ultima8/world/super_sprite_process.cpp b/engines/ultima/ultima8/world/super_sprite_process.cpp
index cb72b8aed18..52eb19db9ea 100644
--- a/engines/ultima/ultima8/world/super_sprite_process.cpp
+++ b/engines/ultima/ultima8/world/super_sprite_process.cpp
@@ -184,10 +184,9 @@ void SuperSpriteProcess::run() {
 				} else {
 					const Item *target = getItem(_target);
 					if (target) {
-						int32 cx, cy, cz;
 						Point3 ptt = target->getLocation();
-						target->getCentre(cx, cy, cz);
-						targetz = cz + 8;
+						Point3 ptc = target->getCentre();
+						targetz = ptc.z + 8;
 						dir8 = Direction_GetWorldDir(ptt.y - _nowpt.y, ptt.x - _nowpt.x, dirmode_8dirs);
 					}
 				}
diff --git a/engines/ultima/ultima8/world/target_reticle_process.cpp b/engines/ultima/ultima8/world/target_reticle_process.cpp
index 0426fff42c2..7dd3e23d779 100644
--- a/engines/ultima/ultima8/world/target_reticle_process.cpp
+++ b/engines/ultima/ultima8/world/target_reticle_process.cpp
@@ -131,26 +131,24 @@ void TargetReticleProcess::avatarMoved() {
 }
 
 void TargetReticleProcess::putTargetReticleOnItem(Item *item, bool only_last_frame) {
-	int32 x, y, z;
-
 	// TODO: the game does a bunch of other maths here to pick the right location.
 	// This is an over-simplification and is usually too high so it's
 	// hacked a little lower.
-	item->getCentre(x, y, z);
-	z -= 8;
+	Point3 pt = item->getCentre();
+	pt.z -= 8;
 
 	Process *p;
 	const int first_frame = _reticleStyle * 6;
 	const int last_frame = first_frame + 5;
 	if (!only_last_frame)
-		p = new SpriteProcess(0x59a, first_frame, last_frame, 1, 10, x, y, z, false);
+		p = new SpriteProcess(0x59a, first_frame, last_frame, 1, 10, pt.x, pt.y, pt.z, false);
 	else
-		p = new SpriteProcess(0x59a, last_frame, last_frame, 1, 1000, x, y, z, false);
+		p = new SpriteProcess(0x59a, last_frame, last_frame, 1, 1000, pt.x, pt.y, pt.z, false);
 
 	_reticleSpriteProcess = Kernel::get_instance()->addProcess(p);
 	_lastTargetItem = item->getObjId();
 	item->setExtFlag(Item::EXT_TARGET);
-	debug("New reticle target: %d (%d, %d, %d)", _lastTargetItem, x, y, z);
+	debug("New reticle target: %d (%d, %d, %d)", _lastTargetItem, pt.x, pt.y, pt.z);
 }
 
 void TargetReticleProcess::itemMoved(Item *item) {
@@ -160,8 +158,7 @@ void TargetReticleProcess::itemMoved(Item *item) {
 		return;
 	}
 
-	int32 x, y, z;
-	item->getCentre(x, y, z);
+	Point3 pt = item->getCentre();
 
 	Actor *mainactor = getControlledActor();
 	int actordir = -1;
@@ -179,7 +176,7 @@ void TargetReticleProcess::itemMoved(Item *item) {
 			_reticleSpriteProcess = 0;
 			clearSprite();
 		} else {
-			spriteproc->move(x, y, z);
+			spriteproc->move(pt.x, pt.y, pt.z);
 		}
 	}
 }
diff --git a/engines/ultima/ultima8/world/world.cpp b/engines/ultima/ultima8/world/world.cpp
index 27d855144e4..f2f23f7c4f7 100644
--- a/engines/ultima/ultima8/world/world.cpp
+++ b/engines/ultima/ultima8/world/world.cpp
@@ -558,9 +558,8 @@ void World::setControlledNPCNum(uint16 num) {
 			if (controlled->isInCombat())
 				controlled->clearInCombat();
 		}
-		int32 x, y, z;
-		controlled->getCentre(x, y, z);
-		CameraProcess::SetCameraProcess(new CameraProcess(x, y, z));
+		Point3 pt = controlled->getCentre();
+		CameraProcess::SetCameraProcess(new CameraProcess(pt));
 	}
 
 	TargetReticleProcess *t = TargetReticleProcess::get_instance();




More information about the Scummvm-git-logs mailing list