diff options
author | Travis Howell | 2006-10-09 10:26:27 +0000 |
---|---|---|
committer | Travis Howell | 2006-10-09 10:26:27 +0000 |
commit | b2d4d36e8bf954aaa82cb6cadeb07fbc17d569f0 (patch) | |
tree | 0ade0fbdf83816e130f41a7fa789ee95cf7e7713 | |
parent | 05dfe432affda2a9f35712b20257d1b07f83abde (diff) | |
download | scummvm-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.cpp | 83 | ||||
-rw-r--r-- | engines/agos/intern.h | 3 | ||||
-rw-r--r-- | engines/agos/items.cpp | 7 | ||||
-rw-r--r-- | engines/agos/res.cpp | 14 | ||||
-rw-r--r-- | engines/agos/res_ami.cpp | 6 | ||||
-rw-r--r-- | engines/agos/vga.cpp | 11 |
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()); |