[Scummvm-git-logs] scummvm master -> f18b95b2c7850ccedf74a4ea801456d8f57224a5

mduggan mgithub at guarana.org
Sun Jun 27 14:14:11 UTC 2021


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

Summary:
01500eb23f ULTIMA8: Fix Crusader ammo count in pickup notifications
8b0e6f27b8 ULTIMA8: Another tweak to fix Crusader pathfinding
17c58095db ULTIMA8: Don't make Crusader splash damage recurse into containers
f18b95b2c7 ULTIMA8: Ignore hurl for contained objects


Commit: 01500eb23fb39d363a4db9e314889b81a24249db
    https://github.com/scummvm/scummvm/commit/01500eb23fb39d363a4db9e314889b81a24249db
Author: Matthew Duggan (mgithub at guarana.org)
Date: 2021-06-27T23:02:43+09:00

Commit Message:
ULTIMA8: Fix Crusader ammo count in pickup notifications

Changed paths:
    engines/ultima/ultima8/gumps/cru_pickup_area_gump.cpp
    engines/ultima/ultima8/gumps/cru_pickup_gump.cpp
    engines/ultima/ultima8/gumps/cru_pickup_gump.h
    engines/ultima/ultima8/world/actors/main_actor.cpp


diff --git a/engines/ultima/ultima8/gumps/cru_pickup_area_gump.cpp b/engines/ultima/ultima8/gumps/cru_pickup_area_gump.cpp
index 6317f9a9b8..2a0cb5e14d 100644
--- a/engines/ultima/ultima8/gumps/cru_pickup_area_gump.cpp
+++ b/engines/ultima/ultima8/gumps/cru_pickup_area_gump.cpp
@@ -67,7 +67,7 @@ void CruPickupAreaGump::addPickup(const Item *item, bool showCount) {
 			continue;
 		if (pug->getShapeNo() == shapeno) {
 			// Already a notification for this object, update it
-			pug->updateForNewItem(item, showCount);
+			pug->updateForNewItem(item);
 			return;
 		}
 		int32 x, y;
diff --git a/engines/ultima/ultima8/gumps/cru_pickup_gump.cpp b/engines/ultima/ultima8/gumps/cru_pickup_gump.cpp
index f368720714..afef5ff5f3 100644
--- a/engines/ultima/ultima8/gumps/cru_pickup_gump.cpp
+++ b/engines/ultima/ultima8/gumps/cru_pickup_gump.cpp
@@ -52,7 +52,10 @@ CruPickupGump::CruPickupGump(const Item *item, int y, bool showCount) : Gump(0,
 	const WeaponInfo *weaponInfo = item->getShapeInfo()->_weaponInfo;
 	if (weaponInfo) {
 		_itemShapeNo = item->getShape();
-		_q = item->getQuality();
+		if (item->getShapeInfo()->_family == ShapeInfo::SF_CRUAMMO)
+			_q = 1;
+		else
+			_q = item->getQuality();
 		_itemName = weaponInfo->_name;
 		_gumpShapeNo = weaponInfo->_displayGumpShape;
 		_gumpFrameNo = weaponInfo->_displayGumpFrame;
@@ -123,7 +126,7 @@ void CruPickupGump::InitGump(Gump *newparent, bool take_focus) {
 	itemgump->Move(ITEM_AREA_WIDTH / 2 - itemframe->_width / 2, _dims.height() / 2 - itemframe->_height / 2);
 }
 
-void CruPickupGump::updateForNewItem(const Item *item, bool showCount) {
+void CruPickupGump::updateForNewItem(const Item *item) {
 	assert(item);
 	assert(item->getShape() == _itemShapeNo);
 	TextWidget *oldtext = dynamic_cast<TextWidget *>(FindGump(&FindByIndex<COUNT_TEXT_INDEX>));
@@ -132,7 +135,8 @@ void CruPickupGump::updateForNewItem(const Item *item, bool showCount) {
 		oldtext->Close();
 	}
 
-	_showCount = showCount;
+	// Always show count for repeat objects.
+	_showCount = true;
 
 	// If we're updating the existing count, add 1 or special-case credits
 	if (_itemShapeNo == 0x4ed)
diff --git a/engines/ultima/ultima8/gumps/cru_pickup_gump.h b/engines/ultima/ultima8/gumps/cru_pickup_gump.h
index aa18e9a2c2..1d777701cc 100644
--- a/engines/ultima/ultima8/gumps/cru_pickup_gump.h
+++ b/engines/ultima/ultima8/gumps/cru_pickup_gump.h
@@ -57,8 +57,8 @@ public:
 		return _q;
 	}
 
-	//! Update for a second item pickup - generally just replace existing count text.
-	void updateForNewItem(const Item *item, bool showCount);
+	//! Update for a second item pickup - updates existing count text.
+	void updateForNewItem(const Item *item);
 	void addCountText();
 
 	bool loadData(Common::ReadStream *rs, uint32 version);
diff --git a/engines/ultima/ultima8/world/actors/main_actor.cpp b/engines/ultima/ultima8/world/actors/main_actor.cpp
index 41b07c25ae..eddb57513e 100644
--- a/engines/ultima/ultima8/world/actors/main_actor.cpp
+++ b/engines/ultima/ultima8/world/actors/main_actor.cpp
@@ -194,7 +194,7 @@ int16 MainActor::addItemCru(Item *item, bool showtoast) {
 			item->callUsecodeEvent_combine();
 			item->moveToContainer(this);
 			if (showtoast)
-				pickupArea->addPickup(item, true);
+				pickupArea->addPickup(item, false);
 			return 1;
 		} else {
 			// already have this, add some ammo.
@@ -203,7 +203,7 @@ int16 MainActor::addItemCru(Item *item, bool showtoast) {
 				ammo->setQuality(q + 1);
 				ammo->callUsecodeEvent_combine();
 				if (showtoast)
-					pickupArea->addPickup(item, true);
+					pickupArea->addPickup(item, false);
 				item->destroy();
 				return 1;
 			}


Commit: 8b0e6f27b8095a458384d62e3679a739a496d576
    https://github.com/scummvm/scummvm/commit/8b0e6f27b8095a458384d62e3679a739a496d576
Author: Matthew Duggan (mgithub at guarana.org)
Date: 2021-06-27T23:02:43+09:00

Commit Message:
ULTIMA8: Another tweak to fix Crusader pathfinding

The disassembly here is really hard to follow, so I *think* it's right now
but may still need more fixes.

Changed paths:
    engines/ultima/ultima8/world/actors/cru_pathfinder_process.cpp


diff --git a/engines/ultima/ultima8/world/actors/cru_pathfinder_process.cpp b/engines/ultima/ultima8/world/actors/cru_pathfinder_process.cpp
index 571c730b39..154286844b 100644
--- a/engines/ultima/ultima8/world/actors/cru_pathfinder_process.cpp
+++ b/engines/ultima/ultima8/world/actors/cru_pathfinder_process.cpp
@@ -222,7 +222,7 @@ Direction CruPathfinderProcess::nextDirFromPoint(struct Point3 &npcpt) {
 		state._combat = npc->isInCombat();
 		animresult = npc->tryAnim(anim, _nextDir2, 0, &state);
 
-		if (_solidObject && animresult == Animation::FAILURE) {
+		if (_solidObject && (animresult == Animation::SUCCESS)) {
 			_turnAtEnd = true;
 			return dir_invalid;
 		}
@@ -282,6 +282,7 @@ void CruPathfinderProcess::run() {
 		return;
 	}
 
+	// Update target location if tracking to an item
 	if (_targetItem != 0 && _solidObject) {
 		Item *target = getItem(_targetItem);
 		if (target)


Commit: 17c58095db2015810fd8693d331934986a6fd0da
    https://github.com/scummvm/scummvm/commit/17c58095db2015810fd8693d331934986a6fd0da
Author: Matthew Duggan (mgithub at guarana.org)
Date: 2021-06-27T23:02:43+09:00

Commit Message:
ULTIMA8: Don't make Crusader splash damage recurse into containers

This could cause the avatar to lose his weapons on an explosion.

Changed paths:
    engines/ultima/ultima8/world/fire_type.cpp


diff --git a/engines/ultima/ultima8/world/fire_type.cpp b/engines/ultima/ultima8/world/fire_type.cpp
index deba3a0ddb..88fbb7ce99 100644
--- a/engines/ultima/ultima8/world/fire_type.cpp
+++ b/engines/ultima/ultima8/world/fire_type.cpp
@@ -242,7 +242,7 @@ void FireType::applySplashDamageAround(const Point3 &pt, int damage, int rangedi
 	UCList uclist(2);
 	LOOPSCRIPT(script, LS_TOKEN_TRUE); // we want all items
 	currentmap->areaSearch(&uclist, script, sizeof(script), nullptr,
-						   getRange() * 32 / rangediv, true, pt.x, pt.y);
+						   getRange() * 32 / rangediv, false, pt.x, pt.y);
 	for (unsigned int i = 0; i < uclist.getSize(); ++i) {
 		Item *splashitem = getItem(uclist.getuint16(i));
 		if (!splashitem) {


Commit: f18b95b2c7850ccedf74a4ea801456d8f57224a5
    https://github.com/scummvm/scummvm/commit/f18b95b2c7850ccedf74a4ea801456d8f57224a5
Author: Matthew Duggan (mgithub at guarana.org)
Date: 2021-06-27T23:02:43+09:00

Commit Message:
ULTIMA8: Ignore hurl for contained objects

The gravity process will break anyway because they have invalid coordinates.

Changed paths:
    engines/ultima/ultima8/world/item.cpp


diff --git a/engines/ultima/ultima8/world/item.cpp b/engines/ultima/ultima8/world/item.cpp
index 03ef6430df..868c38671d 100644
--- a/engines/ultima/ultima8/world/item.cpp
+++ b/engines/ultima/ultima8/world/item.cpp
@@ -2098,6 +2098,12 @@ void Item::grab() {
 
 
 void Item::hurl(int xs, int ys, int zs, int grav) {
+	if (_parent) {
+		// Should be removed from the container first??
+		// This will break otherwise as location is 0,0,0
+		warning("Ignoring hurl for contained item %d.", _objId);
+		return;
+	}
 	// crusader sleeps existing gravity at first
 	bool do_sleep = GAME_IS_CRUSADER && (_gravityPid == 0);
 	GravityProcess *p = ensureGravityProcess();




More information about the Scummvm-git-logs mailing list