[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