[Scummvm-cvs-logs] SF.net SVN: scummvm: [28185] scummvm/trunk/engines/gob
drmccoy at users.sourceforge.net
drmccoy at users.sourceforge.net
Wed Jul 25 01:24:41 CEST 2007
Revision: 28185
http://scummvm.svn.sourceforge.net/scummvm/?rev=28185&view=rev
Author: drmccoy
Date: 2007-07-24 16:24:40 -0700 (Tue, 24 Jul 2007)
Log Message:
-----------
- Separated game type and features
- Added feature constants for a 640x480 resolution and adlib
- Added support for game with a 640x480 resolution. Woodruff now inits the screen before it segfaults
Modified Paths:
--------------
scummvm/trunk/engines/gob/detection.cpp
scummvm/trunk/engines/gob/game.cpp
scummvm/trunk/engines/gob/global.cpp
scummvm/trunk/engines/gob/gob.cpp
scummvm/trunk/engines/gob/gob.h
scummvm/trunk/engines/gob/inter.cpp
scummvm/trunk/engines/gob/inter_v1.cpp
scummvm/trunk/engines/gob/inter_v2.cpp
scummvm/trunk/engines/gob/map.cpp
scummvm/trunk/engines/gob/video.cpp
Modified: scummvm/trunk/engines/gob/detection.cpp
===================================================================
--- scummvm/trunk/engines/gob/detection.cpp 2007-07-24 09:53:28 UTC (rev 28184)
+++ scummvm/trunk/engines/gob/detection.cpp 2007-07-24 23:24:40 UTC (rev 28185)
@@ -34,7 +34,8 @@
struct GOBGameDescription {
Common::ADGameDescription desc;
- uint32 features;
+ GameType gameType;
+ int32 features;
const char *startTotBase;
};
@@ -74,7 +75,8 @@
kPlatformPC,
Common::ADGF_NO_FLAGS
},
- GF_GOB1 | GF_EGA,
+ kGameTypeGob1,
+ kFeaturesEGA,
"intro"
},
{
@@ -86,7 +88,8 @@
kPlatformPC,
Common::ADGF_NO_FLAGS
},
- GF_GOB1 | GF_EGA,
+ kGameTypeGob1,
+ kFeaturesEGA,
"intro"
},
{ // Supplied by Theruler76 in bug report #1201233
@@ -98,7 +101,8 @@
kPlatformPC,
Common::ADGF_NO_FLAGS
},
- GF_GOB1,
+ kGameTypeGob1,
+ kFeaturesNone,
"intro"
},
{ // CD 1.000 version.
@@ -110,7 +114,8 @@
kPlatformPC,
Common::ADGF_NO_FLAGS
},
- GF_GOB1 | GF_CD,
+ kGameTypeGob1,
+ kFeaturesCD,
"intro"
},
{ // CD 1.000 version.
@@ -122,7 +127,8 @@
kPlatformPC,
Common::ADGF_NO_FLAGS
},
- GF_GOB1 | GF_CD,
+ kGameTypeGob1,
+ kFeaturesCD,
"intro"
},
{ // CD 1.000 version.
@@ -134,7 +140,8 @@
kPlatformPC,
Common::ADGF_NO_FLAGS
},
- GF_GOB1 | GF_CD,
+ kGameTypeGob1,
+ kFeaturesCD,
"intro"
},
{ // CD 1.000 version.
@@ -146,7 +153,8 @@
kPlatformPC,
Common::ADGF_NO_FLAGS
},
- GF_GOB1 | GF_CD,
+ kGameTypeGob1,
+ kFeaturesCD,
"intro"
},
{ // CD 1.000 version.
@@ -158,7 +166,8 @@
kPlatformPC,
Common::ADGF_NO_FLAGS
},
- GF_GOB1 | GF_CD,
+ kGameTypeGob1,
+ kFeaturesCD,
"intro"
},
{ // CD 1.02 version. Multilingual
@@ -170,7 +179,8 @@
kPlatformPC,
Common::ADGF_NO_FLAGS
},
- GF_GOB1 | GF_CD,
+ kGameTypeGob1,
+ kFeaturesCD,
"intro"
},
{ // CD 1.02 version. Multilingual
@@ -182,7 +192,8 @@
kPlatformPC,
Common::ADGF_NO_FLAGS
},
- GF_GOB1 | GF_CD,
+ kGameTypeGob1,
+ kFeaturesCD,
"intro"
},
{ // CD 1.02 version. Multilingual
@@ -194,7 +205,8 @@
kPlatformPC,
Common::ADGF_NO_FLAGS
},
- GF_GOB1 | GF_CD,
+ kGameTypeGob1,
+ kFeaturesCD,
"intro"
},
{ // CD 1.02 version. Multilingual
@@ -206,7 +218,8 @@
kPlatformPC,
Common::ADGF_NO_FLAGS
},
- GF_GOB1 | GF_CD,
+ kGameTypeGob1,
+ kFeaturesCD,
"intro"
},
{ // CD 1.02 version. Multilingual
@@ -218,7 +231,8 @@
kPlatformPC,
Common::ADGF_NO_FLAGS
},
- GF_GOB1 | GF_CD,
+ kGameTypeGob1,
+ kFeaturesCD,
"intro"
},
{
@@ -230,7 +244,8 @@
kPlatformAmiga,
Common::ADGF_DEMO
},
- GF_GOB1,
+ kGameTypeGob1,
+ kFeaturesNone,
"intro"
},
{
@@ -242,7 +257,8 @@
kPlatformPC,
Common::ADGF_DEMO
},
- GF_GOB1,
+ kGameTypeGob1,
+ kFeaturesNone,
"intro"
},
{ // Supplied by paul66 in bug report #1652352
@@ -254,7 +270,8 @@
kPlatformMacintosh,
Common::ADGF_NO_FLAGS
},
- GF_GOB1,
+ kGameTypeGob1,
+ kFeaturesAdlib,
"intro"
},
{ // Supplied by paul66 in bug report #1652352
@@ -266,7 +283,8 @@
kPlatformMacintosh,
Common::ADGF_NO_FLAGS
},
- GF_GOB1,
+ kGameTypeGob1,
+ kFeaturesAdlib,
"intro"
},
{ // Supplied by paul66 in bug report #1652352
@@ -278,7 +296,8 @@
kPlatformMacintosh,
Common::ADGF_NO_FLAGS
},
- GF_GOB1,
+ kGameTypeGob1,
+ kFeaturesAdlib,
"intro"
},
{ // Supplied by paul66 in bug report #1652352
@@ -290,7 +309,8 @@
kPlatformMacintosh,
Common::ADGF_NO_FLAGS
},
- GF_GOB1,
+ kGameTypeGob1,
+ kFeaturesAdlib,
"intro"
},
{ // Supplied by paul66 in bug report #1652352
@@ -302,7 +322,8 @@
kPlatformMacintosh,
Common::ADGF_NO_FLAGS
},
- GF_GOB1,
+ kGameTypeGob1,
+ kFeaturesAdlib,
"intro"
},
{
@@ -314,7 +335,8 @@
kPlatformPC,
Common::ADGF_NO_FLAGS
},
- GF_GOB2,
+ kGameTypeGob2,
+ kFeaturesAdlib,
"intro"
},
{ // Supplied by arcepi in bug report #1659884
@@ -326,7 +348,8 @@
kPlatformPC,
Common::ADGF_NO_FLAGS
},
- GF_GOB2,
+ kGameTypeGob2,
+ kFeaturesAdlib,
"intro"
},
{
@@ -338,7 +361,8 @@
kPlatformPC,
Common::ADGF_NO_FLAGS
},
- GF_GOB2,
+ kGameTypeGob2,
+ kFeaturesAdlib,
"intro"
},
{ // Supplied by fac76 in bug report #1673397
@@ -354,7 +378,8 @@
kPlatformMacintosh,
Common::ADGF_NO_FLAGS
},
- GF_GOB2,
+ kGameTypeGob2,
+ kFeaturesAdlib,
"intro"
},
{
@@ -366,7 +391,8 @@
kPlatformPC,
Common::ADGF_NO_FLAGS
},
- GF_GOB2,
+ kGameTypeGob2,
+ kFeaturesAdlib,
"intro"
},
{
@@ -378,7 +404,8 @@
kPlatformPC,
Common::ADGF_NO_FLAGS
},
- GF_GOB2,
+ kGameTypeGob2,
+ kFeaturesAdlib,
"intro"
},
{
@@ -390,7 +417,8 @@
kPlatformPC,
Common::ADGF_NO_FLAGS
},
- GF_GOB2,
+ kGameTypeGob2,
+ kFeaturesAdlib,
"intro"
},
{
@@ -402,7 +430,8 @@
kPlatformAmiga,
Common::ADGF_NO_FLAGS
},
- GF_GOB2,
+ kGameTypeGob2,
+ kFeaturesNone,
"intro"
},
{ // Supplied by blackwhiteeagle in bug report #1605235
@@ -414,7 +443,8 @@
kPlatformPC,
Common::ADGF_NO_FLAGS
},
- GF_GOB2,
+ kGameTypeGob2,
+ kFeaturesAdlib,
"intro"
},
{ // Supplied by bgk in bug report #1706861
@@ -426,7 +456,8 @@
kPlatformAtariST,
Common::ADGF_NO_FLAGS
},
- GF_GOB2,
+ kGameTypeGob2,
+ kFeaturesNone,
"intro"
},
{
@@ -438,7 +469,8 @@
kPlatformPC,
Common::ADGF_NO_FLAGS
},
- GF_GOB2 | GF_CD,
+ kGameTypeGob2,
+ kFeaturesCD,
"intro"
},
{
@@ -450,7 +482,8 @@
kPlatformPC,
Common::ADGF_NO_FLAGS
},
- GF_GOB2 | GF_CD,
+ kGameTypeGob2,
+ kFeaturesCD,
"intro"
},
{
@@ -462,7 +495,8 @@
kPlatformPC,
Common::ADGF_NO_FLAGS
},
- GF_GOB2 | GF_CD,
+ kGameTypeGob2,
+ kFeaturesCD,
"intro"
},
{
@@ -474,7 +508,8 @@
kPlatformPC,
Common::ADGF_NO_FLAGS
},
- GF_GOB2 | GF_CD,
+ kGameTypeGob2,
+ kFeaturesCD,
"intro"
},
{
@@ -486,7 +521,8 @@
kPlatformPC,
Common::ADGF_NO_FLAGS
},
- GF_GOB2 | GF_CD,
+ kGameTypeGob2,
+ kFeaturesCD,
"intro"
},
{
@@ -498,7 +534,8 @@
kPlatformPC,
Common::ADGF_NO_FLAGS
},
- GF_GOB2 | GF_CD,
+ kGameTypeGob2,
+ kFeaturesCD,
"intro"
},
{
@@ -510,7 +547,8 @@
kPlatformPC,
Common::ADGF_DEMO
},
- GF_GOB2,
+ kGameTypeGob2,
+ kFeaturesAdlib,
"usa"
},
{
@@ -522,7 +560,8 @@
kPlatformPC,
Common::ADGF_DEMO
},
- GF_GOB2,
+ kGameTypeGob2,
+ kFeaturesAdlib,
"intro"
},
{
@@ -534,7 +573,8 @@
kPlatformPC,
Common::ADGF_DEMO
},
- GF_GOB2,
+ kGameTypeGob2,
+ kFeaturesAdlib,
"intro"
},
{
@@ -546,7 +586,8 @@
kPlatformPC,
Common::ADGF_NO_FLAGS
},
- GF_GOB2,
+ kGameTypeWeen,
+ kFeaturesAdlib,
"intro"
},
{
@@ -558,7 +599,8 @@
kPlatformPC,
Common::ADGF_NO_FLAGS
},
- GF_GOB2,
+ kGameTypeWeen,
+ kFeaturesAdlib,
"intro"
},
{ // Supplied by cybot_tmin in bug report #1667743
@@ -570,7 +612,8 @@
kPlatformPC,
Common::ADGF_NO_FLAGS
},
- GF_GOB2,
+ kGameTypeWeen,
+ kFeaturesAdlib,
"intro"
},
{ // Supplied by vampir_raziel in bug report #1658373
@@ -582,7 +625,8 @@
kPlatformAmiga,
Common::ADGF_NO_FLAGS
},
- GF_GOB2,
+ kGameTypeWeen,
+ kFeaturesNone,
"intro"
},
{ // Supplied by vampir_raziel in bug report #1658373
@@ -594,7 +638,8 @@
kPlatformAmiga,
Common::ADGF_NO_FLAGS
},
- GF_GOB2,
+ kGameTypeWeen,
+ kFeaturesNone,
"intro"
},
{ // Supplied by vampir_raziel in bug report #1658373
@@ -606,7 +651,8 @@
kPlatformAmiga,
Common::ADGF_NO_FLAGS
},
- GF_GOB2,
+ kGameTypeWeen,
+ kFeaturesNone,
"intro"
},
{ // Supplied by vampir_raziel in bug report #1658373
@@ -618,7 +664,8 @@
kPlatformAmiga,
Common::ADGF_NO_FLAGS
},
- GF_GOB2,
+ kGameTypeWeen,
+ kFeaturesNone,
"intro"
},
{
@@ -630,7 +677,8 @@
kPlatformAtariST,
Common::ADGF_NO_FLAGS
},
- GF_GOB2,
+ kGameTypeWeen,
+ kFeaturesNone,
"intro"
},
{
@@ -642,7 +690,8 @@
kPlatformPC,
Common::ADGF_NO_FLAGS
},
- GF_GOB2,
+ kGameTypeWeen,
+ kFeaturesAdlib,
"intro"
},
{ // Supplied by cartman_ on #scummvm
@@ -654,7 +703,8 @@
kPlatformPC,
Common::ADGF_NO_FLAGS
},
- GF_GOB2,
+ kGameTypeWeen,
+ kFeaturesAdlib,
"intro"
},
{ // Supplied by glorfindel in bugreport #1722142
@@ -666,7 +716,8 @@
kPlatformPC,
Common::ADGF_NO_FLAGS
},
- GF_GOB2,
+ kGameTypeWeen,
+ kFeaturesAdlib,
"intro"
},
{
@@ -678,7 +729,8 @@
kPlatformPC,
Common::ADGF_DEMO
},
- GF_GOB2,
+ kGameTypeWeen,
+ kFeaturesAdlib,
"show"
},
{
@@ -690,7 +742,8 @@
kPlatformPC,
Common::ADGF_DEMO
},
- GF_GOB2,
+ kGameTypeWeen,
+ kFeaturesAdlib,
"show"
},
{
@@ -702,7 +755,8 @@
kPlatformPC,
Common::ADGF_NO_FLAGS
},
- GF_BARGON,
+ kGameTypeBargon,
+ kFeaturesNone,
"intro"
},
{ // Supplied by Trekky in the forums
@@ -714,7 +768,8 @@
kPlatformAtariST,
Common::ADGF_NO_FLAGS
},
- GF_BARGON,
+ kGameTypeBargon,
+ kFeaturesNone,
"intro"
},
{ // Supplied by cesardark in bug #1681649
@@ -726,7 +781,8 @@
kPlatformPC,
Common::ADGF_NO_FLAGS
},
- GF_BARGON,
+ kGameTypeBargon,
+ kFeaturesNone,
"intro"
},
{ // Supplied by paul66 in bug #1692667
@@ -738,7 +794,8 @@
kPlatformPC,
Common::ADGF_NO_FLAGS
},
- GF_BARGON,
+ kGameTypeBargon,
+ kFeaturesNone,
"intro"
},
{ // Supplied by glorfindel in bugreport #1722142
@@ -750,7 +807,8 @@
kPlatformPC,
Common::ADGF_NO_FLAGS
},
- GF_BARGON,
+ kGameTypeBargon,
+ kFeaturesNone,
"intro"
},
{
@@ -762,7 +820,8 @@
kPlatformPC,
Common::ADGF_NO_FLAGS
},
- GF_GOB3,
+ kGameTypeGob3,
+ kFeaturesAdlib,
"intro"
},
{ // Supplied by fac76 in bug report #1742716
@@ -778,7 +837,8 @@
kPlatformMacintosh,
Common::ADGF_NO_FLAGS
},
- GF_GOB3,
+ kGameTypeGob3,
+ kFeaturesAdlib,
"intro"
},
{
@@ -790,7 +850,8 @@
kPlatformPC,
Common::ADGF_NO_FLAGS
},
- GF_GOB3,
+ kGameTypeGob3,
+ kFeaturesAdlib,
"intro"
},
{ // Supplied by paul66 in bug report #1652352
@@ -802,7 +863,8 @@
kPlatformPC,
Common::ADGF_NO_FLAGS
},
- GF_GOB3,
+ kGameTypeGob3,
+ kFeaturesAdlib,
"intro"
},
{
@@ -814,7 +876,8 @@
kPlatformPC,
Common::ADGF_NO_FLAGS
},
- GF_GOB3,
+ kGameTypeGob3,
+ kFeaturesAdlib,
"intro"
},
{ // Supplied by Paranoimia on #scummvm
@@ -826,7 +889,8 @@
kPlatformPC,
Common::ADGF_NO_FLAGS
},
- GF_GOB3,
+ kGameTypeGob3,
+ kFeaturesAdlib,
"intro"
},
{
@@ -838,7 +902,8 @@
kPlatformPC,
Common::ADGF_NO_FLAGS
},
- GF_GOB3,
+ kGameTypeGob3,
+ kFeaturesAdlib,
"intro"
},
{
@@ -850,7 +915,8 @@
kPlatformPC,
Common::ADGF_NO_FLAGS
},
- GF_GOB3,
+ kGameTypeGob3,
+ kFeaturesAdlib,
"intro"
},
{
@@ -862,7 +928,8 @@
kPlatformAmiga,
Common::ADGF_NO_FLAGS
},
- GF_GOB3,
+ kGameTypeGob3,
+ kFeaturesNone,
"menu"
},
{
@@ -874,7 +941,8 @@
kPlatformAmiga,
Common::ADGF_NO_FLAGS
},
- GF_GOB3,
+ kGameTypeGob3,
+ kFeaturesNone,
"menu"
},
{
@@ -886,7 +954,8 @@
kPlatformPC,
Common::ADGF_NO_FLAGS
},
- GF_GOB3 | GF_CD,
+ kGameTypeGob3,
+ kFeaturesCD,
"intro"
},
{ // Supplied by paul66 and noizert in bug reports #1652352 and #1691230
@@ -898,7 +967,8 @@
kPlatformPC,
Common::ADGF_NO_FLAGS
},
- GF_GOB3 | GF_CD,
+ kGameTypeGob3,
+ kFeaturesCD,
"intro"
},
{ // Supplied by paul66 and noizert in bug reports #1652352 and #1691230
@@ -910,7 +980,8 @@
kPlatformPC,
Common::ADGF_NO_FLAGS
},
- GF_GOB3 | GF_CD,
+ kGameTypeGob3,
+ kFeaturesCD,
"intro"
},
{ // Supplied by paul66 and noizert in bug reports #1652352 and #1691230
@@ -922,7 +993,8 @@
kPlatformPC,
Common::ADGF_NO_FLAGS
},
- GF_GOB3 | GF_CD,
+ kGameTypeGob3,
+ kFeaturesCD,
"intro"
},
{ // Supplied by paul66 and noizert in bug reports #1652352 and #1691230
@@ -934,7 +1006,8 @@
kPlatformPC,
Common::ADGF_NO_FLAGS
},
- GF_GOB3 | GF_CD,
+ kGameTypeGob3,
+ kFeaturesCD,
"intro"
},
{ // Supplied by paul66 and noizert in bug reports #1652352 and #1691230
@@ -946,7 +1019,8 @@
kPlatformPC,
Common::ADGF_NO_FLAGS
},
- GF_GOB3 | GF_CD,
+ kGameTypeGob3,
+ kFeaturesCD,
"intro"
},
{
@@ -958,7 +1032,8 @@
kPlatformPC,
Common::ADGF_DEMO
},
- GF_GOB3,
+ kGameTypeGob3,
+ kFeaturesAdlib,
"intro"
},
{
@@ -970,7 +1045,8 @@
kPlatformPC,
Common::ADGF_DEMO
},
- GF_GOB3,
+ kGameTypeGob3,
+ kFeaturesAdlib,
"intro"
},
{
@@ -982,7 +1058,8 @@
kPlatformPC,
Common::ADGF_DEMO
},
- GF_GOB3,
+ kGameTypeGob3,
+ kFeaturesAdlib,
"intro"
},
{
@@ -994,7 +1071,8 @@
kPlatformPC,
Common::ADGF_DEMO
},
- GF_GOB3,
+ kGameTypeGob3,
+ kFeaturesAdlib,
"intro"
},
{
@@ -1006,7 +1084,8 @@
kPlatformPC,
Common::ADGF_NO_FLAGS
},
- GF_WOODRUFF,
+ kGameTypeNone,
+ kFeatures640 | kFeaturesAdlib,
"intro"
},
{
@@ -1018,7 +1097,8 @@
kPlatformPC,
Common::ADGF_NO_FLAGS
},
- GF_WOODRUFF,
+ kGameTypeNone,
+ kFeatures640 | kFeaturesAdlib,
"intro"
},
{
@@ -1030,10 +1110,11 @@
kPlatformPC,
Common::ADGF_NO_FLAGS
},
- GF_WOODRUFF,
+ kGameTypeNone,
+ kFeatures640 | kFeaturesAdlib,
"intro"
},
- { AD_TABLE_END_MARKER, 0, NULL }
+ { AD_TABLE_END_MARKER, kGameTypeNone, kFeaturesNone, NULL }
};
static const GOBGameDescription fallbackDescs[] = {
@@ -1046,7 +1127,8 @@
kPlatformPC,
Common::ADGF_NO_FLAGS
},
- GF_GOB1,
+ kGameTypeGob1,
+ kFeaturesNone,
"intro"
},
{
@@ -1058,7 +1140,8 @@
kPlatformPC,
Common::ADGF_NO_FLAGS
},
- GF_GOB1 | GF_CD,
+ kGameTypeGob1,
+ kFeaturesCD,
"intro"
},
{
@@ -1070,7 +1153,8 @@
kPlatformPC,
Common::ADGF_NO_FLAGS
},
- GF_GOB2,
+ kGameTypeGob2,
+ kFeaturesAdlib,
"intro"
},
{
@@ -1082,7 +1166,8 @@
kPlatformPC,
Common::ADGF_NO_FLAGS
},
- GF_GOB2 | GF_CD,
+ kGameTypeGob2,
+ kFeaturesCD,
"intro"
},
{
@@ -1094,7 +1179,8 @@
kPlatformPC,
Common::ADGF_NO_FLAGS
},
- GF_BARGON,
+ kGameTypeBargon,
+ kFeaturesNone,
"intro"
},
{
@@ -1106,7 +1192,8 @@
kPlatformPC,
Common::ADGF_NO_FLAGS
},
- GF_GOB3,
+ kGameTypeGob3,
+ kFeaturesAdlib,
"intro"
},
{
@@ -1118,7 +1205,8 @@
kPlatformPC,
Common::ADGF_NO_FLAGS
},
- GF_GOB3 | GF_CD,
+ kGameTypeGob3,
+ kFeaturesCD,
"intro"
},
};
@@ -1186,6 +1274,7 @@
strcat(_startTot0, "0.tot");
}
+ _gameType = gd->gameType;
_features = gd->features;
_language = gd->desc.language;
_platform = gd->desc.platform;
Modified: scummvm/trunk/engines/gob/game.cpp
===================================================================
--- scummvm/trunk/engines/gob/game.cpp 2007-07-24 09:53:28 UTC (rev 28184)
+++ scummvm/trunk/engines/gob/game.cpp 2007-07-24 23:24:40 UTC (rev 28185)
@@ -315,11 +315,12 @@
}
int16 cursorRight = x + _vm->_draw->_cursorWidth;
- int16 screenRight = _vm->_draw->_scrollOffsetX + 320;
+ int16 screenRight = _vm->_draw->_scrollOffsetX + _vm->_width;
int16 cursorBottom = y + _vm->_draw->_cursorHeight;
- int16 screenBottom = _vm->_draw->_scrollOffsetY + 200;
+ int16 screenBottom = _vm->_draw->_scrollOffsetY + _vm->_height;
- if ((cursorRight >= 320) && (screenRight < _vm->_video->_surfWidth)) {
+ if ((cursorRight >= _vm->_width) &&
+ (screenRight < _vm->_video->_surfWidth)) {
uint16 off;
off = MIN(_vm->_draw->_cursorWidth,
@@ -328,8 +329,8 @@
_vm->_draw->_scrollOffsetX += off;
- _vm->_util->setMousePos(320 - _vm->_draw->_cursorWidth, y);
- } else if ((cursorBottom >= (200 - _vm->_video->_splitHeight2)) &&
+ _vm->_util->setMousePos(_vm->_width - _vm->_draw->_cursorWidth, y);
+ } else if ((cursorBottom >= (_vm->_height - _vm->_video->_splitHeight2)) &&
(screenBottom < _vm->_video->_surfHeight)) {
uint16 off;
@@ -339,7 +340,7 @@
_vm->_draw->_scrollOffsetY += off;
- _vm->_util->setMousePos(x, 200 - _vm->_video->_splitHeight2 -
+ _vm->_util->setMousePos(x, _vm->_height - _vm->_video->_splitHeight2 -
_vm->_draw->_cursorHeight);
}
@@ -544,7 +545,7 @@
int16 newPos = _curBackupPos - index - ((index >= 0) ? 1 : 0);
// WORKAROUND: Some versions don't make the MOVEMENT menu item unselectable
// in the dreamland screen, resulting in a crash when it's clicked.
- if ((_vm->_features & GF_GOB2) && (index == -1) && (skipPlay == 7) &&
+ if ((_vm->getGameType() == kGameTypeGob2) && (index == -1) && (skipPlay == 7) &&
!scumm_stricmp(_curTotFileArray[newPos], "gob06.tot"))
return;
Modified: scummvm/trunk/engines/gob/global.cpp
===================================================================
--- scummvm/trunk/engines/gob/global.cpp 2007-07-24 09:53:28 UTC (rev 28184)
+++ scummvm/trunk/engines/gob/global.cpp 2007-07-24 23:24:40 UTC (rev 28185)
@@ -112,7 +112,7 @@
_setAllPalette = false;
_dontSetPalette = false;
- _primarySurfDesc = new SurfaceDesc(0x13, 320, 200);
+ _primarySurfDesc = 0;
_debugFlag = 0;
_inVM = 0;
Modified: scummvm/trunk/engines/gob/gob.cpp
===================================================================
--- scummvm/trunk/engines/gob/gob.cpp 2007-07-24 09:53:28 UTC (rev 28184)
+++ scummvm/trunk/engines/gob/gob.cpp 2007-07-24 23:24:40 UTC (rev 28185)
@@ -68,6 +68,16 @@
};
GobEngine::GobEngine(OSystem *syst) : Engine(syst) {
+ _vm = this;
+
+ _snd = 0; _adlib = 0; _mult = 0;
+ _game = 0; _global = 0; _cdrom = 0;
+ _dataIO = 0; _goblin = 0; _imdPlayer = 0;
+ _init = 0; _inter = 0; _map = 0;
+ _palAnim = 0; _parse = 0; _scenery = 0;
+ _draw = 0; _util = 0; _video = 0;
+ _saveLoad = 0;
+
// Setup mixer
if (!_mixer->isReady()) {
warning("Sound initialization failed.");
@@ -94,25 +104,7 @@
// Stop all mixer streams (except for the permanent ones).
_vm->_mixer->stopAll();
- delete _snd;
- delete _adlib;
- delete _mult;
- delete _game;
- delete _global;
- delete _cdrom;
- delete _dataIO;
- delete _goblin;
- delete _imdPlayer;
- delete _init;
- delete _inter;
- delete _map;
- delete _palAnim;
- delete _parse;
- delete _scenery;
- delete _draw;
- delete _util;
- delete _video;
- delete _saveLoad;
+ deinitGameParts();
delete[] _startTot;
delete[] _startTot0;
}
@@ -137,7 +129,7 @@
}
void GobEngine::validateVideoMode(int16 videoMode) {
- if ((videoMode != 0x13) && (videoMode != 0x14))
+ if ((videoMode != 0x13) && (videoMode != 0x14) && (videoMode != 0x18))
error("Video mode 0x%X is not supported!", videoMode);
}
@@ -148,82 +140,18 @@
return -1;
}
- _adlib = 0;
- _saveLoad = 0;
- _global = new Global(this);
- _util = new Util(this);
- _dataIO = new DataIO(this);
- _palAnim = new PalAnim(this);
- _imdPlayer = new ImdPlayer(this);
- _cdrom = new CDROM(this);
- _snd = new Snd(this);
- if (_features & Gob::GF_GOB1) {
- _init = new Init_v1(this);
- _video = new Video_v1(this);
- _inter = new Inter_v1(this);
- _parse = new Parse_v1(this);
- _mult = new Mult_v1(this);
- _draw = new Draw_v1(this);
- _game = new Game_v1(this);
- _map = new Map_v1(this);
- _goblin = new Goblin_v1(this);
- _scenery = new Scenery_v1(this);
- } else if (_features & Gob::GF_GOB2) {
- _init = new Init_v2(this);
- _video = new Video_v2(this);
- _inter = new Inter_v2(this);
- _parse = new Parse_v2(this);
- _mult = new Mult_v2(this);
- _draw = new Draw_v2(this);
- _game = new Game_v2(this);
- _map = new Map_v2(this);
- _goblin = new Goblin_v2(this);
- _scenery = new Scenery_v2(this);
- _saveLoad = new SaveLoad_v2(this, _targetName.c_str());
- } else if (_features & Gob::GF_BARGON) {
- _init = new Init_v2(this);
- _video = new Video_v2(this);
- _inter = new Inter_Bargon(this);
- _parse = new Parse_v2(this);
- _mult = new Mult_v2(this);
- _draw = new Draw_Bargon(this);
- _game = new Game_v2(this);
- _map = new Map_v2(this);
- _goblin = new Goblin_v2(this);
- _scenery = new Scenery_v2(this);
- _saveLoad = new SaveLoad_v2(this, _targetName.c_str());
- } else if (_features & Gob::GF_GOB3) {
- _init = new Init_v3(this);
- _video = new Video_v2(this);
- _inter = new Inter_v3(this);
- _parse = new Parse_v2(this);
- _mult = new Mult_v2(this);
- _draw = new Draw_v2(this);
- _game = new Game_v2(this);
- _map = new Map_v2(this);
- _goblin = new Goblin_v3(this);
- _scenery = new Scenery_v2(this);
- _saveLoad = new SaveLoad_v3(this, _targetName.c_str());
- } else
- error("GobEngine::init(): Unknown version of game engine");
+ if (!initGameParts()) {
+ GUIErrorMessage("GobEngine::init(): Unknown version of game engine");
+ return -1;
+ }
- _noMusic = MidiDriver::parseMusicDriver(ConfMan.get("music_driver")) == MD_NULL;
- if (!_noMusic && !(_platform == Common::kPlatformAmiga) &&
- !(_platform == Common::kPlatformAtariST) &&
- (((_platform == Common::kPlatformMacintosh) && (_features & Gob::GF_GOB1)) ||
- (_features & Gob::GF_GOB2) || (_features & Gob::GF_GOB3)))
- _adlib = new Adlib(this);
- _vm = this;
-
- _map->init();
-
_system->beginGFXTransaction();
initCommonGFX(false);
- _system->initSize(320, 200);
+ _system->initSize(_width, _height);
_system->endGFXTransaction();
// On some systems it's not safe to run CD audio games from the CD.
- if (_features & GF_CD)
+ if (isCD())
checkCD();
int cd_num = ConfMan.getInt("cdrom");
@@ -293,4 +221,153 @@
return 0;
}
+bool GobEngine::initGameParts() {
+ _adlib = 0;
+ _saveLoad = 0;
+
+ _global = new Global(this);
+ _util = new Util(this);
+ _dataIO = new DataIO(this);
+ _palAnim = new PalAnim(this);
+ _imdPlayer = new ImdPlayer(this);
+ _cdrom = new CDROM(this);
+ _snd = new Snd(this);
+
+ switch (_gameType) {
+ case kGameTypeGob1:
+ _init = new Init_v1(this);
+ _video = new Video_v1(this);
+ _inter = new Inter_v1(this);
+ _parse = new Parse_v1(this);
+ _mult = new Mult_v1(this);
+ _draw = new Draw_v1(this);
+ _game = new Game_v1(this);
+ _map = new Map_v1(this);
+ _goblin = new Goblin_v1(this);
+ _scenery = new Scenery_v1(this);
+ break;
+
+ case kGameTypeGob2:
+ _init = new Init_v2(this);
+ _video = new Video_v2(this);
+ _inter = new Inter_v2(this);
+ _parse = new Parse_v2(this);
+ _mult = new Mult_v2(this);
+ _draw = new Draw_v2(this);
+ _game = new Game_v2(this);
+ _map = new Map_v2(this);
+ _goblin = new Goblin_v2(this);
+ _scenery = new Scenery_v2(this);
+ _saveLoad = new SaveLoad_v2(this, _targetName.c_str());
+ break;
+
+ case kGameTypeGob3:
+ _init = new Init_v3(this);
+ _video = new Video_v2(this);
+ _inter = new Inter_v3(this);
+ _parse = new Parse_v2(this);
+ _mult = new Mult_v2(this);
+ _draw = new Draw_v2(this);
+ _game = new Game_v2(this);
+ _map = new Map_v2(this);
+ _goblin = new Goblin_v3(this);
+ _scenery = new Scenery_v2(this);
+ _saveLoad = new SaveLoad_v3(this, _targetName.c_str());
+ break;
+
+ case kGameTypeWoodruff:
+ _init = new Init_v3(this);
+ _video = new Video_v2(this);
+ _inter = new Inter_v3(this);
+ _parse = new Parse_v2(this);
+ _mult = new Mult_v2(this);
+ _draw = new Draw_v2(this);
+ _game = new Game_v2(this);
+ _map = new Map_v2(this);
+ _goblin = new Goblin_v3(this);
+ _scenery = new Scenery_v2(this);
+ _saveLoad = new SaveLoad_v3(this, _targetName.c_str());
+ break;
+
+ case kGameTypeBargon:
+ _init = new Init_v2(this);
+ _video = new Video_v2(this);
+ _inter = new Inter_Bargon(this);
+ _parse = new Parse_v2(this);
+ _mult = new Mult_v2(this);
+ _draw = new Draw_Bargon(this);
+ _game = new Game_v2(this);
+ _map = new Map_v2(this);
+ _goblin = new Goblin_v2(this);
+ _scenery = new Scenery_v2(this);
+ _saveLoad = new SaveLoad_v2(this, _targetName.c_str());
+ break;
+
+ case kGameTypeWeen:
+ _init = new Init_v2(this);
+ _video = new Video_v2(this);
+ _inter = new Inter_v2(this);
+ _parse = new Parse_v2(this);
+ _mult = new Mult_v2(this);
+ _draw = new Draw_v2(this);
+ _game = new Game_v2(this);
+ _map = new Map_v2(this);
+ _goblin = new Goblin_v2(this);
+ _scenery = new Scenery_v2(this);
+ _saveLoad = new SaveLoad_v2(this, _targetName.c_str());
+ break;
+
+ default:
+ deinitGameParts();
+ return false;
+ break;
+ }
+
+ _noMusic = MidiDriver::parseMusicDriver(ConfMan.get("music_driver")) == MD_NULL;
+ if (!_noMusic && hasAdlib())
+ _adlib = new Adlib(this);
+
+ _map->init();
+
+ if (is640()) {
+ _video->_surfWidth = _width = 640;
+ _video->_surfHeight = _video->_splitHeight1 = _height = 480;
+ _global->_mouseMaxCol = 640;
+ _global->_mouseMaxRow = 480;
+ _mode = 0x18;
+ _global->_primarySurfDesc = new SurfaceDesc(0x18, 640, 480);
+ } else {
+ _video->_surfWidth = _width = 320;
+ _video->_surfHeight = _video->_splitHeight1 = _height = 200;
+ _global->_mouseMaxCol = 320;
+ _global->_mouseMaxRow = 200;
+ _mode = 0x14;
+ _global->_primarySurfDesc = new SurfaceDesc(0x14, 320, 200);
+ }
+
+ return true;
+}
+
+void GobEngine::deinitGameParts() {
+ delete _snd; _snd = 0;
+ delete _adlib; _adlib = 0;
+ delete _mult; _mult = 0;
+ delete _game; _game = 0;
+ delete _global; _global = 0;
+ delete _cdrom; _cdrom = 0;
+ delete _dataIO; _dataIO = 0;
+ delete _goblin; _goblin = 0;
+ delete _imdPlayer; _imdPlayer = 0;
+ delete _init; _init = 0;
+ delete _inter; _inter = 0;
+ delete _map; _map = 0;
+ delete _palAnim; _palAnim = 0;
+ delete _parse; _parse = 0;
+ delete _scenery; _scenery = 0;
+ delete _draw; _draw = 0;
+ delete _util; _util = 0;
+ delete _video; _video = 0;
+ delete _saveLoad; _saveLoad = 0;
+}
+
} // End of namespace Gob
Modified: scummvm/trunk/engines/gob/gob.h
===================================================================
--- scummvm/trunk/engines/gob/gob.h 2007-07-24 09:53:28 UTC (rev 28184)
+++ scummvm/trunk/engines/gob/gob.h 2007-07-24 23:24:40 UTC (rev 28185)
@@ -78,16 +78,24 @@
#define VAR(var) READ_VAR_UINT32(var)
#define VAR_ADDRESS(var) ((uint32 *) VARP((var) << 2))
-enum {
- GF_GOB1 = 1 << 0,
- GF_GOB2 = 1 << 1,
- GF_GOB3 = 1 << 2,
- GF_WOODRUFF = 1 << 3,
- GF_BARGON = 1 << 4,
- GF_CD = 1 << 5,
- GF_EGA = 1 << 6
+enum GameType {
+ kGameTypeNone = 0,
+ kGameTypeGob1,
+ kGameTypeGob2,
+ kGameTypeGob3,
+ kGameTypeWoodruff,
+ kGameTypeBargon,
+ kGameTypeWeen
};
+enum Features {
+ kFeaturesNone = 0,
+ kFeaturesCD = 1 << 0,
+ kFeaturesEGA = 1 << 1,
+ kFeaturesAdlib = 1 << 2,
+ kFeatures640 = 1 << 3
+};
+
enum {
kDebugFuncOp = 1 << 0,
kDebugDrawOp = 1 << 1,
@@ -165,6 +173,9 @@
int go();
int init();
+ bool initGameParts();
+ void deinitGameParts();
+
bool detectGame();
public:
@@ -172,9 +183,15 @@
Common::RandomSource _rnd;
+ GameType _gameType;
int32 _features;
Common::Language _language;
Common::Platform _platform;
+
+ uint16 _width;
+ uint16 _height;
+ uint8 _mode;
+
char *_startTot;
char *_startTot0;
bool _copyProtection;
@@ -211,6 +228,12 @@
void validateLanguage();
void validateVideoMode(int16 videoMode);
+ GameType getGameType() { return _gameType; }
+ bool isCD() { return (_features & kFeaturesCD) != 0; }
+ bool isEGA() { return (_features & kFeaturesEGA) != 0; }
+ bool is640() { return (_features & kFeatures640) != 0; }
+ bool hasAdlib() { return (_features & kFeaturesAdlib) != 0; }
+
GobEngine(OSystem *syst);
virtual ~GobEngine();
};
Modified: scummvm/trunk/engines/gob/inter.cpp
===================================================================
--- scummvm/trunk/engines/gob/inter.cpp 2007-07-24 09:53:28 UTC (rev 28184)
+++ scummvm/trunk/engines/gob/inter.cpp 2007-07-24 23:24:40 UTC (rev 28185)
@@ -209,7 +209,7 @@
// WORKAROUND:
// The EGA version of gob1 doesn't add a delay after showing
// images between levels. We manually add it here.
- if ((_vm->_features & GF_GOB1) && (_vm->_features & GF_EGA)) {
+ if ((_vm->getGameType() == kGameTypeGob1) && _vm->isEGA()) {
int addr = _vm->_global->_inter_execPtr-_vm->_game->_totFileData;
if ((startaddr == 0x18B4 && addr == 0x1A7F && // Zombie
!strncmp(_vm->_game->_curTotFile, "avt005.tot", 10)) ||
Modified: scummvm/trunk/engines/gob/inter_v1.cpp
===================================================================
--- scummvm/trunk/engines/gob/inter_v1.cpp 2007-07-24 09:53:28 UTC (rev 28184)
+++ scummvm/trunk/engines/gob/inter_v1.cpp 2007-07-24 23:24:40 UTC (rev 28185)
@@ -1136,13 +1136,13 @@
}
// Skipping the copy protection screen in Gobliiins
- if (!_vm->_copyProtection && (_vm->_features & GF_GOB1) && (offset == 3905)
+ if (!_vm->_copyProtection && (_vm->getGameType() == kGameTypeGob1) && (offset == 3905)
&& !scumm_stricmp(_vm->_game->_curTotFile, _vm->_startTot)) {
debugC(2, kDebugGameFlow, "Skipping copy protection screen");
return false;
}
// Skipping the copy protection screen in Gobliins 2
- if (!_vm->_copyProtection && (_vm->_features & GF_GOB2) && (offset == 1746)
+ if (!_vm->_copyProtection && (_vm->getGameType() == kGameTypeGob2) && (offset == 1746)
&& !scumm_stricmp(_vm->_game->_curTotFile, _vm->_startTot0)) {
debugC(2, kDebugGameFlow, "Skipping copy protection screen");
return false;
@@ -1650,8 +1650,9 @@
// WORKAROUND for bug #1726130: Ween busy-waits in the intro for a counter
// to become 5000. We deliberately slow down busy-waiting, so we shorten
// the counting, too.
- if (((_vm->_global->_inter_execPtr - _vm->_game->_totFileData) == 729) &&
- (VAR(59) < 4000) && !scumm_stricmp(_vm->_game->_curTotFile, "intro5.tot"))
+ if ((_vm->getGameType() == kGameTypeWeen) && (VAR(59) < 4000) &&
+ ((_vm->_global->_inter_execPtr - _vm->_game->_totFileData) == 729) &&
+ !scumm_stricmp(_vm->_game->_curTotFile, "intro5.tot"))
WRITE_VAR(59, 4000);
switch (cmd) {
Modified: scummvm/trunk/engines/gob/inter_v2.cpp
===================================================================
--- scummvm/trunk/engines/gob/inter_v2.cpp 2007-07-24 09:53:28 UTC (rev 28184)
+++ scummvm/trunk/engines/gob/inter_v2.cpp 2007-07-24 23:24:40 UTC (rev 28185)
@@ -1379,7 +1379,7 @@
// Some versions require this
if (videoMode == 0xD)
- videoMode = 0x14;
+ videoMode = _vm->_mode;
if ((videoMode == _vm->_global->_videoMode) && (width == -1))
return;
@@ -1389,7 +1389,8 @@
if (height > 0)
_vm->_video->_surfHeight = height;
- _vm->_video->_splitHeight1 = MIN(200, _vm->_video->_surfHeight - offY);
+ _vm->_video->_splitHeight1 =
+ MIN<int16>(_vm->_height, _vm->_video->_surfHeight - offY);
_vm->_video->_splitHeight2 = offY;
_vm->_video->_splitStart = _vm->_video->_surfHeight - offY;
@@ -1425,13 +1426,13 @@
int16 curY;
startX = CLIP((int) _vm->_parse->parseValExpr(), 0,
- _vm->_video->_surfWidth - 320);
+ _vm->_video->_surfWidth - _vm->_width);
startY = CLIP((int) _vm->_parse->parseValExpr(), 0,
- _vm->_video->_surfHeight - 200);
+ _vm->_video->_surfHeight - _vm->_height);
endX = CLIP((int) _vm->_parse->parseValExpr(), 0,
- _vm->_video->_surfWidth - 320);
+ _vm->_video->_surfWidth - _vm->_width);
endY = CLIP((int) _vm->_parse->parseValExpr(), 0,
- _vm->_video->_surfHeight - 200);
+ _vm->_video->_surfHeight - _vm->_height);
stepX = _vm->_parse->parseValExpr();
stepY = _vm->_parse->parseValExpr();
Modified: scummvm/trunk/engines/gob/map.cpp
===================================================================
--- scummvm/trunk/engines/gob/map.cpp 2007-07-24 09:53:28 UTC (rev 28184)
+++ scummvm/trunk/engines/gob/map.cpp 2007-07-24 23:24:40 UTC (rev 28185)
@@ -261,7 +261,7 @@
int i;
mapWidth = _screenWidth / _tilesWidth;
- mapHeight = 200 / _tilesHeight;
+ mapHeight = _vm->_width / _tilesHeight;
direction = 0;
for (i = 1; i <= gobDestX; i++)
Modified: scummvm/trunk/engines/gob/video.cpp
===================================================================
--- scummvm/trunk/engines/gob/video.cpp 2007-07-24 09:53:28 UTC (rev 28184)
+++ scummvm/trunk/engines/gob/video.cpp 2007-07-24 23:24:40 UTC (rev 28185)
@@ -166,11 +166,11 @@
if (_vm->_global->_primarySurfDesc) {
g_system->copyRectToScreen(_vm->_global->_primarySurfDesc->getVidMem() +
_scrollOffsetY * _surfWidth + _scrollOffsetX, _surfWidth,
- 0, 0, 320, _splitHeight1);
+ 0, 0, _vm->_width, _splitHeight1);
if (_splitHeight2 > 0)
g_system->copyRectToScreen(_vm->_global->_primarySurfDesc->getVidMem() +
_splitStart * _surfWidth, _surfWidth, 0,
- 200 - _splitHeight2, 320, _splitHeight2);
+ _vm->_height - _splitHeight2, _vm->_width, _splitHeight2);
g_system->updateScreen();
}
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
More information about the Scummvm-git-logs
mailing list