[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