[Scummvm-git-logs] scummvm master -> 532998effb27373e45283dda0db1b8975f2f8517

OMGPizzaGuy noreply at scummvm.org
Fri May 31 01:10:31 UTC 2024


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

Summary:
c8ffaf34d2 ULTIMA8: Define enum for reserved object identifiers
532998effb ULTIMA8: Define max item quantity constant


Commit: c8ffaf34d22a91d2d900c7e76a2f6ac32e4dbbeb
    https://github.com/scummvm/scummvm/commit/c8ffaf34d22a91d2d900c7e76a2f6ac32e4dbbeb
Author: Matthew Jimenez (matthew.jimenez at outlook.com)
Date: 2024-05-30T20:10:13-05:00

Commit Message:
ULTIMA8: Define enum for reserved object identifiers

Changed paths:
    engines/ultima/ultima8/games/u8_game.cpp
    engines/ultima/ultima8/gumps/bark_gump.cpp
    engines/ultima/ultima8/gumps/game_map_gump.cpp
    engines/ultima/ultima8/kernel/object.h
    engines/ultima/ultima8/kernel/object_manager.cpp
    engines/ultima/ultima8/misc/debugger.cpp
    engines/ultima/ultima8/ultima8.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/grant_peace_process.cpp
    engines/ultima/ultima8/world/actors/u8_avatar_mover_process.cpp
    engines/ultima/ultima8/world/container.cpp
    engines/ultima/ultima8/world/get_object.cpp
    engines/ultima/ultima8/world/item.cpp
    engines/ultima/ultima8/world/item_sorter.cpp
    engines/ultima/ultima8/world/world.cpp


diff --git a/engines/ultima/ultima8/games/u8_game.cpp b/engines/ultima/ultima8/games/u8_game.cpp
index 138815678b7..b8e3cb937c0 100644
--- a/engines/ultima/ultima8/games/u8_game.cpp
+++ b/engines/ultima/ultima8/games/u8_game.cpp
@@ -96,8 +96,8 @@ bool U8Game::startGame() {
 	for (uint16 i = 384; i < 512; ++i)
 		objman->reserveObjId(i);
 
-	// reserve ObjId 666 for the Guardian Bark hack
-	objman->reserveObjId(666);
+	// Reserved for the Guardian Bark hack
+	objman->reserveObjId(kGuardianId);
 
 	auto *savers = new Common::File();
 	if (!savers->open("savegame/u8save.000")) {
diff --git a/engines/ultima/ultima8/gumps/bark_gump.cpp b/engines/ultima/ultima8/gumps/bark_gump.cpp
index b59505d1d16..33a2c1c52b6 100644
--- a/engines/ultima/ultima8/gumps/bark_gump.cpp
+++ b/engines/ultima/ultima8/gumps/bark_gump.cpp
@@ -61,7 +61,7 @@ BarkGump::~BarkGump(void) {
 
 int BarkGump::dialogFontForActor(uint16 actor) {
 	// OK, this is a bit of a hack, but it's how it has to be
-	if (actor == 1)
+	if (actor == kMainActorId)
 		return 6;
 	if (actor > 256)
 		return 8;
diff --git a/engines/ultima/ultima8/gumps/game_map_gump.cpp b/engines/ultima/ultima8/gumps/game_map_gump.cpp
index 87402171e8c..e7b9cfe25ef 100644
--- a/engines/ultima/ultima8/gumps/game_map_gump.cpp
+++ b/engines/ultima/ultima8/gumps/game_map_gump.cpp
@@ -146,7 +146,7 @@ void GameMapGump::PaintThis(RenderSurface *surf, int32 lerp_factor, bool scaled)
 					// HACK: unless EXT_TRANSPARENT is also set.
 					// (Used for hiding the avatar when drawing a full area map)
 
-					if (item->getObjId() == 1) {
+					if (item->getObjId() == kMainActorId) {
 						if (item->hasExtFlags(Item::EXT_TRANSPARENT))
 							continue;
 
@@ -423,7 +423,7 @@ bool GameMapGump::DraggingItem(Item *item, int mx, int my) {
 		return false;
 
 	MainActor *avatar = getMainActor();
-	if (trace == 1) { // dropping on self
+	if (trace == kMainActorId) { // dropping on self
 		ObjId bp = avatar->getEquip(ShapeInfo::SE_BACKPACK);
 		Container *backpack = getContainer(bp);
 		return  backpack->CanAddItem(item, true);
@@ -541,7 +541,7 @@ void GameMapGump::DropItem(Item *item, int mx, int my) {
 		}
 	}
 
-	if (trace == 1) { // dropping on self
+	if (trace == kMainActorId) { // dropping on self
 		ObjId bp = avatar->getEquip(ShapeInfo::SE_BACKPACK);
 		Container *backpack = getContainer(bp);
 		if (backpack && item->moveToContainer(backpack)) {
diff --git a/engines/ultima/ultima8/kernel/object.h b/engines/ultima/ultima8/kernel/object.h
index bcf554a896a..58868e92a11 100644
--- a/engines/ultima/ultima8/kernel/object.h
+++ b/engines/ultima/ultima8/kernel/object.h
@@ -28,6 +28,12 @@
 namespace Ultima {
 namespace Ultima8 {
 
+enum ReservedObjId {
+	kUndefinedId = 0,
+	kMainActorId = 1,
+	kGuardianId  = 666
+};
+
 class Usecode;
 
 class Object {
diff --git a/engines/ultima/ultima8/kernel/object_manager.cpp b/engines/ultima/ultima8/kernel/object_manager.cpp
index eb3229546ec..7fd068e36d0 100644
--- a/engines/ultima/ultima8/kernel/object_manager.cpp
+++ b/engines/ultima/ultima8/kernel/object_manager.cpp
@@ -110,7 +110,7 @@ void ObjectManager::reset() {
 	_objects.clear();
 	_objects.resize(65536);
 	_objIDs->clearAll(32766);
-	_objIDs->reserveID(666);     // 666 is reserved for the Guardian Bark hack
+	_objIDs->reserveID(kGuardianId);     // Reserved for the Guardian Bark hack
 	_actorIDs->clearAll();
 }
 
diff --git a/engines/ultima/ultima8/misc/debugger.cpp b/engines/ultima/ultima8/misc/debugger.cpp
index 25f54b29cbe..c3fc1e09833 100644
--- a/engines/ultima/ultima8/misc/debugger.cpp
+++ b/engines/ultima/ultima8/misc/debugger.cpp
@@ -1698,8 +1698,8 @@ bool Debugger::cmdU8ShapeViewer(int argc, const char **argv) {
 bool Debugger::cmdShowMenu(int argc, const char **argv) {
 	World *world = World::get_instance();
 	// In Crusader escape is also used to stop controlling another NPC
-	if (world && world->getControlledNPCNum() != 1) {
-		world->setControlledNPCNum(1);
+	if (world && world->getControlledNPCNum() != kMainActorId) {
+		world->setControlledNPCNum(kMainActorId);
 		return false;
 	}
 	if (Ultima8Engine::get_instance()->isCruStasis()) {
diff --git a/engines/ultima/ultima8/ultima8.cpp b/engines/ultima/ultima8/ultima8.cpp
index be895897d0e..ce36db7f07a 100644
--- a/engines/ultima/ultima8/ultima8.cpp
+++ b/engines/ultima/ultima8/ultima8.cpp
@@ -1101,7 +1101,7 @@ bool Ultima8Engine::newGame(int saveSlot) {
 	_game->startGame();
 
 	debugN(MM_INFO, "Create Camera...\n");
-	CameraProcess::SetCameraProcess(new CameraProcess(1)); // Follow Avatar
+	CameraProcess::SetCameraProcess(new CameraProcess(kMainActorId));
 
 	debugN(MM_INFO, "Create persistent Processes...\n");
 	if (GAME_IS_U8)
diff --git a/engines/ultima/ultima8/world/actors/actor.cpp b/engines/ultima/ultima8/world/actors/actor.cpp
index 03f455d85ab..936cee2086f 100644
--- a/engines/ultima/ultima8/world/actors/actor.cpp
+++ b/engines/ultima/ultima8/world/actors/actor.cpp
@@ -545,7 +545,7 @@ uint16 Actor::doAnim(Animation::Sequence anim, Direction dir, unsigned int steps
 	}
 
 #if 0
-	if (_objId == 1) {
+	if (_objId == kMainActorId) {
 		int32 x, y, z;
 		getLocation(x, y, z);
 		int32 actionno = AnimDat::getActionNumberForSequence(anim, this);
@@ -1177,7 +1177,7 @@ void Actor::receiveHitU8(uint16 other, Direction dir, int damage, uint16 damage_
 		damage_type = hitter->getDamageType();
 	}
 
-	if (other == 1 && attacker && attacker->getLastAnim() != Animation::kick) {
+	if (other == kMainActorId && attacker && attacker->getLastAnim() != Animation::kick) {
 		// _strength for kicks is accumulated in AvatarMoverProcess
 		MainActor *av = getMainActor();
 		av->accumulateStr(damage / 4);
@@ -1195,7 +1195,7 @@ void Actor::receiveHitU8(uint16 other, Direction dir, int damage, uint16 damage_
 	}
 
 	Common::RandomSource &rs = Ultima8Engine::get_instance()->getRandomSource();
-	if (damage >= 4 && _objId == 1 && hitter) {
+	if (damage >= 4 && _objId == kMainActorId && hitter) {
 		// play blood sprite
 		int start = 0, end = 12;
 		if (dir > dir_east) {
@@ -1232,7 +1232,7 @@ void Actor::receiveHitU8(uint16 other, Direction dir, int damage, uint16 damage_
 	}
 
 	ProcId fallingprocid = 0;
-	if (_objId == 1 && damage > 0) {
+	if (_objId == kMainActorId && damage > 0) {
 		if ((damage_type & WeaponInfo::DMG_FALLING) && damage >= 6) {
 			// high falling damage knocks you down
 			doAnim(Animation::fallBackwards, dir_current);
@@ -1245,7 +1245,7 @@ void Actor::receiveHitU8(uint16 other, Direction dir, int damage, uint16 damage_
 	}
 
 	// if avatar was blocking; do a quick stopBlock/startBlock and play SFX
-	if (_objId == 1 && getLastAnim() == Animation::startBlock) {
+	if (_objId == kMainActorId && getLastAnim() == Animation::startBlock) {
 		ProcId anim1pid = doAnim(Animation::stopBlock, dir_current);
 		ProcId anim2pid = doAnim(Animation::startBlock, dir_current);
 
@@ -1267,8 +1267,8 @@ void Actor::receiveHitU8(uint16 other, Direction dir, int damage, uint16 damage_
 
 	// TODO: target needs to stumble/fall/call for help/...(?)
 
-	if (_objId != 1) {
-		ObjId target = 1;
+	if (_objId != kMainActorId) {
+		ObjId target = kMainActorId;
 		if (attacker)
 			target = attacker->getObjId();
 		if (!isInCombat())
@@ -1278,7 +1278,7 @@ void Actor::receiveHitU8(uint16 other, Direction dir, int damage, uint16 damage_
 		assert(cp);
 		cp->setTarget(target);
 
-		if (target == 1) {
+		if (target == kMainActorId) {
 			// call for help
 		}
 	}
@@ -1328,7 +1328,7 @@ ProcId Actor::dieU8(uint16 damageType) {
 	}
 
 	// Kill blue potion use process if running
-	if (_objId == 1) {
+	if (_objId == kMainActorId) {
 		ProcessIter iter = Kernel::get_instance()->getProcessBeginIterator();
 		ProcessIter endproc = Kernel::get_instance()->getProcessEndIterator();
 		for (; iter != endproc; ++iter) {
@@ -1428,7 +1428,7 @@ ProcId Actor::dieCru(uint16 damageType, uint16 damagePts, Direction srcDir) {
 
     if (world->getControlledNPCNum() == _objId) {
 		TargetReticleProcess::get_instance()->avatarMoved();
-		if (_objId != 1) {
+		if (_objId != kMainActorId) {
 			world->setControlledNPCNum(0);
 		}
 	}
@@ -1525,7 +1525,7 @@ ProcId Actor::dieCru(uint16 damageType, uint16 damagePts, Direction srcDir) {
 				setToStartOfAnim(Animation::fallBackwardsCru);
 			}
 		}
-	} else if (damageType == 7 && _objId == 1) {
+	} else if (damageType == 7 && _objId == kMainActorId) {
 		lastanim = doAnimAfter(Animation::electrocuted, dir_current, lastanim);
 	}
 
@@ -1751,7 +1751,7 @@ int Actor::calculateAttackDamage(uint16 other, int damage, uint16 damage_type) {
 		// TODO: give avatar an extra chance to hit monsters
 		//       with defense_type DMG_PIERCE
 
-		if (hit && other == 1) {
+		if (hit && other == kMainActorId) {
 			MainActor *av = getMainActor();
 			if (attackdex > defenddex)
 				av->accumulateDex(2 * (attackdex - defenddex));
@@ -2351,7 +2351,7 @@ uint32 Actor::I_setTarget(const uint8 *args, unsigned int /*argsize*/) {
 
 		cp->setTarget(target);
 	} else {
-		if (actor->isDead() || actor->getObjId() == 1)
+		if (actor->isDead() || actor->getObjId() == kMainActorId)
 			return 0;
 
 		actor->setActivityCru(5);
diff --git a/engines/ultima/ultima8/world/actors/actor_anim_process.cpp b/engines/ultima/ultima8/world/actors/actor_anim_process.cpp
index 98b1e592f9f..85b8333c0da 100644
--- a/engines/ultima/ultima8/world/actors/actor_anim_process.cpp
+++ b/engines/ultima/ultima8/world/actors/actor_anim_process.cpp
@@ -390,9 +390,9 @@ void ActorAnimProcess::doSpecial() {
 
 	Common::RandomSource &rs = Ultima8Engine::get_instance()->getRandomSource();
 	// play SFX when Avatar draws/sheathes weapon
-	if (_itemNum == 1 && (_action == Animation::readyWeapon ||
-	                      _action == Animation::unreadyWeapon) &&
-	        a->getEquip(ShapeInfo::SE_WEAPON) != 0) {
+	if (_itemNum == kMainActorId &&
+			(_action == Animation::readyWeapon || _action == Animation::unreadyWeapon) &&
+			a->getEquip(ShapeInfo::SE_WEAPON) != 0) {
 		int sfx = rs.getRandomBit() ? 0x51 : 0x52; // constants!
 		AudioProcess *audioproc = AudioProcess::get_instance();
 		if (audioproc) audioproc->playSFX(sfx, 0x60, 1, 0);
@@ -461,7 +461,7 @@ void ActorAnimProcess::doSpecial() {
 
 	// play PC/NPC footsteps
 	bool playavfootsteps = ConfMan.getBool("footsteps");
-	if (_itemNum != 1 || playavfootsteps) {
+	if (_itemNum != kMainActorId || playavfootsteps) {
 		int32 x, y, z;
 		int32 xd, yd, zd;
 		a->getLocation(x, y, z);
@@ -532,7 +532,7 @@ void ActorAnimProcess::doFireWeaponCru(Actor *a, const AnimFrame *f) {
 	if (!wpninfo || !wpninfo->_weaponInfo)
 		return;
 
-	if (a->getObjId() == 1 && wpninfo->_weaponInfo->_damageType == 6) {
+	if (a->getObjId() == kMainActorId && wpninfo->_weaponInfo->_damageType == 6) {
 		Process *auto_firer = new AutoFirerProcess();
 		Kernel::get_instance()->addProcess(auto_firer);
 	}
diff --git a/engines/ultima/ultima8/world/actors/attack_process.cpp b/engines/ultima/ultima8/world/actors/attack_process.cpp
index 3daa078a1af..db8476deea1 100644
--- a/engines/ultima/ultima8/world/actors/attack_process.cpp
+++ b/engines/ultima/ultima8/world/actors/attack_process.cpp
@@ -851,7 +851,7 @@ void AttackProcess::checkRandomAttackSoundRegret(const Actor *actor) {
 
 /* static */
 int16 AttackProcess::getRandomAttackSoundRegret(const Actor *actor) {
-	if (World::get_instance()->getControlledNPCNum() != 1)
+	if (World::get_instance()->getControlledNPCNum() != kMainActorId)
 		return -1;
 
 	if (actor->isDead())
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 d48093511da..0ff34f034a2 100644
--- a/engines/ultima/ultima8/world/actors/cru_avatar_mover_process.cpp
+++ b/engines/ultima/ultima8/world/actors/cru_avatar_mover_process.cpp
@@ -597,7 +597,7 @@ void CruAvatarMoverProcess::tryAttack() {
 	AudioProcess *audio = AudioProcess::get_instance();
 	const WeaponInfo *wpninfo = wpn->getShapeInfo()->_weaponInfo;
 
-	if (avatar->getObjId() != 1) {
+	if (avatar->getObjId() != kMainActorId) {
 		// Non-avatar NPCs never need to reload or run out of energy.
 		Animation::Sequence fireanim = (avatar->isKneeling() ?
 										Animation::kneelAndFire : Animation::attack);
@@ -630,7 +630,7 @@ void CruAvatarMoverProcess::tryAttack() {
 			if (wpninfo->_reloadSound) {
 				audio->playSFX(0x2a, 0x80, avatar->getObjId(), 1);
 			}
-			if (avatar->getObjId() == 1 && !avatar->isKneeling()) {
+			if (avatar->getObjId() == kMainActorId && !avatar->isKneeling()) {
 				avatar->doAnim(Animation::reloadSmallWeapon, dir_current);
 			}
 
@@ -646,7 +646,7 @@ void CruAvatarMoverProcess::tryAttack() {
 			if (wpninfo->_reloadSound) {
 				audio->playSFX(0x2a, 0x80, avatar->getObjId(), 1);
 			}
-			if (avatar->getObjId() == 1) {
+			if (avatar->getObjId() == kMainActorId) {
 				avatar->doAnim(Animation::reloadSmallWeapon, dir_current);
 			}
 			_SGA1Loaded = true;
diff --git a/engines/ultima/ultima8/world/actors/grant_peace_process.cpp b/engines/ultima/ultima8/world/actors/grant_peace_process.cpp
index cc976f9d9c4..7b886554ad2 100644
--- a/engines/ultima/ultima8/world/actors/grant_peace_process.cpp
+++ b/engines/ultima/ultima8/world/actors/grant_peace_process.cpp
@@ -73,7 +73,7 @@ void GrantPeaceProcess::run() {
 	ObjId targetid = static_cast<ObjId>(_result);
 	Actor *target = getActor(targetid);
 
-	if (targetid == 1 || !target) {
+	if (targetid == kMainActorId || !target) {
 		// targeting the avatar, no target or not an Actor
 		terminate();
 		return;
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 584abc420e3..707b0a4adf4 100644
--- a/engines/ultima/ultima8/world/actors/u8_avatar_mover_process.cpp
+++ b/engines/ultima/ultima8/world/actors/u8_avatar_mover_process.cpp
@@ -181,7 +181,7 @@ void U8AvatarMoverProcess::handleCombatMode() {
 		Gump *desktopgump = Ultima8Engine::get_instance()->getDesktopGump();
 		int32 mx, my;
 		mouse->getMouseCoords(mx, my);
-		if (desktopgump->TraceObjId(mx, my) == 1) {
+		if (desktopgump->TraceObjId(mx, my) == kMainActorId) {
 			// double right click on avatar = toggle combat mode
 			avatar->toggleInCombat();
 			waitFor(avatar->doAnim(Animation::unreadyWeapon, direction));
@@ -449,7 +449,7 @@ void U8AvatarMoverProcess::handleNormalMode() {
 		Gump *desktopgump = Ultima8Engine::get_instance()->getDesktopGump();
 		int32 mx, my;
 		mouse->getMouseCoords(mx, my);
-		if (desktopgump->TraceObjId(mx, my) == 1) {
+		if (desktopgump->TraceObjId(mx, my) == kMainActorId) {
 			// double right click on avatar = toggle combat mode
 			_mouseButton[1].setState(MBS_HANDLED);
 			_mouseButton[1]._lastDown = 0;
diff --git a/engines/ultima/ultima8/world/container.cpp b/engines/ultima/ultima8/world/container.cpp
index 4377ebc7212..c9e82468c7b 100644
--- a/engines/ultima/ultima8/world/container.cpp
+++ b/engines/ultima/ultima8/world/container.cpp
@@ -124,7 +124,7 @@ bool Container::CanAddItem(Item *item, bool checkwghtvol) {
 		const Item *current = item->getTopItem();
 
 		// From outside to inside Avatar's inventory?
-		if (p->getObjId() == 1 && current->getObjId() != 1) {
+		if (p->getObjId() == kMainActorId && current->getObjId() != kMainActorId) {
 			MainActor *av = getMainActor();
 			unsigned int str = av->getStr();
 			// FIXME: this check isn't entirely correct. (combining items,...?)
diff --git a/engines/ultima/ultima8/world/get_object.cpp b/engines/ultima/ultima8/world/get_object.cpp
index 0bfd409c68f..7cc70240519 100644
--- a/engines/ultima/ultima8/world/get_object.cpp
+++ b/engines/ultima/ultima8/world/get_object.cpp
@@ -48,7 +48,7 @@ Actor *getActor(ObjId id) {
 }
 
 MainActor *getMainActor() {
-	return dynamic_cast<MainActor *>(ObjectManager::get_instance()->getObject(1));
+	return dynamic_cast<MainActor *>(ObjectManager::get_instance()->getObject(kMainActorId));
 }
 
 Actor *getControlledActor() {
diff --git a/engines/ultima/ultima8/world/item.cpp b/engines/ultima/ultima8/world/item.cpp
index 6384f0d7f78..87f1b29fafa 100644
--- a/engines/ultima/ultima8/world/item.cpp
+++ b/engines/ultima/ultima8/world/item.cpp
@@ -160,8 +160,8 @@ void Item::move(int32 X, int32 Y, int32 Z) {
 	CurrentMap *map = World::get_instance()->getCurrentMap();
 	int mapChunkSize = map->getChunkSize();
 
-	if (getObjId() == 1 && Z < 0) {
-		warning("Moving avatar below Z=0. (%d,%d,%d)", X, Y, Z);
+	if (getObjId() == kMainActorId && Z < 0) {
+		warning("Moving main actor below Z=0. (%d,%d,%d)", X, Y, Z);
 	}
 
 	// TODO: In Crusader, if we are moving the avatar the game also checks whether
@@ -328,7 +328,7 @@ bool Item::moveToContainer(Container *container, bool checkwghtvol) {
 
 	// If moving to avatar, mark as OWNED
 	Container *root = getRootContainer();
-	if (root && root->getObjId() == 1)
+	if (root && root->getObjId() == kMainActorId)
 		setFlagRecursively(FLG_OWNED);
 
 	// No lerping when moving to a container
@@ -1102,7 +1102,7 @@ int32 Item::collideMove(int32 dx, int32 dy, int32 dz, bool teleport, bool force,
 			}
 			// Hitting us at the end (call hit on us, got hit on them)
 			else if (it->_endTime == 0x4000) {
-				if (_objId == 1 && guiapp->isShowTouchingItems())
+				if (_objId == kMainActorId && guiapp->isShowTouchingItems())
 					item->setExtFlag(Item::EXT_HIGHLIGHT);
 
 				item->callUsecodeEvent_gotHit(_objId, hitforce);
@@ -1110,7 +1110,8 @@ int32 Item::collideMove(int32 dx, int32 dy, int32 dz, bool teleport, bool force,
 			}
 			// Hitting us at the start (call release on us and them)
 			else if (!_parent && it->_hitTime == 0x0000) {
-				if (_objId == 1) item->clearExtFlag(Item::EXT_HIGHLIGHT);
+				if (_objId == kMainActorId)
+					item->clearExtFlag(Item::EXT_HIGHLIGHT);
 				we_were_released = true;
 				item->callUsecodeEvent_release();
 			}
@@ -1168,7 +1169,7 @@ int32 Item::collideMove(int32 dx, int32 dy, int32 dz, bool teleport, bool force,
 			// and teleporters work.
 			bool call_hit = it->_hitTime >= 0 || GAME_IS_CRUSADER;
 			if ((!it->_touching || it->_touchingFloor) && call_hit) {
-				if (_objId == 1 && guiapp->isShowTouchingItems())
+				if (_objId == kMainActorId && guiapp->isShowTouchingItems())
 					item->setExtFlag(Item::EXT_HIGHLIGHT);
 
 				proc_gothit = item->callUsecodeEvent_gotHit(_objId, hitforce);
@@ -1177,7 +1178,8 @@ int32 Item::collideMove(int32 dx, int32 dy, int32 dz, bool teleport, bool force,
 
 			// If not hitting at end, we will need to call release
 			if (it->_endTime < hit) {
-				if (_objId == 1) item->clearExtFlag(Item::EXT_HIGHLIGHT);
+				if (_objId == kMainActorId)
+					item->clearExtFlag(Item::EXT_HIGHLIGHT);
 				we_were_released = true;
 				proc_rel = item->callUsecodeEvent_release();
 			}
@@ -1874,7 +1876,7 @@ uint32 Item::enterFastArea() {
 		if (actor && actor->isDead() && !call_even_if_dead) {
 			// dead actor, don't call the usecode
 		} else {
-			if (actor && _objId != 1) {
+			if (actor && _objId != kMainActorId) {
 				if (GAME_IS_CRUSADER) {
 					uint16 lastactivity = actor->getLastActivityNo();
 					actor->clearLastActivityNo();
@@ -1938,7 +1940,7 @@ uint32 Item::enterFastArea() {
 
 // Called when an item is leaving the fast area
 void Item::leaveFastArea() {
-	if (_objId == 1) {
+	if (_objId == kMainActorId) {
 		debugC(kDebugActor, "Main actor leaving fast area");
 	}
 
@@ -1996,7 +1998,7 @@ uint16 Item::openGump(uint32 gumpshape) {
 
 	ContainerGump *cgump;
 
-	if (getObjId() != 1) { //!! constant
+	if (getObjId() != kMainActorId) {
 		cgump = new ContainerGump(shapeP, 0, _objId, Gump::FLAG_ITEM_DEPENDENT |
 		                          Gump::FLAG_DRAGGABLE);
 	} else {
@@ -2037,8 +2039,8 @@ ProcId Item::bark(const Std::string &msg, ObjId id) {
 	closeBark();
 
 	uint32 shapenum = getShape();
-	if (id == 666)
-		shapenum = 666; // Hack for guardian barks
+	if (id == kGuardianId)
+		shapenum = kGuardianId; // Hack for guardian barks
 
 	Gump *gump = new BarkGump(getObjId(), msg, shapenum);
 	_bark = gump->getObjId();
@@ -3068,8 +3070,8 @@ uint32 Item::I_getWeightIncludingContents(const uint8 *args,
 uint32 Item::I_bark(const uint8 *args, unsigned int /*argsize*/) {
 	ARG_ITEM_FROM_PTR(item);
 	ARG_STRING(str);
-	if (id_item == 666)
-		item = getItem(1);
+	if (id_item == kGuardianId)
+		item = getItem(kMainActorId);
 
 	if (!item) {
 		// Hack! Items should always be valid?
@@ -3290,7 +3292,8 @@ uint32 Item::I_legalCreateInCont(const uint8 *args, unsigned int /*argsize*/) {
 
 uint32 Item::I_destroy(const uint8 *args, unsigned int /*argsize*/) {
 	ARG_ITEM_FROM_PTR(item);
-	if (!item || item->getObjId() == 1) return 0;
+	if (!item || item->getObjId() == kMainActorId)
+		return 0;
 
 	item->destroy();
 
diff --git a/engines/ultima/ultima8/world/item_sorter.cpp b/engines/ultima/ultima8/world/item_sorter.cpp
index 47a5b5e438f..449a6c1a4f1 100644
--- a/engines/ultima/ultima8/world/item_sorter.cpp
+++ b/engines/ultima/ultima8/world/item_sorter.cpp
@@ -467,7 +467,7 @@ bool ItemSorter::PaintSortItem(RenderSurface *surf, SortItem *si, bool showFootp
 
 		// weapon overlay
 		// FIXME: use highlight/invisibility, also add to Trace() ?
-		if (si->_shapeNum == 1 && si->_itemNum == 1) {
+		if (si->_shapeNum == 1 && si->_itemNum == kMainActorId) {
 			MainActor *av = getMainActor();
 			const WeaponOverlayFrame *wo_frame = nullptr;
 			uint32 wo_shapenum;
diff --git a/engines/ultima/ultima8/world/world.cpp b/engines/ultima/ultima8/world/world.cpp
index fa87458a651..1625a40f6ba 100644
--- a/engines/ultima/ultima8/world/world.cpp
+++ b/engines/ultima/ultima8/world/world.cpp
@@ -193,14 +193,14 @@ bool World::switchMap(uint32 newmap) {
 		// TODO: This may not even be needed for U8, but reset in case camera
 		// was looking at something other than the avatar during teleport.
 		CameraProcess *camera = CameraProcess::GetCameraProcess();
-		if (camera && camera->getItemNum() != 1) {
-			CameraProcess::SetCameraProcess(new CameraProcess(1));
+		if (camera && camera->getItemNum() != kMainActorId) {
+			CameraProcess::SetCameraProcess(new CameraProcess(kMainActorId));
 		}
 		CameraProcess::SetEarthquake(0);
 	} else {
 		// In Crusader, snap the camera to the avatar.  The snap process will
 		// then find the right snap egg in the next frame.
-		CameraProcess::SetCameraProcess(new CameraProcess(1));
+		CameraProcess::SetCameraProcess(new CameraProcess(kMainActorId));
 	}
 
 	return true;


Commit: 532998effb27373e45283dda0db1b8975f2f8517
    https://github.com/scummvm/scummvm/commit/532998effb27373e45283dda0db1b8975f2f8517
Author: Matthew Jimenez (matthew.jimenez at outlook.com)
Date: 2024-05-30T20:10:13-05:00

Commit Message:
ULTIMA8: Define max item quantity constant

Changed paths:
    engines/ultima/ultima8/gumps/container_gump.cpp
    engines/ultima/ultima8/gumps/game_map_gump.cpp
    engines/ultima/ultima8/world/item.h


diff --git a/engines/ultima/ultima8/gumps/container_gump.cpp b/engines/ultima/ultima8/gumps/container_gump.cpp
index 37a3bfb33a9..616ab8d32b6 100644
--- a/engines/ultima/ultima8/gumps/container_gump.cpp
+++ b/engines/ultima/ultima8/gumps/container_gump.cpp
@@ -541,10 +541,9 @@ void ContainerGump::DropItem(Item *item, int mx, int my) {
 		// try to combine items
 		if (item->canMergeWith(targetitem)) {
 			uint16 newquant = targetitem->getQuality() + item->getQuality();
-			// easter egg as in original: items stack to max quantity of 666
-			if (newquant > 666) {
-				item->setQuality(newquant - 666);
-				targetitem->setQuality(666);
+			if (newquant > Item::MAX_QUANTITY) {
+				item->setQuality(newquant - Item::MAX_QUANTITY);
+				targetitem->setQuality(Item::MAX_QUANTITY);
 				// maybe this isn't needed? original doesn't do it here..
 				targetitem->callUsecodeEvent_combine();
 			} else {
diff --git a/engines/ultima/ultima8/gumps/game_map_gump.cpp b/engines/ultima/ultima8/gumps/game_map_gump.cpp
index e7b9cfe25ef..59b74249a19 100644
--- a/engines/ultima/ultima8/gumps/game_map_gump.cpp
+++ b/engines/ultima/ultima8/gumps/game_map_gump.cpp
@@ -34,13 +34,10 @@
 #include "ultima/ultima8/ultima8.h"
 #include "ultima/ultima8/world/get_object.h"
 #include "ultima/ultima8/world/actors/avatar_mover_process.h"
+#include "ultima/ultima8/world/actors/pathfinder_process.h"
 #include "ultima/ultima8/world/missile_tracker.h"
 #include "ultima/ultima8/world/split_item_process.h"
 
-#include "ultima/ultima8/world/actors/pathfinder_process.h"
-
-// map dumping
-
 namespace Ultima {
 namespace Ultima8 {
 
@@ -524,10 +521,9 @@ void GameMapGump::DropItem(Item *item, int mx, int my) {
 			// try to combine items
 			if (canReach && targetitem && item->canMergeWith(targetitem)) {
 				uint16 newquant = targetitem->getQuality() + item->getQuality();
-				// easter egg as in original: items stack to max quantity of 666
-				if (newquant > 666) {
-					item->setQuality(newquant - 666);
-					targetitem->setQuality(666);
+				if (newquant > Item::MAX_QUANTITY) {
+					item->setQuality(newquant - Item::MAX_QUANTITY);
+					targetitem->setQuality(Item::MAX_QUANTITY);
 					// maybe this isn't needed? original doesn't do it here..
 					targetitem->callUsecodeEvent_combine();
 				} else {
diff --git a/engines/ultima/ultima8/world/item.h b/engines/ultima/ultima8/world/item.h
index 5c74faf6e39..652322d1777 100644
--- a/engines/ultima/ultima8/world/item.h
+++ b/engines/ultima/ultima8/world/item.h
@@ -705,6 +705,9 @@ public:
 		EXT_TARGET 		 = 0x0200,  //!< Item is the current reticle target in Crusader
 		EXT_FEMALE       = 0x8000	//!< Item is Crusader Female NPC (controls sfx)
 	};
+
+	// easter egg as in original: items stack to max quantity of 666
+	static const int MAX_QUANTITY = 666;
 };
 
 inline const ShapeInfo *Item::getShapeInfo() const {




More information about the Scummvm-git-logs mailing list