[Scummvm-git-logs] scummvm master -> d5af3f309b1962e2fda2018bc38e129a7ec8ae12
dreammaster
noreply at scummvm.org
Tue Jan 10 00:53:49 UTC 2023
This automated email contains information about 2 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
f493655c52 XEEN: Fixes for Vertigo well crash
d5af3f309b XEEN: Workaround for corrupt mine Alpha monsters in Clouds
Commit: f493655c52c53b1c03744e18a3ce282a0dbc3c26
https://github.com/scummvm/scummvm/commit/f493655c52c53b1c03744e18a3ce282a0dbc3c26
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2023-01-09T14:53:01-10:00
Commit Message:
XEEN: Fixes for Vertigo well crash
Changed paths:
engines/xeen/scripts.cpp
engines/xeen/sprites.cpp
engines/xeen/sprites.h
diff --git a/engines/xeen/scripts.cpp b/engines/xeen/scripts.cpp
index 5d709d28e18..db5348ea49a 100644
--- a/engines/xeen/scripts.cpp
+++ b/engines/xeen/scripts.cpp
@@ -1195,7 +1195,7 @@ bool Scripts::cmdAlterHed(ParamsIterator ¶ms) {
Map &map = *_vm->_map;
Party &party = *_vm->_party;
- HeadData::HeadEntry &he = map._headData[party._mazePosition.y][party._mazePosition.x];
+ HeadData::HeadEntry &he = map._headData[party._mazePosition.y % 16][party._mazePosition.x % 16];
he._left = params.readByte();
he._right = params.readByte();
diff --git a/engines/xeen/sprites.cpp b/engines/xeen/sprites.cpp
index 9aa097b565c..6a88aeeda5a 100644
--- a/engines/xeen/sprites.cpp
+++ b/engines/xeen/sprites.cpp
@@ -160,10 +160,13 @@ void SpriteResource::draw(XSurface &dest, int frame, const Common::Point &destPo
break;
}
- // Sprites can consist of separate background & foreground
- drawer->draw(dest, _index[frame]._offset1, destPos, r, flags, scale);
- if (_index[frame]._offset2)
- drawer->draw(dest, _index[frame]._offset2, destPos, r, flags, scale);
+ // WORKAROUND: Crash clicking Vertigo well in Clouds
+ if (frame < (int)_index.size()) {
+ // Sprites can consist of separate background & foreground
+ drawer->draw(dest, _index[frame]._offset1, destPos, r, flags, scale);
+ if (_index[frame]._offset2)
+ drawer->draw(dest, _index[frame]._offset2, destPos, r, flags, scale);
+ }
delete drawer;
}
diff --git a/engines/xeen/sprites.h b/engines/xeen/sprites.h
index 7e067d409cd..e8497e8a803 100644
--- a/engines/xeen/sprites.h
+++ b/engines/xeen/sprites.h
@@ -182,12 +182,12 @@ public:
*/
class SpriteDrawer {
private:
- byte *_data;
- size_t _filesize;
+ byte *_data = nullptr;
+ size_t _filesize = 0;
protected:
- byte *_destTop, *_destBottom;
- byte *_destLeft, *_destRight;
- int _pitch;
+ byte *_destTop = nullptr, *_destBottom = nullptr;
+ byte *_destLeft = nullptr, *_destRight = nullptr;
+ int _pitch = 0;
private:
/**
* Scale a co-ordinate value based on the passed scaling mask
@@ -223,7 +223,7 @@ public:
class SpriteDrawer1 : public SpriteDrawer {
private:
- byte _offset, _mask;
+ byte _offset = 0, _mask = 0;
protected:
/**
* Output a pixel
@@ -242,8 +242,8 @@ public:
*/
class SpriteDrawer2 : public SpriteDrawer {
private:
- uint16 _mask1, _mask2;
- uint16 _random1, _random2;
+ uint16 _mask1 = 0, _mask2 = 0;
+ uint16 _random1 = 0, _random2 = 0;
private:
/**
* Output a pixel
@@ -261,9 +261,9 @@ public:
*/
class SpriteDrawer3 : public SpriteDrawer {
private:
- uint16 _offset, _mask;
+ uint16 _offset = 0, _mask = 0;
byte _palette[256 * 3];
- bool _hasPalette;
+ bool _hasPalette = false;
private:
/**
* Output a pixel
@@ -278,7 +278,7 @@ public:
class SpriteDrawer4 : public SpriteDrawer {
private:
- byte _threshold;
+ byte _threshold = 0;
protected:
/**
* Output a pixel
@@ -296,7 +296,7 @@ public:
*/
class SpriteDrawer5 : public SpriteDrawer {
private:
- uint16 _threshold, _random1, _random2;
+ uint16 _threshold = 0, _random1 = 0, _random2 = 0;
protected:
/**
* Output a pixel
@@ -311,7 +311,7 @@ public:
class SpriteDrawer6 : public SpriteDrawer {
private:
- byte _mask;
+ byte _mask = 0;
protected:
/**
* Output a pixel
Commit: d5af3f309b1962e2fda2018bc38e129a7ec8ae12
https://github.com/scummvm/scummvm/commit/d5af3f309b1962e2fda2018bc38e129a7ec8ae12
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2023-01-09T14:53:02-10:00
Commit Message:
XEEN: Workaround for corrupt mine Alpha monsters in Clouds
Changed paths:
NEWS.md
engines/xeen/map.cpp
diff --git a/NEWS.md b/NEWS.md
index ea159799be3..5f9e699ad1c 100644
--- a/NEWS.md
+++ b/NEWS.md
@@ -146,6 +146,9 @@ For a more comprehensive changelog of the latest experimental code, see:
- Adjust cursor to behave closer to the original.
- Adjust item quantity slider to behave closer to the original.
+ Xeen:
+ - Several crash fixes for Clouds of Xeen
+
3DS port:
- Update relocation parser to support PREL31 that are emitted by new compiler.
- Do more autoconfiguration in ./configure.
diff --git a/engines/xeen/map.cpp b/engines/xeen/map.cpp
index 5a7a511bb96..2f520ad2bbb 100644
--- a/engines/xeen/map.cpp
+++ b/engines/xeen/map.cpp
@@ -479,7 +479,7 @@ void MonsterObjectData::synchronize(XeenSerializer &s, MonsterData &monsterData)
obj._direction = mobStruct._direction;
obj._frame = 100;
- if (obj._id < (int)_objectSprites.size()) {
+ if (obj._id >= 0 && obj._id < (int)_objectSprites.size()) {
obj._spriteId = _objectSprites[obj._id]._spriteId;
obj._sprites = &_objectSprites[obj._id]._sprites;
}
@@ -509,6 +509,12 @@ void MonsterObjectData::synchronize(XeenSerializer &s, MonsterData &monsterData)
if (mon._id < (int)_monsterSprites.size()) {
mon._spriteId = _monsterSprites[mon._id]._spriteId;
+
+ // WORKAROUND: For Clouds-only mine Alpha, the monster list is invalid
+ if (_vm->getGameID() == GType_Clouds && mon._spriteId == 105
+ && monsterData.size() == 91)
+ return;
+
mon._sprites = &_monsterSprites[mon._id]._sprites;
mon._attackSprites = &_monsterSprites[mon._id]._attackSprites;
mon._monsterData = &monsterData[mon._spriteId];
More information about the Scummvm-git-logs
mailing list