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

mduggan mgithub at guarana.org
Thu Feb 11 02:37:22 UTC 2021


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

Summary:
2ac85c66fb ULTIMA8: Avoid surrender loops in Crusader
de12bff66e ULTIMA8: Try to fix avatar disappearing from fast area
bfbade5c54 ULTIMA8: Add some map debugging code (off by default)
3157e8828e ULTIMA8: Tweak comments and debug message
55dcbac06e ULTIMA8: Save unknown crusader flag
48c6c2beca ULTIMA8: Avoid null ptr for missing ini sections
0745ea382c ULTIMA8: Fix missing map tile in uppper catacombs
a09f262dba ULTIMA8: Shape viewer formatting fix


Commit: 2ac85c66fb18d46425fe37ded46f524084a93879
    https://github.com/scummvm/scummvm/commit/2ac85c66fb18d46425fe37ded46f524084a93879
Author: Matthew Duggan (mgithub at guarana.org)
Date: 2021-02-11T09:55:31+09:00

Commit Message:
ULTIMA8: Avoid surrender loops in Crusader

Changed paths:
    engines/ultima/ultima8/world/actors/actor.cpp
    engines/ultima/ultima8/world/actors/surrender_process.cpp


diff --git a/engines/ultima/ultima8/world/actors/actor.cpp b/engines/ultima/ultima8/world/actors/actor.cpp
index 96d23a67f6..4628c8dc77 100644
--- a/engines/ultima/ultima8/world/actors/actor.cpp
+++ b/engines/ultima/ultima8/world/actors/actor.cpp
@@ -714,7 +714,8 @@ uint16 Actor::setActivityCru(int activity) {
 	    // Does nothing in game..
 	    break;
 	case 7:
-		return Kernel::get_instance()->addProcess(new SurrenderProcess(this));
+		if (_lastActivityNo != 7)
+			return Kernel::get_instance()->addProcess(new SurrenderProcess(this));
 	    break;
 	case 8:
 		return Kernel::get_instance()->addProcess(new GuardProcess(this));
diff --git a/engines/ultima/ultima8/world/actors/surrender_process.cpp b/engines/ultima/ultima8/world/actors/surrender_process.cpp
index 28adc3bb44..21a6e5cd64 100644
--- a/engines/ultima/ultima8/world/actors/surrender_process.cpp
+++ b/engines/ultima/ultima8/world/actors/surrender_process.cpp
@@ -48,7 +48,8 @@ SurrenderProcess::SurrenderProcess(Actor *actor) : _playedSound(false) {
 	assert(actor);
 	_itemNum = actor->getObjId();
 
-	actor->doAnim(Animation::surrender, actor->getDir());
+	if (!actor->hasActorFlags(Actor::ACT_SURRENDERED))
+		actor->doAnim(Animation::surrender, actor->getDir());
 
 	_type = 0x25f; // CONSTANT!
 }
@@ -57,7 +58,7 @@ void SurrenderProcess::run() {
 	Actor *a = getActor(_itemNum);
 	MainActor *main = getMainActor();
 	if (!a || a->isDead() || !main) {
-		// dead?
+		// dead
 		terminate();
 		return;
 	}


Commit: de12bff66ed2293b4c8a742a114f3fe7c94cdf9e
    https://github.com/scummvm/scummvm/commit/de12bff66ed2293b4c8a742a114f3fe7c94cdf9e
Author: Matthew Duggan (mgithub at guarana.org)
Date: 2021-02-11T09:55:31+09:00

Commit Message:
ULTIMA8: Try to fix avatar disappearing from fast area

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


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 2c052b4f6c..7974c1d22d 100644
--- a/engines/ultima/ultima8/world/actors/cru_avatar_mover_process.cpp
+++ b/engines/ultima/ultima8/world/actors/cru_avatar_mover_process.cpp
@@ -362,8 +362,12 @@ void CruAvatarMoverProcess::step(Animation::Sequence action, Direction direction
 											nullptr, nullptr, &blocker)) {
 				avatar->setLocation(x, y, z);
 				res = avatar->tryAnim(action, direction);
-				if (res == Animation::SUCCESS)
+				if (res == Animation::SUCCESS) {
+					// move to starting point for real (trigger fast area updates etc)
+					avatar->setLocation(origpt.x, origpt.y, origpt.z);
+					avatar->move(x, y, z);
 					break;
+				}
 			}
 		}
 
@@ -388,7 +392,7 @@ void CruAvatarMoverProcess::step(Animation::Sequence action, Direction direction
 	if (checkTurn(direction, moving))
 		return;
 
-	debug(6, "Cru avatar step: picked action %d dir %d (test result %d)", action, direction, res);
+	//debug(6, "Cru avatar step: picked action %d dir %d (test result %d)", action, direction, res);
 	waitFor(avatar->doAnim(action, direction));
 }
 


Commit: bfbade5c54934c7780ab44dfd75aadad663d61ab
    https://github.com/scummvm/scummvm/commit/bfbade5c54934c7780ab44dfd75aadad663d61ab
Author: Matthew Duggan (mgithub at guarana.org)
Date: 2021-02-11T09:55:31+09:00

Commit Message:
ULTIMA8: Add some map debugging code (off by default)

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


diff --git a/engines/ultima/ultima8/world/current_map.cpp b/engines/ultima/ultima8/world/current_map.cpp
index 7b18d361fc..bc2608d4fd 100644
--- a/engines/ultima/ultima8/world/current_map.cpp
+++ b/engines/ultima/ultima8/world/current_map.cpp
@@ -37,6 +37,10 @@
 #include "ultima/ultima8/misc/direction_util.h"
 #include "ultima/ultima8/world/get_object.h"
 
+// Uncomment to check that a single object doesn't appear in multiple chunks
+// during updates
+//#define VALIDATE_CHUNKS 1
+
 namespace Ultima {
 namespace Ultima8 {
 
@@ -233,6 +237,20 @@ void CurrentMap::addItem(Item *item) {
 	int32 cx = ix / _mapChunkSize;
 	int32 cy = iy / _mapChunkSize;
 
+#ifdef VALIDATE_CHUNKS
+	for (int32 ccy = 0; ccy < MAP_NUM_CHUNKS; ccy++) {
+		for (int32 ccx = 0; ccx < MAP_NUM_CHUNKS; ccx++) {
+			item_list::const_iterator iter;
+			for (iter = _items[ccx][ccy].begin();
+					iter != _items[ccx][ccy].end(); ++iter) {
+				if (*iter == item) {
+					warning("item %d already exists in map chunk (%d, %d)", item->getObjId(), ccx, ccy);
+				}
+			}
+		}
+	}
+#endif
+
 	_items[cx][cy].push_front(item);
 	item->setExtFlag(Item::EXT_INCURMAP);
 
@@ -259,6 +277,20 @@ void CurrentMap::addItemToEnd(Item *item) {
 	int32 cx = ix / _mapChunkSize;
 	int32 cy = iy / _mapChunkSize;
 
+#ifdef VALIDATE_CHUNKS
+	for (int32 ccy = 0; ccy < MAP_NUM_CHUNKS; ccy++) {
+		for (int32 ccx = 0; ccx < MAP_NUM_CHUNKS; ccx++) {
+			item_list::const_iterator iter;
+			for (iter = _items[ccx][ccy].begin();
+					iter != _items[ccx][ccy].end(); ++iter) {
+				if (*iter == item) {
+					warning("item %d already exists in map chunk (%d, %d)", item->getObjId(), ccx, ccy);
+				}
+			}
+		}
+	}
+#endif
+
 	_items[cx][cy].push_back(item);
 	item->setExtFlag(Item::EXT_INCURMAP);
 
@@ -495,6 +527,14 @@ void CurrentMap::unsetChunkFast(int32 cx, int32 cy) {
 	while (iter != _items[cx][cy].end()) {
 		Item *item = *iter;
 		++iter;
+#if VALIDATE_CHUNKS
+		int32 x, y, z;
+		item->getLocation(x, y, z);
+		if (x / _mapChunkSize != cx || y / _mapChunkSize != cy) {
+			warning("Item leaving fast area in chunk (%d, %d), should be (%d, %d)",
+					cx, cy, x / _mapChunkSize, y / _mapChunkSize);
+		}
+#endif
 		item->leaveFastArea();  // Can destroy the item
 	}
 }


Commit: 3157e8828e271f1cc303aa18f87faa41a13f9cc2
    https://github.com/scummvm/scummvm/commit/3157e8828e271f1cc303aa18f87faa41a13f9cc2
Author: Matthew Duggan (mgithub at guarana.org)
Date: 2021-02-11T09:55:31+09:00

Commit Message:
ULTIMA8: Tweak comments and debug message

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


diff --git a/engines/ultima/ultima8/world/actors/main_actor.cpp b/engines/ultima/ultima8/world/actors/main_actor.cpp
index 47d5050ef2..e865d23bc2 100644
--- a/engines/ultima/ultima8/world/actors/main_actor.cpp
+++ b/engines/ultima/ultima8/world/actors/main_actor.cpp
@@ -323,7 +323,7 @@ void MainActor::teleport(int mapNum, int32 x, int32 y, int32 z) {
 
 	// (attempt to) load the new map
 	if (!world->switchMap(mapNum)) {
-		perr << "MainActor::teleport(): switchMap() failed!" << Std::endl;
+		perr << "MainActor::teleport(): switchMap(" << mapNum << ") failed!" << Std::endl;
 		return;
 	}
 
diff --git a/engines/ultima/ultima8/world/item.cpp b/engines/ultima/ultima8/world/item.cpp
index 18464e8ecf..a51dc35e22 100644
--- a/engines/ultima/ultima8/world/item.cpp
+++ b/engines/ultima/ultima8/world/item.cpp
@@ -186,7 +186,7 @@ void Item::move(int32 X, int32 Y, int32 Z) {
 		// No lerping when going from a container to somewhere else
 		no_lerping = true;
 	}
-	// Item needs to be removed if it in the map, and it is moving to a
+	// Item needs to be removed if in the map, and it is moving to a
 	// different chunk
 	else if ((_extendedFlags & EXT_INCURMAP) &&
 	         ((_x / mapChunkSize != X / mapChunkSize) ||
@@ -204,7 +204,7 @@ void Item::move(int32 X, int32 Y, int32 Z) {
 	_y = Y;
 	_z = Z;
 
-	// Add it to the map if needed
+	// Add it back to the map if needed
 	if (!(_extendedFlags & EXT_INCURMAP)) {
 		// Disposable fast only items get put at the end
 		// While normal items get put at start


Commit: 55dcbac06eec27da7445fd1063acbcf981857802
    https://github.com/scummvm/scummvm/commit/55dcbac06eec27da7445fd1063acbcf981857802
Author: Matthew Duggan (mgithub at guarana.org)
Date: 2021-02-11T10:03:03+09:00

Commit Message:
ULTIMA8: Save unknown crusader flag

This breaks savegame compatibility for Crusader games, but the engine is
unstable and the game broken so no one should mind.

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


diff --git a/engines/ultima/ultima8/ultima8.cpp b/engines/ultima/ultima8/ultima8.cpp
index 36f0e05776..1052587a74 100644
--- a/engines/ultima/ultima8/ultima8.cpp
+++ b/engines/ultima/ultima8/ultima8.cpp
@@ -1295,6 +1295,11 @@ void Ultima8Engine::save(Common::WriteStream *ws) {
 	uint8 s = (_avatarInStasis ? 1 : 0);
 	ws->writeByte(s);
 
+	if (GAME_IS_CRUSADER) {
+		uint8 f = (_unkCrusaderFlag ? 1 : 0);
+		ws->writeByte(f);
+	}
+
 	int32 absoluteTime = Kernel::get_instance()->getFrameNum() + _timeOffset;
 	ws->writeUint32LE(static_cast<uint32>(absoluteTime));
 	ws->writeUint16LE(_avatarMoverProcess->getPid());
@@ -1314,6 +1319,10 @@ void Ultima8Engine::save(Common::WriteStream *ws) {
 bool Ultima8Engine::load(Common::ReadStream *rs, uint32 version) {
 	_avatarInStasis = (rs->readByte() != 0);
 
+	if (GAME_IS_CRUSADER) {
+		_unkCrusaderFlag  = (rs->readByte() != 0);
+	}
+
 	// no gump should be moused over after load
 	_mouse->resetMouseOverGump();
 


Commit: 48c6c2beca602c54fce6603c94539e879e38d344
    https://github.com/scummvm/scummvm/commit/48c6c2beca602c54fce6603c94539e879e38d344
Author: Matthew Duggan (mgithub at guarana.org)
Date: 2021-02-11T10:11:14+09:00

Commit Message:
ULTIMA8: Avoid null ptr for missing ini sections

Changed paths:
    engines/ultima/ultima8/conf/config_file_manager.cpp


diff --git a/engines/ultima/ultima8/conf/config_file_manager.cpp b/engines/ultima/ultima8/conf/config_file_manager.cpp
index 00bebe7c84..42c94075af 100644
--- a/engines/ultima/ultima8/conf/config_file_manager.cpp
+++ b/engines/ultima/ultima8/conf/config_file_manager.cpp
@@ -135,8 +135,9 @@ KeyMap ConfigFileManager::listKeyValues(const istring &category, const istring &
 	Std::vector<ConfigFile*>::const_iterator i;
 
 	for (i = _configFiles.begin(); i != _configFiles.end(); ++i) {
-		if ((*i)->_category == category) {
-			Common::INIFile::SectionKeyList keys = (*i)->_iniFile.getKeys(section);
+		const ConfigFile *c = *i;
+		if (c->_category == category && c->_iniFile.hasSection(section)) {
+			Common::INIFile::SectionKeyList keys = c->_iniFile.getKeys(section);
 			Common::INIFile::SectionKeyList::const_iterator j;
 			for (j = keys.begin(); j != keys.end(); ++j) {
 				values[j->key] = j->value;


Commit: 0745ea382c8d097f95a94864542794c94b44f0a3
    https://github.com/scummvm/scummvm/commit/0745ea382c8d097f95a94864542794c94b44f0a3
Author: Matthew Duggan (mgithub at guarana.org)
Date: 2021-02-11T11:35:07+09:00

Commit Message:
ULTIMA8: Fix missing map tile in uppper catacombs

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


diff --git a/engines/ultima/ultima8/world/map.cpp b/engines/ultima/ultima8/world/map.cpp
index 467ca3b040..03a24a0e06 100644
--- a/engines/ultima/ultima8/world/map.cpp
+++ b/engines/ultima/ultima8/world/map.cpp
@@ -98,6 +98,13 @@ void Map::loadFixed(Common::SeekableReadStream *rs) {
 		addMapFix(301, 1, 13183, 16511, 8);
 	}
 
+	// Upper Catacombs after using the skull (ScummVM bug #12097)
+	// Not a perfect fix (still a few pixels off) but reduces chance
+	// of bug happening
+	if (GAME_IS_U8 && _mapNum == 50) {
+		addMapFix(34, 7, 16127, 6143, 0);
+	}
+
 	// U8 hack for missing ground/wall tiles on map 62. See docs/u8bugs.txt
 	if (GAME_IS_U8 && _mapNum == 62) {
 		addMapFix(301, 1, 16255, 6143, 48);


Commit: a09f262dbae482fabae4905b9ce6a546a5f5cf60
    https://github.com/scummvm/scummvm/commit/a09f262dbae482fabae4905b9ce6a546a5f5cf60
Author: Matthew Duggan (mgithub at guarana.org)
Date: 2021-02-11T11:36:04+09:00

Commit Message:
ULTIMA8: Shape viewer formatting fix

Changed paths:
    engines/ultima/ultima8/gumps/shape_viewer_gump.cpp


diff --git a/engines/ultima/ultima8/gumps/shape_viewer_gump.cpp b/engines/ultima/ultima8/gumps/shape_viewer_gump.cpp
index 77fa2d172f..0d8b637e4e 100644
--- a/engines/ultima/ultima8/gumps/shape_viewer_gump.cpp
+++ b/engines/ultima/ultima8/gumps/shape_viewer_gump.cpp
@@ -141,7 +141,7 @@ void ShapeViewerGump::PaintThis(RenderSurface *surf, int32 lerp_factor, bool /*s
 				uint8 px_g = shape->getPalette()->_palette[rawpx * 3 + 1];
 				uint8 px_b = shape->getPalette()->_palette[rawpx * 3 + 2];
 
-				sprintf(buf2, "px: (%d/%d, %d/%d): %d (%d, %d, %d)", relx, frame->_xoff, rely, frame->_yoff, rawpx, px_r, px_g, px_b);
+				sprintf(buf2, "px: (%d, %d)(%d, %d): %d (%d, %d, %d)", relx, rely, frame->_xoff, frame->_yoff, rawpx, px_r, px_g, px_b);
 				rendtext = font->renderText(buf2, remaining);
 				rendtext->draw(surf, 20, 25);
 				delete rendtext;




More information about the Scummvm-git-logs mailing list