aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEugene Sandulenko2010-06-15 10:29:20 +0000
committerEugene Sandulenko2010-06-15 10:29:20 +0000
commit25948606c46fdb841b961439023bb64ca542e461 (patch)
tree0789f8ca7cf79656afbccd79e91e5b51185a7cba
parenta993e2fb45dd836efad3bc225f7186a4f48384fe (diff)
downloadscummvm-rg350-25948606c46fdb841b961439023bb64ca542e461.tar.gz
scummvm-rg350-25948606c46fdb841b961439023bb64ca542e461.tar.bz2
scummvm-rg350-25948606c46fdb841b961439023bb64ca542e461.zip
AGI: Fix bug #2960557.
Bug #2960557: "AGI: (Fan) SQ0 - Sprite (Ego) not erased". Added a workaround. Actually root cause is not yet clear. svn-id: r49737
-rw-r--r--engines/agi/agi.h5
-rw-r--r--engines/agi/detection_tables.h14
-rw-r--r--engines/agi/view.cpp5
3 files changed, 14 insertions, 10 deletions
diff --git a/engines/agi/agi.h b/engines/agi/agi.h
index fb9e204101..b00b0b3d7e 100644
--- a/engines/agi/agi.h
+++ b/engines/agi/agi.h
@@ -110,10 +110,11 @@ enum AgiGameID {
GID_SQ2,
GID_XMASCARD,
GID_FANMADE,
- GID_GETOUTTASQ,
+ GID_GETOUTTASQ, // Fanmade
+ GID_SQ0, // Fanmade
GID_MICKEY, // PreAGI
GID_WINNIE, // PreAGI
- GID_TROLL // PreAGI
+ GID_TROLL // PreAGI
};
} // End of namespace Agi
diff --git a/engines/agi/detection_tables.h b/engines/agi/detection_tables.h
index 8ec3bb031b..9c915b12f5 100644
--- a/engines/agi/detection_tables.h
+++ b/engines/agi/detection_tables.h
@@ -80,12 +80,12 @@ using Common::GUIO_NONE;
#define GAME3_PS(id,name,fname,md5,size,ver,flags,gid,platform) GAME_LVFPN(id,name,fname,md5,size,Common::EN_ANY,ver,flags,gid,platform,GType_V3)
-#define FANMADE_ILVF(id,name,md5,lang,ver,features) GAME_LVFPN(id,name,"logdir",md5,-1,lang,ver,(GF_FANMADE|features),GID_FANMADE,Common::kPlatformPC,GType_V2)
+#define FANMADE_ILVF(id,name,md5,lang,ver,features) GAME_LVFPNF(id,name,"logdir",md5,-1,lang,ver,(GF_FANMADE|features),GID_FANMADE,Common::kPlatformPC,GType_V2)
-#define FANMADE_ISVP(id,name,md5,size,ver,platform) GAME_LVFPN(id,name,"logdir",md5,size,Common::EN_ANY,ver,GF_FANMADE,GID_FANMADE,platform,GType_V2)
-#define FANMADE_SVP(name,md5,size,ver,platform) GAME_LVFPNF("agi-fanmade",name,"logdir",md5,size,Common::EN_ANY,ver,GF_FANMADE,GID_FANMADE,platform,GType_V2)
+#define FANMADE_ISVP(id,name,md5,size,ver,platform) GAME_LVFPNF(id,name,"logdir",md5,size,Common::EN_ANY,ver,GF_FANMADE,GID_FANMADE,platform,GType_V2)
+#define FANMADE_SVP(name,md5,size,ver,platform) FANMADE_ISVP("agi-fanmade",name,md5,size,ver,platform)
-#define FANMADE_LVF(name,md5,lang,ver,features) GAME_LVFPNF("agi-fanmade",name,"logdir",md5,-1,lang,ver,(GF_FANMADE|features),GID_FANMADE,Common::kPlatformPC,GType_V2)
+#define FANMADE_LVF(name,md5,lang,ver,features) FANMADE_ILVF("agi-fanmade",name,md5,lang,ver,features)
#define FANMADE_LF(name,md5,lang,features) FANMADE_LVF(name,md5,lang,0x2917,features)
#define FANMADE_IF(id,name,md5,features) FANMADE_ILVF(id,name,md5,Common::EN_ANY,0x2917,features)
@@ -775,9 +775,9 @@ static const AGIGameDescription gameDescriptions[] = {
FANMADE("Snowboarding Demo (v1.0)", "24bb8f29f1eddb5c0a099705267c86e4"),
FANMADE("Solar System Tour", "b5a3d0f392dfd76a6aa63f3d5f578403"),
FANMADE("Sorceror's Appraisal", "fe62615557b3cb7b08dd60c9d35efef1"),
- FANMADE_I("sq0", "v1.03", "d2fd6f7404e86182458494e64375e590"),
- FANMADE_I("sq0", "v1.04", "2ad9d1a4624a98571ee77dcc83f231b6"),
- FANMADE_ISVP("sq0", "", "e1a8e4efcce86e1efcaa14633b9eb986", 762, 0x2440, Common::kPlatformCoCo3),
+ GAME("sq0", "v1.03", "d2fd6f7404e86182458494e64375e590", 0x2917, GID_SQ0),
+ GAME("sq0", "v1.04", "2ad9d1a4624a98571ee77dcc83f231b6", 0x2917, GID_SQ0),
+ GAME_PS("sq0", "", "e1a8e4efcce86e1efcaa14633b9eb986", 762, 0x2440, GID_SQ0, Common::kPlatformCoCo3),
FANMADE_I("sqx", "v10.0 Feb 05", "c992ae2f8ab18360404efdf16fa9edd1"),
FANMADE_I("sqx", "v10.0 Jul 18", "812edec45cefad559d190ffde2f9c910"),
FANMADE_ISVP("sqx", "", "f0a59044475a5fa37c055d8c3eb4d1a7", 768, 0x2440, Common::kPlatformCoCo3),
diff --git a/engines/agi/view.cpp b/engines/agi/view.cpp
index fb417e86a9..b506c1ecab 100644
--- a/engines/agi/view.cpp
+++ b/engines/agi/view.cpp
@@ -297,14 +297,17 @@ void AgiEngine::setView(VtEntry *v, int n) {
uint16 viewFlags = 0;
+ // WORKAROUND
// When setting a view to the view table, if there's already another view set in that
// view table entry and it's still drawn, erase the existing view before setting the new one
// Fixes bug #1658643: AGI: SQ1 (2.2 DOS ENG) Graphic error, ego leaves behind copy
// Update: Apparently, this makes ego dissapear at times, e.g. when textboxes are shown
// Therefore, it's limited to view 118 in SQ1 (Roger climbing the ladder)
// Fixes bug #1715284: Roger sometimes disappears
+ // Update: Added case fot bug #2960557: AGI: (Fan) SQ0 - Sprite (Ego) not erased
if (v->viewData != NULL) {
- if (v->currentView == 118 && v->flags & DRAWN && getGameID() == GID_SQ1) {
+ if (((v->currentView == 118 && getGameID() == GID_SQ1) ||
+ (v->currentView == 2 & (n == 254 || n == 255) && getGameID() == GID_SQ0)) && v->flags & DRAWN) {
viewFlags = v->flags; // Store the flags for the view
_sprites->eraseUpdSprites();