aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTravis Howell2006-10-09 10:26:27 +0000
committerTravis Howell2006-10-09 10:26:27 +0000
commitb2d4d36e8bf954aaa82cb6cadeb07fbc17d569f0 (patch)
tree0ade0fbdf83816e130f41a7fa789ee95cf7e7713
parent05dfe432affda2a9f35712b20257d1b07f83abde (diff)
downloadscummvm-rg350-b2d4d36e8bf954aaa82cb6cadeb07fbc17d569f0.tar.gz
scummvm-rg350-b2d4d36e8bf954aaa82cb6cadeb07fbc17d569f0.tar.bz2
scummvm-rg350-b2d4d36e8bf954aaa82cb6cadeb07fbc17d569f0.zip
Add Amiga ECS verison of Simon the Sorcerer 1
svn-id: r24250
-rw-r--r--engines/agos/game.cpp83
-rw-r--r--engines/agos/intern.h3
-rw-r--r--engines/agos/items.cpp7
-rw-r--r--engines/agos/res.cpp14
-rw-r--r--engines/agos/res_ami.cpp6
-rw-r--r--engines/agos/vga.cpp11
6 files changed, 86 insertions, 38 deletions
diff --git a/engines/agos/game.cpp b/engines/agos/game.cpp
index d25be232ba..153c4a14aa 100644
--- a/engines/agos/game.cpp
+++ b/engines/agos/game.cpp
@@ -245,34 +245,41 @@ static const ADGameFileDescription SIMON1ACORN_GameFiles[] = {
{ "tbllist", GAME_TBLFILE, "d198a80de2c59e4a0cd24b98814849e8"},
};
-static const ADGameFileDescription SIMON1AMIGA_GameFiles[] = {
+static const ADGameFileDescription SIMON1AMIGA_ECS_GameFiles[] = {
+ { "gameamiga", GAME_BASEFILE, "bb94a688e247695d912cce9d0173d73a"},
+ { "icon.pkd", GAME_ICONFILE, "565ef7a98dcc21ef526a2bb10b6f42ed"},
+ { "stripped.txt", GAME_STRFILE, "f5fc67db3b8c5283cda51c43b98a74f8"},
+ { "tbllist", GAME_TBLFILE, "f9d5bf2ce09f82289c791c3ca26e1e4b"},
+};
+
+static const ADGameFileDescription SIMON1AMIGA_ECS_DEMO_GameFiles[] = {
+ { "gameamiga", GAME_BASEFILE, "a12b696170f14eca5ff75f1549829251"}, // Unpacked version
+ { "icon.pkd", GAME_ICONFILE, "ebc96af15bfaf75ba8210326b9260d2f"},
+ { "stripped.txt", GAME_STRFILE, "8edde5b9498dc9f31da1093028da467c"},
+ { "tbllist", GAME_TBLFILE, "1247e024e1f13ca54c1e354120c7519c"},
+};
+
+static const ADGameFileDescription SIMON1AMIGA_AGA_GameFiles[] = {
{ "gameamiga", GAME_BASEFILE, "6c9ad2ff571d34a4cf0c696cf4e13500"},
{ "icon.pkd", GAME_ICONFILE, "565ef7a98dcc21ef526a2bb10b6f42ed"},
{ "stripped.txt", GAME_STRFILE, "c649fcc0439766810e5097ee7e81d4c8"},
{ "tbllist", GAME_TBLFILE, "f9d5bf2ce09f82289c791c3ca26e1e4b"},
};
-static const ADGameFileDescription SIMON1AMIGA_FR_GameFiles[] = {
+static const ADGameFileDescription SIMON1AMIGA_AGA_FR_GameFiles[] = {
{ "gameamiga", GAME_BASEFILE, "bd9828b9d4e5d89b50fe8c47a8e6bc07"},
{ "icon.pkd", GAME_ICONFILE, "565ef7a98dcc21ef526a2bb10b6f42ed"},
{ "stripped.txt", GAME_STRFILE, "2297baec985617d0d5612a0124bac359"},
{ "tbllist", GAME_TBLFILE, "f9d5bf2ce09f82289c791c3ca26e1e4b"},
};
-static const ADGameFileDescription SIMON1AMIGA_DE_GameFiles[] = {
+static const ADGameFileDescription SIMON1AMIGA_AGA_DE_GameFiles[] = {
{ "gameamiga", GAME_BASEFILE, "a2de9553f3b73064369948b5af38bb30"},
{ "icon.pkd", GAME_ICONFILE, "565ef7a98dcc21ef526a2bb10b6f42ed"},
{ "stripped.txt", GAME_STRFILE, "c649fcc0439766810e5097ee7e81d4c8"},
{ "tbllist", GAME_TBLFILE, "f9d5bf2ce09f82289c791c3ca26e1e4b"},
};
-static const ADGameFileDescription SIMON1AMIGADEMO_GameFiles[] = {
- { "gameamiga", GAME_BASEFILE, "a12b696170f14eca5ff75f1549829251"}, // Unpacked version
- { "icon.pkd", GAME_ICONFILE, "ebc96af15bfaf75ba8210326b9260d2f"},
- { "stripped.txt", GAME_STRFILE, "8edde5b9498dc9f31da1093028da467c"},
- { "tbllist", GAME_TBLFILE, "1247e024e1f13ca54c1e354120c7519c"},
-};
-
static const ADGameFileDescription SIMON1CD32_GameFiles[] = {
{ "gameamiga", GAME_BASEFILE, "bab7f19237cf7d7619b6c73631da1854"},
{ "icon.pkd", GAME_ICONFILE, "565ef7a98dcc21ef526a2bb10b6f42ed"},
@@ -849,30 +856,46 @@ static const AGOSGameDescription gameDescriptions[] = {
GF_TALKIE,
},
- // Simon the Sorcerer 1 - English Amiga AGA Floppy
+ // Simon the Sorcerer 1 - English Amiga ECS Floppy
{
{
"simon1",
- "AGA Floppy",
- ARRAYSIZE(SIMON1AMIGA_GameFiles),
- SIMON1AMIGA_GameFiles,
+ "ECS Floppy",
+ ARRAYSIZE(SIMON1AMIGA_ECS_GameFiles),
+ SIMON1AMIGA_ECS_GameFiles,
Common::EN_ANY,
Common::kPlatformAmiga,
},
GType_SIMON1,
- GID_SIMON1AMIGA,
- GF_CRUNCHED | GF_OLD_BUNDLE,
+ GID_SIMON1AMIGADEMO,
+ GF_32COLOR | GF_CRUNCHED | GF_OLD_BUNDLE,
},
- // Simon the Sorcerer 1 - French Amiga AGA Floppy
+ // Simon the Sorcerer 1 - English Amiga ECS Demo
+ {
+ {
+ "simon1",
+ "ECS Demo",
+ ARRAYSIZE(SIMON1AMIGA_ECS_DEMO_GameFiles),
+ SIMON1AMIGA_ECS_DEMO_GameFiles,
+ Common::EN_ANY,
+ Common::kPlatformAmiga,
+ },
+
+ GType_SIMON1,
+ GID_SIMON1AMIGADEMO,
+ GF_32COLOR | GF_CRUNCHED | GF_OLD_BUNDLE,
+ },
+
+ // Simon the Sorcerer 1 - English Amiga AGA Floppy
{
{
"simon1",
"AGA Floppy",
- ARRAYSIZE(SIMON1AMIGA_FR_GameFiles),
- SIMON1AMIGA_FR_GameFiles,
- Common::FR_FRA,
+ ARRAYSIZE(SIMON1AMIGA_AGA_GameFiles),
+ SIMON1AMIGA_AGA_GameFiles,
+ Common::EN_ANY,
Common::kPlatformAmiga,
},
@@ -881,14 +904,14 @@ static const AGOSGameDescription gameDescriptions[] = {
GF_CRUNCHED | GF_OLD_BUNDLE,
},
- // Simon the Sorcerer 1 - German Amiga AGA Floppy
+ // Simon the Sorcerer 1 - French Amiga AGA Floppy
{
{
"simon1",
"AGA Floppy",
- ARRAYSIZE(SIMON1AMIGA_DE_GameFiles),
- SIMON1AMIGA_DE_GameFiles,
- Common::DE_DEU,
+ ARRAYSIZE(SIMON1AMIGA_AGA_FR_GameFiles),
+ SIMON1AMIGA_AGA_FR_GameFiles,
+ Common::FR_FRA,
Common::kPlatformAmiga,
},
@@ -897,19 +920,19 @@ static const AGOSGameDescription gameDescriptions[] = {
GF_CRUNCHED | GF_OLD_BUNDLE,
},
- // Simon the Sorcerer 1 - English Amiga ECS Demo
+ // Simon the Sorcerer 1 - German Amiga AGA Floppy
{
{
"simon1",
- "ECS Demo",
- ARRAYSIZE(SIMON1AMIGADEMO_GameFiles),
- SIMON1AMIGADEMO_GameFiles,
- Common::EN_ANY,
+ "AGA Floppy",
+ ARRAYSIZE(SIMON1AMIGA_AGA_DE_GameFiles),
+ SIMON1AMIGA_AGA_DE_GameFiles,
+ Common::DE_DEU,
Common::kPlatformAmiga,
},
GType_SIMON1,
- GID_SIMON1AMIGADEMO,
+ GID_SIMON1AMIGA,
GF_CRUNCHED | GF_OLD_BUNDLE,
},
diff --git a/engines/agos/intern.h b/engines/agos/intern.h
index e23bdf1ba2..f5824c7907 100644
--- a/engines/agos/intern.h
+++ b/engines/agos/intern.h
@@ -208,7 +208,8 @@ enum GameFeatures {
GF_TALKIE = 1 << 0,
GF_OLD_BUNDLE = 1 << 1,
GF_CRUNCHED = 1 << 2,
- GF_ZLIBCOMP = 1 << 3
+ GF_ZLIBCOMP = 1 << 3,
+ GF_32COLOR = 1 << 4
};
enum GameFileTypes {
diff --git a/engines/agos/items.cpp b/engines/agos/items.cpp
index 8113633780..39d23ea195 100644
--- a/engines/agos/items.cpp
+++ b/engines/agos/items.cpp
@@ -884,7 +884,12 @@ void AGOSEngine::o_random() {
// 53: random
uint var = getVarWrapper();
uint value = (uint16)getVarOrWord();
- writeVariable(var, _rnd.getRandomNumber(value - 1));
+
+ // Copy protection subtitles aren't displayed in Amiga version
+ if (getGameId() == GID_SIMON1AMIGA && var == 51 && value == 8)
+ writeVariable(var, 4);
+ else
+ writeVariable(var, _rnd.getRandomNumber(value - 1));
}
void AGOSEngine::o_moveDirn() {
diff --git a/engines/agos/res.cpp b/engines/agos/res.cpp
index 2c7f9b6a31..9e961dd1c3 100644
--- a/engines/agos/res.cpp
+++ b/engines/agos/res.cpp
@@ -708,9 +708,17 @@ void AGOSEngine::loadVGAFile(uint id, uint type) {
}
free(srcBuffer);
} else {
- dst = allocBlock(dstSize + extraBuffer);
- if (in.read(dst, dstSize) != dstSize)
- error("loadVGAFile: Read failed");
+ //if (getGameId() == GID_SIMON1CD32) {
+ // dst = (byte *)malloc(dstSize);
+ // if (in.read(dst, dstSize) != dstSize)
+ // error("loadVGAFile: Read failed");
+ // convertAmiga(dst, dstSize);
+ // free(dst);
+ //} else {
+ dst = allocBlock(dstSize + extraBuffer);
+ if (in.read(dst, dstSize) != dstSize)
+ error("loadVGAFile: Read failed");
+ //}
}
in.close();
} else if (type != 3) {
diff --git a/engines/agos/res_ami.cpp b/engines/agos/res_ami.cpp
index ecafd46264..2c32b64382 100644
--- a/engines/agos/res_ami.cpp
+++ b/engines/agos/res_ami.cpp
@@ -39,6 +39,8 @@ byte *clipoutptr;
int clipnumber;
static void uncompressplane(byte *plane, byte *outptr, uint16 length) {
+ debug(0, "uncompressplane: length %d", length);
+
char x;
byte y, z;
while (length) {
@@ -69,6 +71,8 @@ static void uncompressplane(byte *plane, byte *outptr, uint16 length) {
}
static void convertcompressedclip(uint16 height, uint16 width) {
+ debug(0, "convertcompressedclip: height %d width %d", height, width);
+
byte *plane0;
byte *plane1;
byte *plane2;
@@ -218,6 +222,8 @@ static void convertcompressedclip(uint16 height, uint16 width) {
}
static void convertclip(uint32 offset, uint16 height, uint16 width) {
+ debug(0, "convertclip: height %d width %d", height, width);
+
uint32 length, i, j;
uint16 word1, word2, word3, word4;
byte outbyte, outbyte1;
diff --git a/engines/agos/vga.cpp b/engines/agos/vga.cpp
index 7125a97908..c833eb12c8 100644
--- a/engines/agos/vga.cpp
+++ b/engines/agos/vga.cpp
@@ -959,6 +959,10 @@ void AGOSEngine::vc10_draw() {
state.palette = 0;
}
+ if (getFeatures() & GF_32COLOR) {
+ state.palette = 0;
+ }
+
state.x = (int16)vcReadNextWord();
state.x -= _scrollX;
@@ -2147,9 +2151,10 @@ void AGOSEngine::vc44_skipIfBitSet() {
void AGOSEngine::vc45_setSpriteX() {
if (getGameType() == GType_ELVIRA2 || getGameType() == GType_WW) {
- //FIXME
- vcReadNextWord();
- vcReadNextWord();
+ uint num = vcReadNextWord();
+ uint color = vcReadNextWord();
+
+ debug(0, "vc45: window %d color %d\n", num, color);
} else {
VgaSprite *vsp = findCurSprite();
vsp->x = vcReadVar(vcReadNextWord());