[Scummvm-git-logs] scummvm master -> 7919e9f0d025b634fb6bc9e477285f56524cca1f

mduggan mgithub at guarana.org
Fri Feb 12 10:38:32 UTC 2021


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

Summary:
e55a7d1f50 ULTIMA8: Start Crusader on correct egg no
72ddb928ed ULTIMA8: Don't break to debugger on show-touching-items command
74ba8b8c39 ULTIMA8: Dump item info for clicks even in stasis
8dc727acae ULTIMA8: Don't apply 0 splash damage in Crusader
ec65e71efa ULTIMA8: Support longer text on Crusader ComputerGump
fcc9e6a9e3 ULTIMA8: Don't leak text widgets in Crusader inventory gumps
070c348dcd ULTIMA8: JANITORIAL: whitespace, comments
fa7bcbdc09 ULTIMA8: Try to fix clearing of pickup gumps
7919e9f0d0 ULTIMA8: Fix music restore when closing Crusader menu


Commit: e55a7d1f500cbb8f99f9de48a7ff72354a80e937
    https://github.com/scummvm/scummvm/commit/e55a7d1f500cbb8f99f9de48a7ff72354a80e937
Author: Matthew Duggan (mgithub at guarana.org)
Date: 2021-02-12T15:35:26+09:00

Commit Message:
ULTIMA8: Start Crusader on correct egg no

Changed paths:
    engines/ultima/ultima8/games/start_crusader_process.cpp


diff --git a/engines/ultima/ultima8/games/start_crusader_process.cpp b/engines/ultima/ultima8/games/start_crusader_process.cpp
index 9efdd34dea..1ffb48af9c 100644
--- a/engines/ultima/ultima8/games/start_crusader_process.cpp
+++ b/engines/ultima/ultima8/games/start_crusader_process.cpp
@@ -89,13 +89,10 @@ void StartCrusaderProcess::run() {
 		Item *smiley = ItemFactory::createItem(0x598, 0, 0, 0, 0, mapnum, 0, true);
 		smiley->moveToContainer(avatar);
 
-		if (GAME_IS_REMORSE) {
-			// TODO: The game actually teleports to egg 0x1e (30) which has another
-			// egg to teleport to egg 99.  Is there any purpose to that?
-			Kernel::get_instance()->addProcess(new TeleportToEggProcess(1, 99));
-		} else if (GAME_IS_REGRET) {
-			Kernel::get_instance()->addProcess(new TeleportToEggProcess(1, 0x1e));
-		}
+		avatar->teleport(1, 0x1e);
+		// The first level 0x1e teleporter in No Remorse goes straight to another
+		// teleport, so undo the flag that normally stops that.
+		avatar->setJustTeleported(false);
 
 		Process *fader = new PaletteFaderProcess(0x003F3F3F, true, 0x7FFF, 60, false);
 		Kernel::get_instance()->addProcess(fader);


Commit: 72ddb928edbd9e078dfc1d39dee82a3e92ca1e65
    https://github.com/scummvm/scummvm/commit/72ddb928edbd9e078dfc1d39dee82a3e92ca1e65
Author: Matthew Duggan (mgithub at guarana.org)
Date: 2021-02-12T15:35:52+09:00

Commit Message:
ULTIMA8: Don't break to debugger on show-touching-items command

Changed paths:
    engines/ultima/ultima8/misc/debugger.cpp


diff --git a/engines/ultima/ultima8/misc/debugger.cpp b/engines/ultima/ultima8/misc/debugger.cpp
index 9fd4bc0fe7..8f82349127 100644
--- a/engines/ultima/ultima8/misc/debugger.cpp
+++ b/engines/ultima/ultima8/misc/debugger.cpp
@@ -313,7 +313,7 @@ bool Debugger::cmdToggleShowTouchingItems(int argc, const char **argv) {
 	Ultima8Engine *g = Ultima8Engine::get_instance();
 	g->toggleShowTouchingItems();
 	debugPrintf("ShowTouchingItems = %s\n", strBool(g->isShowTouchingItems()));
-	return true;
+	return false;
 }
 
 bool Debugger::cmdCloseItemGumps(int argc, const char **argv) {


Commit: 74ba8b8c39dce911f5b9630981d5bd6dc3a73864
    https://github.com/scummvm/scummvm/commit/74ba8b8c39dce911f5b9630981d5bd6dc3a73864
Author: Matthew Duggan (mgithub at guarana.org)
Date: 2021-02-12T15:36:50+09:00

Commit Message:
ULTIMA8: Dump item info for clicks even in stasis

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


diff --git a/engines/ultima/ultima8/gumps/container_gump.cpp b/engines/ultima/ultima8/gumps/container_gump.cpp
index f7f61fbf20..0dd20ad030 100644
--- a/engines/ultima/ultima8/gumps/container_gump.cpp
+++ b/engines/ultima/ultima8/gumps/container_gump.cpp
@@ -309,30 +309,23 @@ Gump *ContainerGump::onMouseDown(int button, int32 mx, int32 my) {
 
 void ContainerGump::onMouseClick(int button, int32 mx, int32 my) {
 	if (button == Shared::BUTTON_LEFT) {
-		if (Ultima8Engine::get_instance()->isAvatarInStasis()) {
-			pout << "Can't: avatarInStasis" << Std::endl;
-			return;
-		}
-
 		uint16 objID = TraceObjId(mx, my);
 
 		Item *item = getItem(objID);
 		if (item) {
 			item->dumpInfo();
 
-			// call the 'look' event
-			item->callUsecodeEvent_look();
+			if (Ultima8Engine::get_instance()->isAvatarInStasis()) {
+				pout << "Can't look: avatarInStasis" << Std::endl;
+			} else {
+				item->callUsecodeEvent_look();
+			}
 		}
 	}
 }
 
 void ContainerGump::onMouseDouble(int button, int32 mx, int32 my) {
 	if (button == Shared::BUTTON_LEFT) {
-		if (Ultima8Engine::get_instance()->isAvatarInStasis()) {
-			pout << "Can't: avatarInStasis" << Std::endl;
-			return;
-		}
-
 		uint16 objID = TraceObjId(mx, my);
 
 		if (objID == getObjId()) {
@@ -343,6 +336,11 @@ void ContainerGump::onMouseDouble(int button, int32 mx, int32 my) {
 		if (item) {
 			item->dumpInfo();
 
+			if (Ultima8Engine::get_instance()->isAvatarInStasis()) {
+				pout << "Can't use: avatarInStasis" << Std::endl;
+				return;
+			}
+
 			MainActor *avatar = getMainActor();
 			if (objID == _owner || avatar->canReach(item, 128)) { // CONSTANT!
 				// call the 'use' event
diff --git a/engines/ultima/ultima8/gumps/game_map_gump.cpp b/engines/ultima/ultima8/gumps/game_map_gump.cpp
index 60771f0d4f..694d060c8b 100644
--- a/engines/ultima/ultima8/gumps/game_map_gump.cpp
+++ b/engines/ultima/ultima8/gumps/game_map_gump.cpp
@@ -298,11 +298,6 @@ void GameMapGump::onMouseClick(int button, int32 mx, int32 my) {
 
 		if (Mouse::get_instance()->isMouseDownEvent(Shared::BUTTON_RIGHT)) break;
 
-		if (Ultima8Engine::get_instance()->isAvatarInStasis()) {
-			pout << "Can't: avatarInStasis" << Std::endl;
-			break;
-		}
-
 		uint16 objID = TraceObjId(mx, my);
 		Item *item = getItem(objID);
 		if (item) {
@@ -310,8 +305,11 @@ void GameMapGump::onMouseClick(int button, int32 mx, int32 my) {
 			item->getLocation(xv, yv, zv);
 			item->dumpInfo();
 
-			// call the 'look' event
-			item->callUsecodeEvent_look();
+			if (Ultima8Engine::get_instance()->isAvatarInStasis()) {
+				pout << "Can't look: avatarInStasis" << Std::endl;
+			} else {
+				item->callUsecodeEvent_look();
+			}
 		}
 		break;
 	}
@@ -366,11 +364,6 @@ void GameMapGump::onMouseDouble(int button, int32 mx, int32 my) {
 
 		if (Mouse::get_instance()->isMouseDownEvent(Shared::BUTTON_RIGHT)) break;
 
-		if (Ultima8Engine::get_instance()->isAvatarInStasis()) {
-			pout << "Can't: avatarInStasis" << Std::endl;
-			break;
-		}
-
 		uint16 objID = TraceObjId(mx, my);
 		Item *item = getItem(objID);
 		if (item) {
@@ -383,6 +376,11 @@ void GameMapGump::onMouseDouble(int button, int32 mx, int32 my) {
 				range = 512;
 			}
 
+			if (Ultima8Engine::get_instance()->isAvatarInStasis()) {
+				pout << "Can't use: avatarInStasis" << Std::endl;
+				break;
+			}
+
 			if (dynamic_cast<Actor *>(item) ||
 			        avatar->canReach(item, range)) {
 				// call the 'use' event


Commit: 8dc727acae5833892b19b80b1d5b3eee3f1bed20
    https://github.com/scummvm/scummvm/commit/8dc727acae5833892b19b80b1d5b3eee3f1bed20
Author: Matthew Duggan (mgithub at guarana.org)
Date: 2021-02-12T15:39:02+09:00

Commit Message:
ULTIMA8: Don't apply 0 splash damage in Crusader

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 a9cc12e8e6..3c1fd0e7b8 100644
--- a/engines/ultima/ultima8/world/fire_type.cpp
+++ b/engines/ultima/ultima8/world/fire_type.cpp
@@ -202,6 +202,9 @@ void FireType::applySplashDamageAround(const Point3 &pt, int damage, const Item
 			if (splashrange)
 				splashitemdamage /= splashrange;
 		}
+		if (!splashitemdamage)
+			continue;
+
 		Direction splashdir = src->getDirToItemCentre(pt);
 		splashitem->receiveHit(0, splashdir, splashitemdamage, _typeNo);
 	}


Commit: ec65e71efa55b306a9ceb433be62f6a8e9fc09e7
    https://github.com/scummvm/scummvm/commit/ec65e71efa55b306a9ceb433be62f6a8e9fc09e7
Author: Matthew Duggan (mgithub at guarana.org)
Date: 2021-02-12T16:05:58+09:00

Commit Message:
ULTIMA8: Support longer text on Crusader ComputerGump

Changed paths:
    engines/ultima/ultima8/gumps/computer_gump.cpp
    engines/ultima/ultima8/gumps/computer_gump.h


diff --git a/engines/ultima/ultima8/gumps/computer_gump.cpp b/engines/ultima/ultima8/gumps/computer_gump.cpp
index 85df7566df..16ed4cf89d 100644
--- a/engines/ultima/ultima8/gumps/computer_gump.cpp
+++ b/engines/ultima/ultima8/gumps/computer_gump.cpp
@@ -79,7 +79,8 @@ void ComputerGump::InitGump(Gump *newparent, bool take_focus) {
 	botGump->SetShape(shape, 1);
 	botGump->InitGump(this, false);
 
-	_textWidget = new TextWidget(41, 38, _text, true, COMPUTER_FONT, _dims.width() - 100, 0, Font::TEXT_LEFT);
+	_textWidget = new TextWidget(41, 38, _text, true, COMPUTER_FONT, _dims.width() - 100,
+								_dims.height() - 100, Font::TEXT_LEFT);
 	_textWidget->InitGump(this);
 
 	AudioProcess *audio = AudioProcess::get_instance();
@@ -101,13 +102,20 @@ void ComputerGump::run() {
 	// * Add <MORE> if there is too many lines of text
 }
 
+void ComputerGump::nextText() {
+	TextWidget *textWidget = dynamic_cast<TextWidget *>(_textWidget);
+
+	if (!textWidget->setupNextText())
+		Close();
+}
+
 Gump *ComputerGump::onMouseDown(int button, int32 mx, int32 my) {
-	Close();
+	nextText();
 	return this;
 }
 
 bool ComputerGump::OnKeyDown(int key, int mod) {
-	Close();
+	nextText();
 	return true;
 }
 
diff --git a/engines/ultima/ultima8/gumps/computer_gump.h b/engines/ultima/ultima8/gumps/computer_gump.h
index d58c86907c..1189da26e6 100644
--- a/engines/ultima/ultima8/gumps/computer_gump.h
+++ b/engines/ultima/ultima8/gumps/computer_gump.h
@@ -57,6 +57,8 @@ public:
 	void saveData(Common::WriteStream *ws) override;
 
 private:
+	void nextText();
+
 	/*
 	TODO: Implement stepping through the text
 	int _charOff;


Commit: fcc9e6a9e35f31121f9c097dbab965a40e25f150
    https://github.com/scummvm/scummvm/commit/fcc9e6a9e35f31121f9c097dbab965a40e25f150
Author: Matthew Duggan (mgithub at guarana.org)
Date: 2021-02-12T16:06:39+09:00

Commit Message:
ULTIMA8: Don't leak text widgets in Crusader inventory gumps

Changed paths:
    engines/ultima/ultima8/gumps/cru_ammo_gump.cpp
    engines/ultima/ultima8/gumps/cru_inventory_gump.cpp


diff --git a/engines/ultima/ultima8/gumps/cru_ammo_gump.cpp b/engines/ultima/ultima8/gumps/cru_ammo_gump.cpp
index 4319ff260a..efd4f87adb 100644
--- a/engines/ultima/ultima8/gumps/cru_ammo_gump.cpp
+++ b/engines/ultima/ultima8/gumps/cru_ammo_gump.cpp
@@ -84,6 +84,7 @@ void CruAmmoGump::PaintThis(RenderSurface *surf, int32 lerp_factor, bool scaled)
 	const Std::string bulletstr = Std::string::format("%d", bullets);
 	if (!bulletstr.equals(_bulletsText->getText())) {
 		RemoveChild(_bulletsText);
+		_bulletsText->Close();
 		_bulletsText = new TextWidget(22, _dims.height() / 2 - 3, bulletstr, true, 15);
 		_bulletsText->InitGump(this, false);
 	}
@@ -100,6 +101,7 @@ void CruAmmoGump::PaintThis(RenderSurface *surf, int32 lerp_factor, bool scaled)
 	const Std::string clipstr = Std::string::format("%d", clips);
 	if (!clipstr.equals(_clipsText->getText())) {
 		RemoveChild(_clipsText);
+		_clipsText->Close();
 		_clipsText = new TextWidget(_dims.width() / 2 + 22, _dims.height() / 2 - 3, clipstr, true, 15);
 		_clipsText->InitGump(this, false);
 	}
diff --git a/engines/ultima/ultima8/gumps/cru_inventory_gump.cpp b/engines/ultima/ultima8/gumps/cru_inventory_gump.cpp
index b00cca7907..ced54b8744 100644
--- a/engines/ultima/ultima8/gumps/cru_inventory_gump.cpp
+++ b/engines/ultima/ultima8/gumps/cru_inventory_gump.cpp
@@ -132,12 +132,14 @@ void CruInventoryGump::PaintThis(RenderSurface *surf, int32 lerp_factor, bool sc
 				const Std::string &currenttext = _inventoryText->getText();
 				if (!qtext.equals(currenttext)) {
 					RemoveChild(_inventoryText);
+					_inventoryText->Close();
 					_inventoryText = new TextWidget(_dims.width() / 2 + 22, _dims.height() / 2 + 3, qtext, true, INVENTORY_TEXT_FONT);
 					_inventoryText->InitGump(this, false);
 				}
 			} else {
 				if (_inventoryText->getText().length() > 0) {
 					RemoveChild(_inventoryText);
+					_inventoryText->Close();
 					_inventoryText = new TextWidget();
 					_inventoryText->InitGump(this, false);
 				}


Commit: 070c348dcd22ca29e36ee9f66efa7a4ef3c856e6
    https://github.com/scummvm/scummvm/commit/070c348dcd22ca29e36ee9f66efa7a4ef3c856e6
Author: Matthew Duggan (mgithub at guarana.org)
Date: 2021-02-12T16:09:04+09:00

Commit Message:
ULTIMA8: JANITORIAL: whitespace, comments

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


diff --git a/engines/ultima/ultima8/world/container.cpp b/engines/ultima/ultima8/world/container.cpp
index 99095363a6..3e9aabcd0c 100644
--- a/engines/ultima/ultima8/world/container.cpp
+++ b/engines/ultima/ultima8/world/container.cpp
@@ -350,7 +350,7 @@ bool Container::loadData(Common::ReadStream *rs, uint32 version) {
 
 	uint32 contentcount = rs->readUint32LE();
 
-	// read _contents
+	// read contents
 	for (unsigned int i = 0; i < contentcount; ++i) {
 		Object *obj = ObjectManager::get_instance()->loadObject(rs, version);
 		Item *item = dynamic_cast<Item *>(obj);
diff --git a/engines/ultima/ultima8/world/egg_hatcher_process.cpp b/engines/ultima/ultima8/world/egg_hatcher_process.cpp
index a4d9578fae..8f47c76856 100644
--- a/engines/ultima/ultima8/world/egg_hatcher_process.cpp
+++ b/engines/ultima/ultima8/world/egg_hatcher_process.cpp
@@ -80,9 +80,11 @@ void EggHatcherProcess::run() {
 
 		if (x1 <= ax && ax - axs < x2 && y1 <= ay && ay - ays < y2 &&
 		        z - 48 < az && az <= z + 48) { // CONSTANTS!
-			if (tegg && tegg->isTeleporter()) nearteleporter = true;
+			if (tegg && tegg->isTeleporter())
+				nearteleporter = true;
 
-			if (tegg && av->hasJustTeleported()) continue;
+			if (tegg && av->hasJustTeleported())
+				continue;
 
 			egg->hatch();
 		} else {
@@ -90,7 +92,8 @@ void EggHatcherProcess::run() {
 		}
 	}
 
-	if (!nearteleporter) av->setJustTeleported(false); // clear flag
+	if (!nearteleporter)
+		av->setJustTeleported(false); // clear flag
 }
 
 void EggHatcherProcess::saveData(Common::WriteStream *ws) {
diff --git a/engines/ultima/ultima8/world/item.cpp b/engines/ultima/ultima8/world/item.cpp
index a51dc35e22..80a76f6905 100644
--- a/engines/ultima/ultima8/world/item.cpp
+++ b/engines/ultima/ultima8/world/item.cpp
@@ -1788,6 +1788,9 @@ void Item::enterFastArea() {
 				actor->setActivity(lastactivity);
 			}
 
+			// TODO: For eggs, Crusader also resets the NPC info if a
+			// certain global is set.  For now just skip that.
+
 			//
 			// TODO: Check this. The original games only call usecode for actors or
 			// NOISY types.  Calling for all types like this shouldn't cause any issues


Commit: fa7bcbdc09242f187e093b5e2ef560032f3e0e2e
    https://github.com/scummvm/scummvm/commit/fa7bcbdc09242f187e093b5e2ef560032f3e0e2e
Author: Matthew Duggan (mgithub at guarana.org)
Date: 2021-02-12T16:09:11+09:00

Commit Message:
ULTIMA8: Try to fix clearing of pickup gumps

Changed paths:
    engines/ultima/ultima8/gumps/cru_pickup_gump.cpp
    engines/ultima/ultima8/gumps/cru_pickup_gump.h


diff --git a/engines/ultima/ultima8/gumps/cru_pickup_gump.cpp b/engines/ultima/ultima8/gumps/cru_pickup_gump.cpp
index 7cb27ead09..83c96c9a7b 100644
--- a/engines/ultima/ultima8/gumps/cru_pickup_gump.cpp
+++ b/engines/ultima/ultima8/gumps/cru_pickup_gump.cpp
@@ -123,8 +123,10 @@ void CruPickupGump::updateForNewItem(const Item *item) {
 	assert(item);
 	assert(item->getShape() == _itemShapeNo);
 	TextWidget *oldtext = dynamic_cast<TextWidget *>(FindGump(&FindByIndex<COUNT_TEXT_INDEX>));
-	if (oldtext)
+	if (oldtext) {
+		RemoveChild(oldtext);
 		oldtext->Close();
+	}
 	// TODO: should we add current q? + currentq;
 	// It seems like the items are hacked to give the right "q" for
 	// this gump from the last item, which is why the add process
diff --git a/engines/ultima/ultima8/gumps/cru_pickup_gump.h b/engines/ultima/ultima8/gumps/cru_pickup_gump.h
index 5ffc050af6..2e47f8addf 100644
--- a/engines/ultima/ultima8/gumps/cru_pickup_gump.h
+++ b/engines/ultima/ultima8/gumps/cru_pickup_gump.h
@@ -41,6 +41,8 @@ public:
 	CruPickupGump();
 	CruPickupGump(const Item *item, int y);
 
+	~CruPickupGump() override {};
+
 	// Init the gump, call after construction
 	void InitGump(Gump *newparent, bool take_focus = true) override;
 


Commit: 7919e9f0d025b634fb6bc9e477285f56524cca1f
    https://github.com/scummvm/scummvm/commit/7919e9f0d025b634fb6bc9e477285f56524cca1f
Author: Matthew Duggan (mgithub at guarana.org)
Date: 2021-02-12T19:34:18+09:00

Commit Message:
ULTIMA8: Fix music restore when closing Crusader menu

Changed paths:
    engines/ultima/ultima8/audio/remorse_music_process.cpp


diff --git a/engines/ultima/ultima8/audio/remorse_music_process.cpp b/engines/ultima/ultima8/audio/remorse_music_process.cpp
index abc8d8df04..0c51114983 100644
--- a/engines/ultima/ultima8/audio/remorse_music_process.cpp
+++ b/engines/ultima/ultima8/audio/remorse_music_process.cpp
@@ -124,9 +124,9 @@ void RemorseMusicProcess::saveTrackState() {
 }
 
 void RemorseMusicProcess::restoreTrackState() {
-	_currentTrack = _savedTrack;
+	int saved = _savedTrack;
 	_savedTrack = 0;
-	playMusic_internal(_currentTrack);
+	playMusic_internal(saved);
 }
 
 void RemorseMusicProcess::playMusic_internal(int track) {




More information about the Scummvm-git-logs mailing list