aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTravis Howell2008-12-15 09:54:21 +0000
committerTravis Howell2008-12-15 09:54:21 +0000
commitddb810e17b76a999d46d1a4aba68e8a66edd7668 (patch)
treef8f41dbed4dc102ed4e107840a5e550e180ec7a8
parent2ce4a32fb61567522e0a7afb76337aca12357dcb (diff)
downloadscummvm-rg350-ddb810e17b76a999d46d1a4aba68e8a66edd7668.tar.gz
scummvm-rg350-ddb810e17b76a999d46d1a4aba68e8a66edd7668.tar.bz2
scummvm-rg350-ddb810e17b76a999d46d1a4aba68e8a66edd7668.zip
Add Moonbase Commander target again, for testing only.
svn-id: r35379
-rw-r--r--engines/scumm/detection_tables.h17
-rw-r--r--engines/scumm/he/logic_he.cpp12
-rw-r--r--engines/scumm/he/logic_he.h7
-rw-r--r--engines/scumm/he/script_v60he.cpp2
-rw-r--r--engines/scumm/he/script_v72he.cpp5
-rw-r--r--engines/scumm/he/wiz_he.cpp32
-rw-r--r--engines/scumm/scumm-md5.h4
-rw-r--r--engines/scumm/scumm.cpp4
-rw-r--r--engines/scumm/scumm.h1
-rw-r--r--tools/scumm-md5.txt4
10 files changed, 79 insertions, 9 deletions
diff --git a/engines/scumm/detection_tables.h b/engines/scumm/detection_tables.h
index ca71fc7b2f..bb7e6a0c8b 100644
--- a/engines/scumm/detection_tables.h
+++ b/engines/scumm/detection_tables.h
@@ -107,6 +107,7 @@ static const PlainGameDescriptor gameDescriptions[] = {
{ "jungle", "Let's Explore the Jungle with Buzzy" },
{ "lost", "Pajama Sam's Lost & Found" },
{ "maze", "Freddi Fish and Luther's Maze Madness" },
+ { "moonbase", "Moonbase Commander" },
{ "mustard", "SPY Fox in Hold the Mustard" },
{ "pajama", "Pajama Sam 1: No Need to Hide When It's Dark Outside" },
{ "pajama2", "Pajama Sam 2: Thunder and Lightning Aren't so Frightening" },
@@ -347,16 +348,19 @@ static const GameSettings gameVariantsTable[] = {
// Restructured the Scumm engine
{"pjgames", 0, 0, GID_HEGAME, 6, 100, MDT_NONE, GF_USE_KEY | GF_HE_NOSUBTITLES | GF_HE_LOCALIZED | GF_16BIT_COLOR, UNK},
- // Uses bink in external files for logos
- {"Baseball2003", 0, 0, GID_HEGAME, 6, 100, MDT_NONE, GF_USE_KEY | GF_16BIT_COLOR, UNK},
- {"basketball", 0, 0, GID_HEGAME, 6, 100, MDT_NONE, GF_USE_KEY| GF_16BIT_COLOR, UNK},
- {"Soccer2004", 0, 0, GID_SOCCER, 6, 100, MDT_NONE, GF_USE_KEY | GF_16BIT_COLOR, UNK},
-
// Uses smacker in external files, for testing only
{"arttime", 0, 0, GID_HEGAME, 6, 99, MDT_NONE, GF_USE_KEY | GF_16BIT_COLOR, UNK},
{"readtime", 0, 0, GID_HEGAME, 6, 99, MDT_NONE, GF_USE_KEY | GF_16BIT_COLOR, UNK},
+
+ // Uses bink in external files for logos
+ {"Baseball2003", 0, 0, GID_HEGAME, 6, 100, MDT_NONE, GF_USE_KEY | GF_16BIT_COLOR, UNK},
+ {"basketball", 0, 0, GID_HEGAME, 6, 100, MDT_NONE, GF_USE_KEY| GF_16BIT_COLOR, UNK},
{"football2002", 0, 0, GID_FOOTBALL, 6, 100, MDT_NONE, GF_USE_KEY | GF_16BIT_COLOR, UNK},
+ {"Soccer2004", 0, 0, GID_SOCCER, 6, 100, MDT_NONE, GF_USE_KEY | GF_16BIT_COLOR, UNK},
+ // U32 code required, for testing only
+ {"moonbase", 0, 0, GID_MOONBASE, 6, 100, MDT_NONE, GF_USE_KEY | GF_16BIT_COLOR, UNK},
+ {"moonbase", "Demo", 0, GID_MOONBASE, 6, 100, MDT_NONE, GF_USE_KEY | GF_16BIT_COLOR | GF_DEMO, UNK},
// The following are meant to be generic HE game variants and as such do
// not specify a game ID. Make sure that these are last in the table, else
@@ -640,6 +644,9 @@ static const GameFilenamePattern gameFilenamesTable[] = {
{ "maze", "Doolhof", kGenHEMac, Common::NL_NLD, Common::kPlatformMacintosh, 0 },
{ "maze", "Maze Madness", kGenHEMac, UNK_LANG, Common::kPlatformMacintosh, 0 },
+ { "moonbase", "moonbase", kGenHEPC, UNK_LANG, UNK, 0 },
+ { "moonbase", "moondemo", kGenHEPC, UNK_LANG, UNK, 0 },
+
{ "mustard", "mustard", kGenHEPC, UNK_LANG, UNK, 0 },
{ "mustard", "Mustard", kGenHEMac, UNK_LANG, Common::kPlatformMacintosh, 0 },
diff --git a/engines/scumm/he/logic_he.cpp b/engines/scumm/he/logic_he.cpp
index 5bc61da76d..f7f4c1effc 100644
--- a/engines/scumm/he/logic_he.cpp
+++ b/engines/scumm/he/logic_he.cpp
@@ -959,4 +959,16 @@ int LogicHEsoccer::op_1021(int32 *args) {
return 1;
}
+/***********************
+ * Moonbase Commander
+ *
+ */
+
+int LogicHEmoonbase::versionID() {
+ if (_vm->_game.features & GF_DEMO)
+ return -100;
+ else
+ return 100;
+}
+
} // End of namespace Scumm
diff --git a/engines/scumm/he/logic_he.h b/engines/scumm/he/logic_he.h
index b144f78c46..67b3ce78d3 100644
--- a/engines/scumm/he/logic_he.h
+++ b/engines/scumm/he/logic_he.h
@@ -135,6 +135,13 @@ private:
int op_1021(int32 *args);
};
+class LogicHEmoonbase : public LogicHE {
+public:
+ LogicHEmoonbase(ScummEngine_v90he *vm) : LogicHE(vm) {}
+
+ int versionID();
+};
+
} // End of namespace Scumm
#endif
diff --git a/engines/scumm/he/script_v60he.cpp b/engines/scumm/he/script_v60he.cpp
index e908670c83..f6e88596d4 100644
--- a/engines/scumm/he/script_v60he.cpp
+++ b/engines/scumm/he/script_v60he.cpp
@@ -430,6 +430,8 @@ int ScummEngine_v60he::convertFilePath(byte *dst) {
if (dst[r - 1] == '/')
break;
}
+ } else if (dst[0] == 'u' && dst[1] == 's') { // Save Game Path (Moonbase Commander)
+ r = 5;
}
debug(1, "convertFilePath: converted filePath is %s", dst + r);
diff --git a/engines/scumm/he/script_v72he.cpp b/engines/scumm/he/script_v72he.cpp
index 78be4399a4..afedcdba22 100644
--- a/engines/scumm/he/script_v72he.cpp
+++ b/engines/scumm/he/script_v72he.cpp
@@ -1676,6 +1676,11 @@ void ScummEngine_v72he::o72_openFile() {
copyScriptString(buffer, sizeof(buffer));
debug(1, "Original filename %s", buffer);
+ // HACK: INI filename seems to get reset, corruption elsewhere?
+ if (_game.id == GID_MOONBASE && buffer[0] == 0) {
+ strcpy((char *)buffer, "moonbase.ini");
+ }
+
const char *filename = (char *)buffer + convertFilePath(buffer);
debug(1, "Final filename to %s", filename);
diff --git a/engines/scumm/he/wiz_he.cpp b/engines/scumm/he/wiz_he.cpp
index f514449bff..62d81e2640 100644
--- a/engines/scumm/he/wiz_he.cpp
+++ b/engines/scumm/he/wiz_he.cpp
@@ -526,7 +526,7 @@ void Wiz::copyRawWizImage(uint8 *dst, const uint8 *src, int dstw, int dsth, int
}
void Wiz::copyRaw16BitWizImage(uint8 *dst, const uint8 *src, int dstw, int dsth, int srcx, int srcy, int srcw, int srch, const Common::Rect *rect, int flags, const uint8 *palPtr, int transColor) {
- // RAW 16 bits in 555 format
+ // TODO: RAW 16 bits in 555 format
// HACK: Skip every second bit for now
Common::Rect r1, r2;
@@ -1238,6 +1238,12 @@ uint8 *Wiz::drawWizImage(int resNum, int state, int x1, int y1, int zorder, int
case 2:
copyRaw16BitWizImage(dst, wizd, cw, ch, x1, y1, width, height, &rScreen, flags, palPtr, transColor);
break;
+ case 4:
+ // TODO: Unknown image type
+ break;
+ case 5:
+ // TODO: 16bit color compressed image
+ break;
default:
error("drawWizImage: Unhandled wiz compression type %d", comp);
}
@@ -2105,7 +2111,15 @@ int Wiz::isWizPixelNonTransparent(int resNum, int state, int x, int y, int flags
ret = isWizPixelNonTransparent(wizd, x, y, w, h);
break;
case 2:
- // Used baseball2003
+ // TODO: 16bit color uncompressed image type
+ debug(0, "isWizPixelNonTransparent: Unhandled wiz compression type %d", c);
+ break;
+ case 4:
+ // TODO: Unknown image type
+ debug(0, "isWizPixelNonTransparent: Unhandled wiz compression type %d", c);
+ break;
+ case 5:
+ // TODO: 16bit color compressed image type
debug(0, "isWizPixelNonTransparent: Unhandled wiz compression type %d", c);
break;
default:
@@ -2117,7 +2131,7 @@ int Wiz::isWizPixelNonTransparent(int resNum, int state, int x, int y, int flags
}
uint8 Wiz::getWizPixelColor(int resNum, int state, int x, int y, int flags) {
- uint8 color;
+ uint8 color = 0;
uint8 *data = _vm->getResourceAddress(rtImage, resNum);
assert(data);
uint8 *wizh = _vm->findWrappedBlock(MKID_BE('WIZH'), data, state, 0);
@@ -2138,6 +2152,18 @@ uint8 Wiz::getWizPixelColor(int resNum, int state, int x, int y, int flags) {
case 1:
color = getWizPixelColor(wizd, x, y, w, h, _vm->VAR(_vm->VAR_WIZ_TCOLOR));
break;
+ case 2:
+ // TODO: 16bit color uncompressed image type
+ debug(0, "getWizPixelColor: Unhandled wiz compression type %d", c);
+ break;
+ case 4:
+ // TODO: Unknown image type
+ debug(0, "getWizPixelColor: Unhandled wiz compression type %d", c);
+ break;
+ case 5:
+ // TODO: 16bit color compressed image type
+ debug(0, "getWizPixelColor: Unhandled wiz compression type %d", c);
+ break;
default:
error("getWizPixelColor: Unhandled wiz compression type %d", c);
break;
diff --git a/engines/scumm/scumm-md5.h b/engines/scumm/scumm-md5.h
index eb8ef58754..2544efa231 100644
--- a/engines/scumm/scumm-md5.h
+++ b/engines/scumm/scumm-md5.h
@@ -1,5 +1,5 @@
/*
- This file was generated by the md5table tool on Fri Oct 3 16:12:45 2008
+ This file was generated by the md5table tool on Mon Dec 15 08:27:46 2008
DO NOT EDIT MANUALLY!
*/
@@ -498,6 +498,7 @@ static const MD5Table md5table[] = {
{ "ce7733f185b838e248927c7ba1a04204", "maniac", "V2", "V2", -1, Common::FR_FRA, Common::kPlatformAmiga },
{ "ce7fd0c382389a6791fc3e199c117ef4", "indy3", "EGA", "EGA", -1, Common::ES_ESP, Common::kPlatformPC },
{ "cea91e3dd47f2518ea418e41611aa77f", "spyfox2", "", "", -1, Common::RU_RUS, Common::kPlatformUnknown },
+ { "cf400d20769fb70eb21766582f4924f7", "moonbase", "", "", -1, Common::EN_ANY, Common::kPlatformWindows },
{ "cf4ef315214c7d8cdab6302cdb7e50db", "freddi", "HE 73", "Demo", -1, Common::DE_DEU, Common::kPlatformWindows },
{ "cf8d13446ec6cb6222287a925fd47c1d", "baseball", "", "", -1, Common::EN_ANY, Common::kPlatformUnknown },
{ "cf8ef3a1fb483c5c4b1c584d1167b2c4", "freddi", "HE 73", "", -1, Common::DE_DEU, Common::kPlatformWindows },
@@ -573,6 +574,7 @@ static const MD5Table md5table[] = {
{ "ee41f6afbc5b26fa475754b56fe92048", "puttputt", "HE 61", "", 8032, Common::JA_JPN, Common::kPlatform3DO },
{ "ee785fe2569bc9965526e774f7ab86f1", "spyfox", "HE 99", "", -1, Common::FR_FRA, Common::kPlatformMacintosh },
{ "ef347474f3c7be3b29584eaa133cca05", "samnmax", "", "Floppy", -1, Common::FR_FRA, Common::kPlatformPC },
+ { "ef71a322b6530ac45b1a070f7c0795f7", "moonbase", "Demo", "Demo", -1, Common::EN_ANY, Common::kPlatformWindows },
{ "ef74d9071d4e564b037cb44bd6774de7", "fbear", "HE 61", "", -1, Common::HB_ISR, Common::kPlatformPC },
{ "efe0a04a703e765ebebe92b6c8aa6b86", "baseball2003", "", "", -1, Common::EN_ANY, Common::kPlatformUnknown },
{ "f049e38c1f8302b5db6170f1872af89a", "monkey", "CD", "CD", 8955, Common::ES_ESP, Common::kPlatformPC },
diff --git a/engines/scumm/scumm.cpp b/engines/scumm/scumm.cpp
index d3ece7a5ad..5a422d2906 100644
--- a/engines/scumm/scumm.cpp
+++ b/engines/scumm/scumm.cpp
@@ -1503,6 +1503,10 @@ void ScummEngine_v90he::resetScumm() {
_logicHE = new LogicHEsoccer(this);
break;
+ case GID_MOONBASE:
+ _logicHE = new LogicHEmoonbase(this);
+ break;
+
default:
_logicHE = new LogicHE(this);
break;
diff --git a/engines/scumm/scumm.h b/engines/scumm/scumm.h
index c4697ecbe4..331ec52fdc 100644
--- a/engines/scumm/scumm.h
+++ b/engines/scumm/scumm.h
@@ -225,6 +225,7 @@ enum ScummGameId {
GID_FUNSHOP, // Used for all three funshops
GID_FOOTBALL,
GID_SOCCER,
+ GID_MOONBASE,
GID_HECUP // CUP demos
};
diff --git a/tools/scumm-md5.txt b/tools/scumm-md5.txt
index 59b52d527e..0815436850 100644
--- a/tools/scumm-md5.txt
+++ b/tools/scumm-md5.txt
@@ -591,6 +591,10 @@ jungle Let's Explore the Jungle with Buzzy
659942b9a6b519f123a13cca3c333a13 -1 en Mac - - - Joachim Eberhard
8801fb4a1200b347f7a38523339526dd -1 en Windows - - - Kirben
+moonbase Moonbase Commander
+ cf400d20769fb70eb21766582f4924f7 -1 en Windows - - - Kirben
+ ef71a322b6530ac45b1a070f7c0795f7 -1 en Windows Demo Demo - Kirben
+
pajama Pajama Sam 1: No Need to Hide When It's Dark Outside
672dec94b82f7f0877ebb5b5cf7f4bc1 -1 us All - - - khalek
1d7a2e1ddcade791e2de0cfceac86725 -1 fr All - - - gist974, ThierryFR