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

mduggan mgithub at guarana.org
Sun Mar 7 09:15:08 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:
20d4380337 ULTIMA8: Fix some coverity issues
c3e21d27dd ULTIMA8: Fix Crusader explosion damage slightly
8074297b05 ULTIMA8: Switch cheat mover keymap from Alt to Meta
c82c6901bc PRIVATE: Fix some coverity issues


Commit: 20d43803375be4c021aca1821f6dbb60023aeb4b
    https://github.com/scummvm/scummvm/commit/20d43803375be4c021aca1821f6dbb60023aeb4b
Author: Matthew Duggan (mgithub at guarana.org)
Date: 2021-03-07T18:13:36+09:00

Commit Message:
ULTIMA8: Fix some coverity issues

Changed paths:
    engines/ultima/ultima8/audio/music_flex.cpp
    engines/ultima/ultima8/audio/music_flex.h
    engines/ultima/ultima8/gumps/computer_gump.cpp
    engines/ultima/ultima8/gumps/remorse_menu_gump.cpp
    engines/ultima/ultima8/gumps/weasel_gump.cpp
    engines/ultima/ultima8/ultima8.cpp


diff --git a/engines/ultima/ultima8/audio/music_flex.cpp b/engines/ultima/ultima8/audio/music_flex.cpp
index 02e1a3fb2f..3670ec355e 100644
--- a/engines/ultima/ultima8/audio/music_flex.cpp
+++ b/engines/ultima/ultima8/audio/music_flex.cpp
@@ -47,7 +47,7 @@ MusicFlex::~MusicFlex() {
 }
 
 MusicFlex::SongInfo::SongInfo() : _numMeasures(0), _loopJump(0) {
-	memset(_filename, 0, 16);
+	memset(_filename, 0, 17);
 	memset(_transitions, 0, 128 * sizeof(int *));
 }
 
diff --git a/engines/ultima/ultima8/audio/music_flex.h b/engines/ultima/ultima8/audio/music_flex.h
index 72c78a0f02..f07c67df52 100644
--- a/engines/ultima/ultima8/audio/music_flex.h
+++ b/engines/ultima/ultima8/audio/music_flex.h
@@ -35,7 +35,7 @@ public:
 		SongInfo();
 		~SongInfo();
 
-		char        _filename[16];
+		char        _filename[17];
 		int         _numMeasures;
 		int         _loopJump;
 		int         *_transitions[128];
diff --git a/engines/ultima/ultima8/gumps/computer_gump.cpp b/engines/ultima/ultima8/gumps/computer_gump.cpp
index 16ed4cf89d..2dddd130b0 100644
--- a/engines/ultima/ultima8/gumps/computer_gump.cpp
+++ b/engines/ultima/ultima8/gumps/computer_gump.cpp
@@ -105,6 +105,9 @@ void ComputerGump::run() {
 void ComputerGump::nextText() {
 	TextWidget *textWidget = dynamic_cast<TextWidget *>(_textWidget);
 
+	if (!textWidget)
+		return;
+
 	if (!textWidget->setupNextText())
 		Close();
 }
diff --git a/engines/ultima/ultima8/gumps/remorse_menu_gump.cpp b/engines/ultima/ultima8/gumps/remorse_menu_gump.cpp
index fbcf8cd826..64e38ee4ba 100644
--- a/engines/ultima/ultima8/gumps/remorse_menu_gump.cpp
+++ b/engines/ultima/ultima8/gumps/remorse_menu_gump.cpp
@@ -220,8 +220,7 @@ void RemorseMenuGump::selectEntry(int entry) {
 }
 
 bool RemorseMenuGump::OnTextInput(int unicode) {
-	if (Gump::OnTextInput(unicode)) return true;
-	return true;
+	return Gump::OnTextInput(unicode);
 }
 
 } // End of namespace Ultima8
diff --git a/engines/ultima/ultima8/gumps/weasel_gump.cpp b/engines/ultima/ultima8/gumps/weasel_gump.cpp
index 57d661c335..f105b6d873 100644
--- a/engines/ultima/ultima8/gumps/weasel_gump.cpp
+++ b/engines/ultima/ultima8/gumps/weasel_gump.cpp
@@ -101,9 +101,9 @@ static const char *_getRandomMovie(const char **movies, int nmovies) {
 bool WeaselGump::_playedIntroMovie = false;
 
 WeaselGump::WeaselGump(uint16 level)
-	: ModalGump(0, 0, 640, 480), _credits(0),
-	  _level(level), _state(kWeaselStart), _curItem(0), _ammoMode(false),
-	  _curItemCost(1), _curItemShape(0), _ui(nullptr), _movie(nullptr) {
+	: ModalGump(0, 0, 640, 480), _credits(0), _level(level),
+	  _state(kWeaselStart), _curItem(0), _ammoMode(false), _curItemCost(1),
+	  _curItemShape(0), _ui(nullptr), _movie(nullptr), _weaselDat(nullptr) {
 	Mouse *mouse = Mouse::get_instance();
 	mouse->pushMouseCursor();
 	mouse->setMouseCursor(Mouse::MOUSE_HAND);
@@ -202,6 +202,10 @@ Gump *WeaselGump::playMovie(const Std::string &filename) {
 	const Std::string path = Std::string::format("flics/%s.avi", filename.c_str());
 	FileSystem *filesys = FileSystem::get_instance();
 	Common::SeekableReadStream *rs = filesys->ReadFile(path);
+	if (!rs) {
+		warning("Couldn't load flic %s", filename.c_str());
+		return nullptr;
+	}
 	Gump *gump = new MovieGump(600, 450, rs, false);
 	gump->InitGump(this, true);
 	gump->setRelativePosition(CENTER);
@@ -500,6 +504,7 @@ void WeaselGump::updateItemDisplay() {
 	const ShapeInfo *shapeinfo = GameData::get_instance()->getMainShapes()->getShapeInfo(_curItemShape);
 	if (!shapeinfo || !shapeinfo->_weaponInfo) {
 		warning("Weasel: no info for shape %d", _curItemShape);
+		return;
 	}
 	const Shape *shape = GameData::get_instance()->getGumps()->getShape(shapeinfo->_weaponInfo->_displayGumpShape);
 
diff --git a/engines/ultima/ultima8/ultima8.cpp b/engines/ultima/ultima8/ultima8.cpp
index 8577ee3f4e..7764488879 100644
--- a/engines/ultima/ultima8/ultima8.cpp
+++ b/engines/ultima/ultima8/ultima8.cpp
@@ -1223,6 +1223,7 @@ Common::Error Ultima8Engine::loadGameStream(Common::SeekableReadStream *stream)
 		perr << message << Std::endl;
 #else
 		Error(message, "Error Loading savegame");
+		delete sg;
 		return Common::kReadingFailed;
 #endif
 	}


Commit: c3e21d27dde1b1c21e28cff9285795162676b869
    https://github.com/scummvm/scummvm/commit/c3e21d27dde1b1c21e28cff9285795162676b869
Author: Matthew Duggan (mgithub at guarana.org)
Date: 2021-03-07T18:13:36+09:00

Commit Message:
ULTIMA8: Fix Crusader explosion damage slightly

Changed paths:
    engines/ultima/ultima8/world/damage_info.cpp
    engines/ultima/ultima8/world/fire_type.cpp
    engines/ultima/ultima8/world/fire_type.h
    engines/ultima/ultima8/world/item.cpp
    engines/ultima/ultima8/world/super_sprite_process.cpp


diff --git a/engines/ultima/ultima8/world/damage_info.cpp b/engines/ultima/ultima8/world/damage_info.cpp
index 8ecd045294..bc59f45f5c 100644
--- a/engines/ultima/ultima8/world/damage_info.cpp
+++ b/engines/ultima/ultima8/world/damage_info.cpp
@@ -57,7 +57,7 @@ bool DamageInfo::applyToItem(Item *item, uint16 points) const {
 	// Get some data out of the item before we potentially delete
 	// it by explosion
 	uint16 q = item->getQuality();
-	int32 x, y , z;
+	int32 x, y, z;
 	item->getLocation(x, y, z);
 	int32 mapnum = item->getMapNum();
 
diff --git a/engines/ultima/ultima8/world/fire_type.cpp b/engines/ultima/ultima8/world/fire_type.cpp
index 3c1fd0e7b8..e798ea5636 100644
--- a/engines/ultima/ultima8/world/fire_type.cpp
+++ b/engines/ultima/ultima8/world/fire_type.cpp
@@ -164,7 +164,8 @@ void FireType::makeBulletSplashShapeAndPlaySound(int32 x, int32 y, int32 z) cons
 	}
 }
 
-void FireType::applySplashDamageAround(const Point3 &pt, int damage, const Item *exclude, const Item *src) const {
+void FireType::applySplashDamageAround(const Point3 &pt, int damage, int rangediv, const Item *exclude, const Item *src) const {
+	assert(rangediv > 0);
 	if (!getRange())
 		return;
 	static const uint32 BULLET_SPLASH_SHAPE = 0x1d9;
@@ -178,7 +179,7 @@ void FireType::applySplashDamageAround(const Point3 &pt, int damage, const Item
 	UCList uclist(2);
 	LOOPSCRIPT(script, LS_TOKEN_TRUE); // we want all items
 	currentmap->areaSearch(&uclist, script, sizeof(script), nullptr,
-						   getRange() * 32, true, pt.x, pt.y);
+						   getRange() * 32 / rangediv, true, pt.x, pt.y);
 	for (unsigned int i = 0; i < uclist.getSize(); ++i) {
 		Item *splashitem = getItem(uclist.getuint16(i));
 		if (!splashitem) {
diff --git a/engines/ultima/ultima8/world/fire_type.h b/engines/ultima/ultima8/world/fire_type.h
index 2e26eb1ac9..33061bae0e 100644
--- a/engines/ultima/ultima8/world/fire_type.h
+++ b/engines/ultima/ultima8/world/fire_type.h
@@ -84,7 +84,8 @@ public:
 
 	uint16 getRandomDamage() const;
 
-	void applySplashDamageAround(const Point3 &pt, int damage, const Item *exclude, const Item *src) const;
+	void applySplashDamageAround(const Point3 &pt, int damage, int rangediv,
+								 const Item *exclude, const Item *src) const;
 
 	void makeBulletSplashShapeAndPlaySound(int32 x, int32 y, int32 z) const;
 
diff --git a/engines/ultima/ultima8/world/item.cpp b/engines/ultima/ultima8/world/item.cpp
index 9f3a5a7e15..34e0afc375 100644
--- a/engines/ultima/ultima8/world/item.cpp
+++ b/engines/ultima/ultima8/world/item.cpp
@@ -1201,7 +1201,7 @@ uint16 Item::fireWeapon(int32 x, int32 y, int32 z, Direction dir, int firetype,
 		block->receiveHit(getObjId(), damagedir, damage, firetype);
 		if (firetypedat->getRange() != 0) {
 			int splashdamage = firetypedat->getRandomDamage();
-			firetypedat->applySplashDamageAround(blockpt, splashdamage, block, this);
+			firetypedat->applySplashDamageAround(blockpt, splashdamage, 1, block, this);
 		}
 		if (firetypedat->getNearSprite())
 			firetypedat->makeBulletSplashShapeAndPlaySound(ix, iy, iz);
@@ -2036,8 +2036,16 @@ void Item::hurl(int xs, int ys, int zs, int grav) {
 
 void Item::explode(int explosion_type, bool destroy_item, bool cause_damage) {
 	Process *p;
+	int damage_divisor = 1;
 
 	if (GAME_IS_CRUSADER) {
+
+		damage_divisor = explosion_type + 1;
+		if (damage_divisor == 1)
+			damage_divisor = 3;
+		else if (damage_divisor == 3)
+			damage_divisor = 1;
+
 		setFlag(FLG_BROKEN);
 		// TODO: original game puts them at cx/cy/cz, but that looks wrong..
 		int32 cx, cy, cz;
@@ -2113,8 +2121,8 @@ void Item::explode(int explosion_type, bool destroy_item, bool cause_damage) {
 		// Note: same FireType number used in both Remorse and Regret
 		const FireType *firetypedat = GameData::get_instance()->getFireType(4);
 		if (firetypedat) {
-			int damage = firetypedat->getRandomDamage();
-			firetypedat->applySplashDamageAround(pt, damage, this, this);
+			int damage = firetypedat->getRandomDamage() / damage_divisor;
+			firetypedat->applySplashDamageAround(pt, damage, damage_divisor, this, this);
 		} else {
 			warning("couldn't explode properly - no firetype 4 data");
 		}
@@ -2186,16 +2194,15 @@ void Item::receiveHitCru(uint16 other, Direction dir, int damage, uint16 type) {
 		}
 	}
 
-	if (shapeInfo->is_fixed() || shapeInfo->_weight == 0) {
-		// can't move
+	// Fixed items or 0 weight etems can't move.
+	// Only damage types 3 and 4 move items in Crusader.
+	if (shapeInfo->is_fixed() || shapeInfo->_weight == 0 || (type != 3 && type != 4)) {
 		return;
 	}
 
 	int xhurl = 10 + getRandom() % 15;
 	int yhurl = 10 + getRandom() % 15;
-
-	// nothing special, so just hurl the item
-	hurl(-xhurl * Direction_XFactor(dir), -yhurl * Direction_YFactor(dir), 16, 4); //!! constants
+	hurl(-xhurl * Direction_XFactor(dir), -yhurl * Direction_YFactor(dir), 0, 2); //!! constants
 }
 
 
diff --git a/engines/ultima/ultima8/world/super_sprite_process.cpp b/engines/ultima/ultima8/world/super_sprite_process.cpp
index 95e67994ae..e0b913ace3 100644
--- a/engines/ultima/ultima8/world/super_sprite_process.cpp
+++ b/engines/ultima/ultima8/world/super_sprite_process.cpp
@@ -287,7 +287,7 @@ void SuperSpriteProcess::makeBulletSplash(const Point3 &pt) {
 	if (firetypedat->getRange()) {
 		Item *item = getItem(_item0x77);
 		Item *src = getItem(_source);
-		firetypedat->applySplashDamageAround(pt, _damage, item, src);
+		firetypedat->applySplashDamageAround(pt, _damage, 1, item, src);
 	}
 	firetypedat->makeBulletSplashShapeAndPlaySound(pt.x, pt.y, pt.z);
 }


Commit: 8074297b057efe36c4b19b45f5f0f4fe4cb6096b
    https://github.com/scummvm/scummvm/commit/8074297b057efe36c4b19b45f5f0f4fe4cb6096b
Author: Matthew Duggan (mgithub at guarana.org)
Date: 2021-03-07T18:13:36+09:00

Commit Message:
ULTIMA8: Switch cheat mover keymap from Alt to Meta

Alt interferes with the original Crusader keymap.

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


diff --git a/engines/ultima/ultima8/meta_engine.cpp b/engines/ultima/ultima8/meta_engine.cpp
index 09c35d947c..3e1fe4ce3b 100644
--- a/engines/ultima/ultima8/meta_engine.cpp
+++ b/engines/ultima/ultima8/meta_engine.cpp
@@ -100,10 +100,10 @@ static const KeybindingRecord CHEAT_KEYS[] = {
 	{ ACTION_INC_SORT_ORDER, "INC_SORT_ORDER", "Increment Map Sort Order", "GameMapGump::incrementSortOrder", nullptr, "RIGHTBRACKET", nullptr, 0 },
 	{ ACTION_QUICK_MOVE_ASCEND, "ASCEND", "Ascend", "QuickAvatarMoverProcess::startAscend", "QuickAvatarMoverProcess::stopAscend", "HOME", nullptr, 0 },
 	{ ACTION_QUICK_MOVE_DESCEND, "DESCEND", "Descend", "QuickAvatarMoverProcess::startDescend", "QuickAvatarMoverProcess::stopDescend", "END", nullptr, FLAG_MENU_ENABLED },
-	{ ACTION_QUICK_MOVE_UP, "MOVE_UP", "Move Up", "QuickAvatarMoverProcess::startMoveUp", "QuickAvatarMoverProcess::stopMoveUp", "A+UP", nullptr, FLAG_MENU_ENABLED },
-	{ ACTION_QUICK_MOVE_DOWN, "MOVE_DOWN", "Move Down", "QuickAvatarMoverProcess::startMoveDown", "QuickAvatarMoverProcess::stopMoveDown", "A+DOWN", nullptr, FLAG_MENU_ENABLED },
-	{ ACTION_QUICK_MOVE_LEFT, "MOVE_LEFT", "Move Left", "QuickAvatarMoverProcess::startMoveLeft", "QuickAvatarMoverProcess::stopMoveLeft", "A+LEFT", nullptr, FLAG_MENU_ENABLED },
-	{ ACTION_QUICK_MOVE_RIGHT, "MOVE_RIGHT", "Move Right", "QuickAvatarMoverProcess::startMoveRight", "QuickAvatarMoverProcess::stopMoveRight", "A+RIGHT", nullptr, FLAG_MENU_ENABLED },
+	{ ACTION_QUICK_MOVE_UP, "MOVE_UP", "Move Up", "QuickAvatarMoverProcess::startMoveUp", "QuickAvatarMoverProcess::stopMoveUp", "M+UP", nullptr, FLAG_MENU_ENABLED },
+	{ ACTION_QUICK_MOVE_DOWN, "MOVE_DOWN", "Move Down", "QuickAvatarMoverProcess::startMoveDown", "QuickAvatarMoverProcess::stopMoveDown", "M+DOWN", nullptr, FLAG_MENU_ENABLED },
+	{ ACTION_QUICK_MOVE_LEFT, "MOVE_LEFT", "Move Left", "QuickAvatarMoverProcess::startMoveLeft", "QuickAvatarMoverProcess::stopMoveLeft", "M+LEFT", nullptr, FLAG_MENU_ENABLED },
+	{ ACTION_QUICK_MOVE_RIGHT, "MOVE_RIGHT", "Move Right", "QuickAvatarMoverProcess::startMoveRight", "QuickAvatarMoverProcess::stopMoveRight", "M+RIGHT", nullptr, FLAG_MENU_ENABLED },
 
 	{ ACTION_NONE, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, 0 }
 };


Commit: c82c6901bc8df8c7b93d6bd322342e67d224efb8
    https://github.com/scummvm/scummvm/commit/c82c6901bc8df8c7b93d6bd322342e67d224efb8
Author: Matthew Duggan (mgithub at guarana.org)
Date: 2021-03-07T18:14:01+09:00

Commit Message:
PRIVATE: Fix some coverity issues

Changed paths:
    engines/private/private.cpp
    engines/private/symbol.cpp


diff --git a/engines/private/private.cpp b/engines/private/private.cpp
index 095c504b64..5a2447fdce 100644
--- a/engines/private/private.cpp
+++ b/engines/private/private.cpp
@@ -47,7 +47,9 @@ PrivateEngine *g_private = NULL;
 extern int parse(char *);
 
 PrivateEngine::PrivateEngine(OSystem *syst, const ADGameDescription *gd)
-	: Engine(syst), _gameDescription(gd) {
+	: Engine(syst), _gameDescription(gd), _image(nullptr), _videoDecoder(nullptr),
+	  _compositeSurface(nullptr), _transparentColor(0), _frame(nullptr),
+	  _maxNumberClicks(0), _sirenWarning(0), _screenW(0), _screenH(0) {
 	_rnd = new Common::RandomSource("private");
 
 	// Debug channels
diff --git a/engines/private/symbol.cpp b/engines/private/symbol.cpp
index b25564251d..fb9da2f4c6 100644
--- a/engines/private/symbol.cpp
+++ b/engines/private/symbol.cpp
@@ -75,7 +75,7 @@ void setSymbol(Symbol *s, int v) {
 }
 
 /* find s in symbol table symlist */
-static Symbol *lookup(const Common::String &s, SymbolMap symlist) {
+static Symbol *lookup(const Common::String &s, const SymbolMap &symlist) {
 	Symbol *r = symlist.getVal(s);
 	return r;
 }




More information about the Scummvm-git-logs mailing list