diff options
-rw-r--r-- | Makefile.common | 9 | ||||
-rw-r--r-- | NEWS | 2 | ||||
-rw-r--r-- | backends/sdl/graphics.cpp | 4 | ||||
-rw-r--r-- | common/module.mk | 9 | ||||
-rw-r--r-- | common/scaler.cpp | 6 | ||||
-rw-r--r-- | common/scaler.h | 3 | ||||
-rwxr-xr-x | configure | 47 | ||||
-rw-r--r-- | scumm/actor.cpp | 15 | ||||
-rw-r--r-- | scumm/akos.cpp | 102 | ||||
-rw-r--r-- | scumm/bomp.cpp | 105 | ||||
-rw-r--r-- | scumm/camera.cpp | 200 | ||||
-rw-r--r-- | scumm/cursor.cpp | 8 | ||||
-rw-r--r-- | scumm/input.cpp | 18 | ||||
-rw-r--r-- | scumm/intern.h | 7 | ||||
-rw-r--r-- | scumm/logic_he.cpp | 1 | ||||
-rw-r--r-- | scumm/module.mk | 14 | ||||
-rw-r--r-- | scumm/object.cpp | 2 | ||||
-rw-r--r-- | scumm/palette.cpp | 2 | ||||
-rw-r--r-- | scumm/resource.cpp | 6 | ||||
-rw-r--r-- | scumm/saveload.cpp | 4 | ||||
-rw-r--r-- | scumm/script_v6.cpp | 14 | ||||
-rw-r--r-- | scumm/scumm.cpp | 46 | ||||
-rw-r--r-- | scumm/sound.cpp | 17 | ||||
-rw-r--r-- | scumm/string.cpp | 15 | ||||
-rw-r--r-- | scumm/vars.cpp | 13 |
25 files changed, 430 insertions, 239 deletions
diff --git a/Makefile.common b/Makefile.common index ce6cdb0a83..4eb8377739 100644 --- a/Makefile.common +++ b/Makefile.common @@ -37,12 +37,17 @@ ifdef DISABLE_SCUMM DEFINES += -DDISABLE_SCUMM else MODULES += scumm + +ifdef DISABLE_SCUMM_7_8 +DEFINES += -DDISABLE_SCUMM_7_8 endif ifdef DISABLE_HE DEFINES += -DDISABLE_HE endif +endif + ifdef DISABLE_SIMON DEFINES += -DDISABLE_SIMON else @@ -103,6 +108,10 @@ ifdef USE_MT32EMU MODULES += sound/softsynth/mt32 endif +ifdef DISABLE_HQ_SCALERS +DEFINES += -DDISABLE_HQ_SCALERS +endif + ###################################################################### # The build rules follow - normally you should have no need to # touch whatever comes after here. @@ -28,6 +28,8 @@ For a more comprehensive changelog for the latest experimental CVS code, see: - Added support for NES version of Maniac Mansion - Added thumbnail support for savegames. - Broke compatibility with HE savegame (HE v71 and upwards only) + - Added possibility to disable building of HE and SCUMM v7 & v8 games + support. Sword2: - Made the resource manager expire resources more intelligently. diff --git a/backends/sdl/graphics.cpp b/backends/sdl/graphics.cpp index 43e1a7cd4d..fc5db722b4 100644 --- a/backends/sdl/graphics.cpp +++ b/backends/sdl/graphics.cpp @@ -36,8 +36,10 @@ static const OSystem::GraphicsMode s_supportedGraphicsModes[] = { {"supereagle", "SuperEagle", GFX_SUPEREAGLE}, {"advmame2x", "AdvMAME2x", GFX_ADVMAME2X}, {"advmame3x", "AdvMAME3x", GFX_ADVMAME3X}, +#ifndef DISABLE_HQ_SCALERS {"hq2x", "HQ2x", GFX_HQ2X}, {"hq3x", "HQ3x", GFX_HQ3X}, +#endif {"tv2x", "TV2x", GFX_TV2X}, {"dotmatrix", "DotMatrix", GFX_DOTMATRIX}, {0, 0, 0} @@ -161,6 +163,7 @@ bool OSystem_SDL::setGraphicsMode(int mode) { newScaleFactor = 3; newScalerProc = AdvMame3x; break; +#ifndef DISABLE_HQ_SCALERS case GFX_HQ2X: newScaleFactor = 2; newScalerProc = HQ2x; @@ -169,6 +172,7 @@ bool OSystem_SDL::setGraphicsMode(int mode) { newScaleFactor = 3; newScalerProc = HQ3x; break; +#endif case GFX_TV2X: newScaleFactor = 2; newScalerProc = TV2x; diff --git a/common/module.mk b/common/module.mk index 83177bcfee..9d455e153a 100644 --- a/common/module.mk +++ b/common/module.mk @@ -18,13 +18,16 @@ MODULE_OBJS += \ common/scaler.o \ common/scaler/2xsai.o \ common/scaler/aspect.o \ - common/scaler/hq2x.o \ - common/scaler/hq3x.o \ common/scaler/scale2x.o \ common/scaler/scale3x.o \ common/scaler/scalebit.o \ common/scaler/thumbnail.o +ifndef DISABLE_HQ_SCALERS +MODULE_OBJS += \ + common/scaler/hq2x.o \ + common/scaler/hq3x.o + ifdef HAVE_NASM MODULE_OBJS += \ common/scaler/hq2x_i386.o \ @@ -33,6 +36,8 @@ endif endif +endif + MODULE_DIRS += \ common \ common/scaler diff --git a/common/scaler.cpp b/common/scaler.cpp index db37cc72bd..0d059f84ec 100644 --- a/common/scaler.cpp +++ b/common/scaler.cpp @@ -27,6 +27,7 @@ int gBitFormat = 565; +#ifndef DISABLE_HQ_SCALERS // RGB-to-YUV lookup table extern "C" { @@ -71,6 +72,7 @@ uint RGBtoYUVstorage[65536]; uint *RGBtoYUV = RGBtoYUVstorage; uint LUT16to32[65536]; } +#endif static const uint16 dotmatrix_565[16] = { 0x01E0, 0x0007, 0x3800, 0x0000, @@ -101,6 +103,9 @@ void InitScalers(uint32 BitFormat) { InitLUT(BitFormat); } +#ifdef DISABLE_HQ_SCALERS +void InitLUT(uint32 BitFormat) {} +#else void InitLUT(uint32 BitFormat) { int r, g, b; int Y, u, v; @@ -129,6 +134,7 @@ void InitLUT(uint32 BitFormat) { } } } +#endif /** * Trivial 'scaler' - in fact it doesn't do any scaling but just copies the diff --git a/common/scaler.h b/common/scaler.h index 37f7be99ff..10d7e1161d 100644 --- a/common/scaler.h +++ b/common/scaler.h @@ -45,8 +45,11 @@ DECLARE_SCALER(Normal3x); DECLARE_SCALER(Normal1o5x); DECLARE_SCALER(TV2x); DECLARE_SCALER(DotMatrix); + +#ifndef DISABLE_HQ_SCALERS DECLARE_SCALER(HQ2x); DECLARE_SCALER(HQ3x); +#endif FORCEINLINE int real2Aspect(int y) { return y + (y + 1) / 5; @@ -24,6 +24,7 @@ _fluidsynth=auto _mt32emu=yes # default option behaviour yes/no _build_scumm=yes +_build_scumm_7_8=yes _build_he=yes _build_simon=yes _build_sky=yes @@ -36,6 +37,7 @@ _build_kyra=no _need_memalign=no _build_plugins=no _nasm=auto +_build_hq_scalers=yes # more defaults _backend=sdl _ranlib=ranlib @@ -264,6 +266,7 @@ Special configuration feature: Optional Features: --disable-debug disable building with debugging symbols --disable-scumm don't build the SCUMM engine + --disable-scumm-7-8 exclude v7 and v8 game in SCUMM engine (ft, dig, comi and demos) --disable-he exclude HE70+ games in SCUMM engine --disable-simon don't build the simon engine --disable-sky don't build the Beneath a Steel Sky engine @@ -276,6 +279,7 @@ Optional Features: --enable-plugins build engines as loadable modules instead of static linking them --disable-mt32emu don't enable the integrated MT-32 emulator + --disable-hq-scalers exclude HQ2x and HQ3x scalers Optional Libraries: --with-alsa-prefix=DIR Prefix where alsa is installed (optional) @@ -323,6 +327,7 @@ DEBFLAGS="-g" for ac_option in $@; do case "$ac_option" in --disable-scumm) _build_scumm=no ;; + --disable-scumm-7-8) _build_scumm_7_8=no ;; --disable-he) _build_he=no ;; --disable-simon) _build_simon=no ;; --disable-sky) _build_sky=no ;; @@ -332,6 +337,7 @@ for ac_option in $@; do --disable-saga) _build_saga=no ;; --disable-gob) _build_gob=no ;; --enable-kyra) _build_kyra=yes ;; + --disable-hq-scalers) _build_hq_scalers=no ;; --enable-alsa) _alsa=yes ;; --disable-alsa) _alsa=no ;; --enable-vorbis) _vorbis=yes ;; @@ -426,6 +432,13 @@ Try \`$0 --help' for more information." >&2 esac; done; +if test "$_build_he" = yes ; then + if test "$_build_scumm_7_8" != yes ; then + echo "error: you cannot enable HE games with SCUMM v7 & v8 disabled" + exit 1 + fi +fi + CXXFLAGS="$CXXFLAGS $DEBFLAGS" case $_host in @@ -559,6 +572,12 @@ else _mak_scumm='# DISABLE_SCUMM = 1' fi +if test "$_build_scumm_7_8" = no ; then + _mak_scumm_7_8='DISABLE_SCUMM_7_8 = 1' +else + _mak_scumm_7_8='# DISABLE_SCUMM_7_8 = 1' +fi + if test "$_build_he" = no ; then _mak_he='DISABLE_HE = 1' else @@ -613,6 +632,12 @@ else _mak_gob='# DISABLE_GOB = 1' fi +if test "$_build_hq_scalers" = no ; then + _mak_hq_scalers='DISABLE_HQ_SCALERS = 1' +else + _mak_hq_scalers='# DISABLE_HQ_SCALERS = 1' +fi + if test -n "$_host"; then # Cross-compiling mode - add your target here if needed case "$_host" in @@ -1072,10 +1097,14 @@ test -z "$_mandir" && _mandir="$_prefix/man" echo echo "Engines:" if test "$_build_scumm" = yes ; then - echo " SCUMM" + echo_n " SCUMM" + if test "$_build_scumm_7_8" = yes ; then + echo_n " [v7 & v8 games]" + fi if test "$_build_he" = yes ; then - echo " SCUMM (HE70+ games)" + echo_n " [HE70+ games]" fi + echo fi if test "$_build_simon" = yes ; then echo " Simon the Sorcerer" @@ -1118,11 +1147,18 @@ echo_n "Backend... " echo_n "$_backend" if test "$_nasm" = yes ; then - echo ", assembly routines" + echo_n ", assembly routines" +fi + +if test "$_build_hq_scalers" = yes ; then + echo_n ", HQ scalers" +fi + +if test "$_mt32emu" = yes ; then + echo ", MT-32 emu" else echo fi - # # Backend related stuff # @@ -1230,6 +1266,7 @@ $_mak_plugins $_make_def_HAVE_GCC3 $_make_def_HAVE_NASM $_mak_scumm +$_mak_scumm_7_8 $_mak_he $_mak_simon $_mak_sky @@ -1241,6 +1278,8 @@ $_mak_saga $_mak_gob $_mak_mt32emu +$_mak_hq_scalers + INCLUDES += $INCLUDES OBJS += $OBJS DEFINES += $DEFINES diff --git a/scumm/actor.cpp b/scumm/actor.cpp index ada0dd12fd..b120f2b617 100644 --- a/scumm/actor.cpp +++ b/scumm/actor.cpp @@ -23,7 +23,6 @@ #include "stdafx.h" #include "scumm/scumm.h" #include "scumm/actor.h" -#include "scumm/akos.h" #include "scumm/boxes.h" #include "scumm/charset.h" #include "scumm/costume.h" @@ -36,6 +35,10 @@ #include "scumm/util.h" #include "scumm/wiz_he.h" +#ifndef DISABLE_SCUMM_7_8 +#include "scumm/akos.h" +#endif + namespace Scumm { byte Actor::kInvalidBox = 0; @@ -1005,8 +1008,10 @@ void ScummEngine::processActors() { a->animateCostume(); } +#ifndef DISABLE_SCUMM_7_8 if (_features & GF_NEW_COSTUMES) akos_processQueue(); +#endif } #ifndef DISABLE_HE @@ -1166,6 +1171,7 @@ void Actor::drawActorCostume(bool hitTestMode) { } } +#ifndef DISABLE_SCUMM_7_8 bool Actor::actorHitTest(int x, int y) { AkosRenderer *ar = (AkosRenderer *)_vm->_costumeRenderer; @@ -1180,6 +1186,7 @@ bool Actor::actorHitTest(int x, int y) { return ar->_actorHitResult; } +#endif void Actor::animateCostume() { if (_costume == 0) @@ -1196,6 +1203,7 @@ void Actor::animateCostume() { } } +#ifndef DISABLE_SCUMM_7_8 void Actor::animateLimb(int limb, int f) { // This methods is very similiar to animateCostume(). // However, instead of animating *all* the limbs, it only animates @@ -1230,6 +1238,7 @@ void Actor::animateLimb(int limb, int f) { // _needBgReset = true; } } +#endif void ScummEngine::redrawAllActors() { int j; @@ -1300,12 +1309,14 @@ int ScummEngine::getActorFromPos(int x, int y) { return result; } +#ifndef DISABLE_SCUMM_7_8 void ScummEngine_v7::actorTalk(const byte *msg) { ScummEngine::actorTalk(msg); // Play associated speech, if any playSpeech((byte *)_lastStringTag); } +#endif void ScummEngine::actorTalk(const byte *msg) { Actor *a; @@ -1434,6 +1445,7 @@ void Actor::setActorCostume(int c) { _costumeNeedsInit = true; if (_vm->_features & GF_NEW_COSTUMES) { +#ifndef DISABLE_SCUMM_7_8 memset(_animVariable, 0, sizeof(_animVariable)); if (_vm->_heversion >= 71) @@ -1453,6 +1465,7 @@ void Actor::setActorCostume(int c) { } startAnimActor(_initFrame); } +#endif } else { if (_visible) { hideActor(); diff --git a/scumm/akos.cpp b/scumm/akos.cpp index d53fb0d016..cee334f063 100644 --- a/scumm/akos.cpp +++ b/scumm/akos.cpp @@ -591,7 +591,6 @@ void AkosRenderer::codec1_genericDecode(Codec1 &v1) { } #ifdef __PALM_OS__ -const byte *defaultScaleTable; const byte *oldScaleTable; #else const byte oldScaleTable[256] = { @@ -628,107 +627,6 @@ const byte oldScaleTable[256] = { 0x0E, 0x8E, 0x4E, 0xCE, 0x2E, 0xAE, 0x6E, 0xEE, 0x1E, 0x9E, 0x5E, 0xDE, 0x3E, 0xBE, 0x7E, 0xFE }; - -const byte defaultScaleTable[768] = { - 0x00, 0x80, 0x40, 0xC0, 0x20, 0xA0, 0x60, 0xE0, - 0x10, 0x90, 0x50, 0xD0, 0x30, 0xB0, 0x70, 0xF0, - 0x08, 0x88, 0x48, 0xC8, 0x28, 0xA8, 0x68, 0xE8, - 0x18, 0x98, 0x58, 0xD8, 0x38, 0xB8, 0x78, 0xF8, - 0x04, 0x84, 0x44, 0xC4, 0x24, 0xA4, 0x64, 0xE4, - 0x14, 0x94, 0x54, 0xD4, 0x34, 0xB4, 0x74, 0xF4, - 0x0C, 0x8C, 0x4C, 0xCC, 0x2C, 0xAC, 0x6C, 0xEC, - 0x1C, 0x9C, 0x5C, 0xDC, 0x3C, 0xBC, 0x7C, 0xFC, - 0x02, 0x82, 0x42, 0xC2, 0x22, 0xA2, 0x62, 0xE2, - 0x12, 0x92, 0x52, 0xD2, 0x32, 0xB2, 0x72, 0xF2, - 0x0A, 0x8A, 0x4A, 0xCA, 0x2A, 0xAA, 0x6A, 0xEA, - 0x1A, 0x9A, 0x5A, 0xDA, 0x3A, 0xBA, 0x7A, 0xFA, - 0x06, 0x86, 0x46, 0xC6, 0x26, 0xA6, 0x66, 0xE6, - 0x16, 0x96, 0x56, 0xD6, 0x36, 0xB6, 0x76, 0xF6, - 0x0E, 0x8E, 0x4E, 0xCE, 0x2E, 0xAE, 0x6E, 0xEE, - 0x1E, 0x9E, 0x5E, 0xDE, 0x3E, 0xBE, 0x7E, 0xFE, - 0x01, 0x81, 0x41, 0xC1, 0x21, 0xA1, 0x61, 0xE1, - 0x11, 0x91, 0x51, 0xD1, 0x31, 0xB1, 0x71, 0xF1, - 0x09, 0x89, 0x49, 0xC9, 0x29, 0xA9, 0x69, 0xE9, - 0x19, 0x99, 0x59, 0xD9, 0x39, 0xB9, 0x79, 0xF9, - 0x05, 0x85, 0x45, 0xC5, 0x25, 0xA5, 0x65, 0xE5, - 0x15, 0x95, 0x55, 0xD5, 0x35, 0xB5, 0x75, 0xF5, - 0x0D, 0x8D, 0x4D, 0xCD, 0x2D, 0xAD, 0x6D, 0xED, - 0x1D, 0x9D, 0x5D, 0xDD, 0x3D, 0xBD, 0x7D, 0xFD, - 0x03, 0x83, 0x43, 0xC3, 0x23, 0xA3, 0x63, 0xE3, - 0x13, 0x93, 0x53, 0xD3, 0x33, 0xB3, 0x73, 0xF3, - 0x0B, 0x8B, 0x4B, 0xCB, 0x2B, 0xAB, 0x6B, 0xEB, - 0x1B, 0x9B, 0x5B, 0xDB, 0x3B, 0xBB, 0x7B, 0xFB, - 0x07, 0x87, 0x47, 0xC7, 0x27, 0xA7, 0x67, 0xE7, - 0x17, 0x97, 0x57, 0xD7, 0x37, 0xB7, 0x77, 0xF7, - 0x0F, 0x8F, 0x4F, 0xCF, 0x2F, 0xAF, 0x6F, 0xEF, - 0x1F, 0x9F, 0x5F, 0xDF, 0x3F, 0xBF, 0x7F, 0xFE, - - 0x00, 0x80, 0x40, 0xC0, 0x20, 0xA0, 0x60, 0xE0, - 0x10, 0x90, 0x50, 0xD0, 0x30, 0xB0, 0x70, 0xF0, - 0x08, 0x88, 0x48, 0xC8, 0x28, 0xA8, 0x68, 0xE8, - 0x18, 0x98, 0x58, 0xD8, 0x38, 0xB8, 0x78, 0xF8, - 0x04, 0x84, 0x44, 0xC4, 0x24, 0xA4, 0x64, 0xE4, - 0x14, 0x94, 0x54, 0xD4, 0x34, 0xB4, 0x74, 0xF4, - 0x0C, 0x8C, 0x4C, 0xCC, 0x2C, 0xAC, 0x6C, 0xEC, - 0x1C, 0x9C, 0x5C, 0xDC, 0x3C, 0xBC, 0x7C, 0xFC, - 0x02, 0x82, 0x42, 0xC2, 0x22, 0xA2, 0x62, 0xE2, - 0x12, 0x92, 0x52, 0xD2, 0x32, 0xB2, 0x72, 0xF2, - 0x0A, 0x8A, 0x4A, 0xCA, 0x2A, 0xAA, 0x6A, 0xEA, - 0x1A, 0x9A, 0x5A, 0xDA, 0x3A, 0xBA, 0x7A, 0xFA, - 0x06, 0x86, 0x46, 0xC6, 0x26, 0xA6, 0x66, 0xE6, - 0x16, 0x96, 0x56, 0xD6, 0x36, 0xB6, 0x76, 0xF6, - 0x0E, 0x8E, 0x4E, 0xCE, 0x2E, 0xAE, 0x6E, 0xEE, - 0x1E, 0x9E, 0x5E, 0xDE, 0x3E, 0xBE, 0x7E, 0xFE, - 0x01, 0x81, 0x41, 0xC1, 0x21, 0xA1, 0x61, 0xE1, - 0x11, 0x91, 0x51, 0xD1, 0x31, 0xB1, 0x71, 0xF1, - 0x09, 0x89, 0x49, 0xC9, 0x29, 0xA9, 0x69, 0xE9, - 0x19, 0x99, 0x59, 0xD9, 0x39, 0xB9, 0x79, 0xF9, - 0x05, 0x85, 0x45, 0xC5, 0x25, 0xA5, 0x65, 0xE5, - 0x15, 0x95, 0x55, 0xD5, 0x35, 0xB5, 0x75, 0xF5, - 0x0D, 0x8D, 0x4D, 0xCD, 0x2D, 0xAD, 0x6D, 0xED, - 0x1D, 0x9D, 0x5D, 0xDD, 0x3D, 0xBD, 0x7D, 0xFD, - 0x03, 0x83, 0x43, 0xC3, 0x23, 0xA3, 0x63, 0xE3, - 0x13, 0x93, 0x53, 0xD3, 0x33, 0xB3, 0x73, 0xF3, - 0x0B, 0x8B, 0x4B, 0xCB, 0x2B, 0xAB, 0x6B, 0xEB, - 0x1B, 0x9B, 0x5B, 0xDB, 0x3B, 0xBB, 0x7B, 0xFB, - 0x07, 0x87, 0x47, 0xC7, 0x27, 0xA7, 0x67, 0xE7, - 0x17, 0x97, 0x57, 0xD7, 0x37, 0xB7, 0x77, 0xF7, - 0x0F, 0x8F, 0x4F, 0xCF, 0x2F, 0xAF, 0x6F, 0xEF, - 0x1F, 0x9F, 0x5F, 0xDF, 0x3F, 0xBF, 0x7F, 0xFE, - - 0x00, 0x80, 0x40, 0xC0, 0x20, 0xA0, 0x60, 0xE0, - 0x10, 0x90, 0x50, 0xD0, 0x30, 0xB0, 0x70, 0xF0, - 0x08, 0x88, 0x48, 0xC8, 0x28, 0xA8, 0x68, 0xE8, - 0x18, 0x98, 0x58, 0xD8, 0x38, 0xB8, 0x78, 0xF8, - 0x04, 0x84, 0x44, 0xC4, 0x24, 0xA4, 0x64, 0xE4, - 0x14, 0x94, 0x54, 0xD4, 0x34, 0xB4, 0x74, 0xF4, - 0x0C, 0x8C, 0x4C, 0xCC, 0x2C, 0xAC, 0x6C, 0xEC, - 0x1C, 0x9C, 0x5C, 0xDC, 0x3C, 0xBC, 0x7C, 0xFC, - 0x02, 0x82, 0x42, 0xC2, 0x22, 0xA2, 0x62, 0xE2, - 0x12, 0x92, 0x52, 0xD2, 0x32, 0xB2, 0x72, 0xF2, - 0x0A, 0x8A, 0x4A, 0xCA, 0x2A, 0xAA, 0x6A, 0xEA, - 0x1A, 0x9A, 0x5A, 0xDA, 0x3A, 0xBA, 0x7A, 0xFA, - 0x06, 0x86, 0x46, 0xC6, 0x26, 0xA6, 0x66, 0xE6, - 0x16, 0x96, 0x56, 0xD6, 0x36, 0xB6, 0x76, 0xF6, - 0x0E, 0x8E, 0x4E, 0xCE, 0x2E, 0xAE, 0x6E, 0xEE, - 0x1E, 0x9E, 0x5E, 0xDE, 0x3E, 0xBE, 0x7E, 0xFE, - 0x01, 0x81, 0x41, 0xC1, 0x21, 0xA1, 0x61, 0xE1, - 0x11, 0x91, 0x51, 0xD1, 0x31, 0xB1, 0x71, 0xF1, - 0x09, 0x89, 0x49, 0xC9, 0x29, 0xA9, 0x69, 0xE9, - 0x19, 0x99, 0x59, 0xD9, 0x39, 0xB9, 0x79, 0xF9, - 0x05, 0x85, 0x45, 0xC5, 0x25, 0xA5, 0x65, 0xE5, - 0x15, 0x95, 0x55, 0xD5, 0x35, 0xB5, 0x75, 0xF5, - 0x0D, 0x8D, 0x4D, 0xCD, 0x2D, 0xAD, 0x6D, 0xED, - 0x1D, 0x9D, 0x5D, 0xDD, 0x3D, 0xBD, 0x7D, 0xFD, - 0x03, 0x83, 0x43, 0xC3, 0x23, 0xA3, 0x63, 0xE3, - 0x13, 0x93, 0x53, 0xD3, 0x33, 0xB3, 0x73, 0xF3, - 0x0B, 0x8B, 0x4B, 0xCB, 0x2B, 0xAB, 0x6B, 0xEB, - 0x1B, 0x9B, 0x5B, 0xDB, 0x3B, 0xBB, 0x7B, 0xFB, - 0x07, 0x87, 0x47, 0xC7, 0x27, 0xA7, 0x67, 0xE7, - 0x17, 0x97, 0x57, 0xD7, 0x37, 0xB7, 0x77, 0xF7, - 0x0F, 0x8F, 0x4F, 0xCF, 0x2F, 0xAF, 0x6F, 0xEF, - 0x1F, 0x9F, 0x5F, 0xDF, 0x3F, 0xBF, 0x7F, 0xFF, -}; #endif byte AkosRenderer::codec1(int xmoveCur, int ymoveCur) { diff --git a/scumm/bomp.cpp b/scumm/bomp.cpp index ded9f912bc..4f2a636879 100644 --- a/scumm/bomp.cpp +++ b/scumm/bomp.cpp @@ -330,6 +330,111 @@ void ScummEngine::drawBomp(const BompDrawData &bd, bool mirror) { } } +#ifdef __PALM_OS__ +const byte *defaultScaleTable; +#else +const byte defaultScaleTable[768] = { + 0x00, 0x80, 0x40, 0xC0, 0x20, 0xA0, 0x60, 0xE0, + 0x10, 0x90, 0x50, 0xD0, 0x30, 0xB0, 0x70, 0xF0, + 0x08, 0x88, 0x48, 0xC8, 0x28, 0xA8, 0x68, 0xE8, + 0x18, 0x98, 0x58, 0xD8, 0x38, 0xB8, 0x78, 0xF8, + 0x04, 0x84, 0x44, 0xC4, 0x24, 0xA4, 0x64, 0xE4, + 0x14, 0x94, 0x54, 0xD4, 0x34, 0xB4, 0x74, 0xF4, + 0x0C, 0x8C, 0x4C, 0xCC, 0x2C, 0xAC, 0x6C, 0xEC, + 0x1C, 0x9C, 0x5C, 0xDC, 0x3C, 0xBC, 0x7C, 0xFC, + 0x02, 0x82, 0x42, 0xC2, 0x22, 0xA2, 0x62, 0xE2, + 0x12, 0x92, 0x52, 0xD2, 0x32, 0xB2, 0x72, 0xF2, + 0x0A, 0x8A, 0x4A, 0xCA, 0x2A, 0xAA, 0x6A, 0xEA, + 0x1A, 0x9A, 0x5A, 0xDA, 0x3A, 0xBA, 0x7A, 0xFA, + 0x06, 0x86, 0x46, 0xC6, 0x26, 0xA6, 0x66, 0xE6, + 0x16, 0x96, 0x56, 0xD6, 0x36, 0xB6, 0x76, 0xF6, + 0x0E, 0x8E, 0x4E, 0xCE, 0x2E, 0xAE, 0x6E, 0xEE, + 0x1E, 0x9E, 0x5E, 0xDE, 0x3E, 0xBE, 0x7E, 0xFE, + 0x01, 0x81, 0x41, 0xC1, 0x21, 0xA1, 0x61, 0xE1, + 0x11, 0x91, 0x51, 0xD1, 0x31, 0xB1, 0x71, 0xF1, + 0x09, 0x89, 0x49, 0xC9, 0x29, 0xA9, 0x69, 0xE9, + 0x19, 0x99, 0x59, 0xD9, 0x39, 0xB9, 0x79, 0xF9, + 0x05, 0x85, 0x45, 0xC5, 0x25, 0xA5, 0x65, 0xE5, + 0x15, 0x95, 0x55, 0xD5, 0x35, 0xB5, 0x75, 0xF5, + 0x0D, 0x8D, 0x4D, 0xCD, 0x2D, 0xAD, 0x6D, 0xED, + 0x1D, 0x9D, 0x5D, 0xDD, 0x3D, 0xBD, 0x7D, 0xFD, + 0x03, 0x83, 0x43, 0xC3, 0x23, 0xA3, 0x63, 0xE3, + 0x13, 0x93, 0x53, 0xD3, 0x33, 0xB3, 0x73, 0xF3, + 0x0B, 0x8B, 0x4B, 0xCB, 0x2B, 0xAB, 0x6B, 0xEB, + 0x1B, 0x9B, 0x5B, 0xDB, 0x3B, 0xBB, 0x7B, 0xFB, + 0x07, 0x87, 0x47, 0xC7, 0x27, 0xA7, 0x67, 0xE7, + 0x17, 0x97, 0x57, 0xD7, 0x37, 0xB7, 0x77, 0xF7, + 0x0F, 0x8F, 0x4F, 0xCF, 0x2F, 0xAF, 0x6F, 0xEF, + 0x1F, 0x9F, 0x5F, 0xDF, 0x3F, 0xBF, 0x7F, 0xFE, + + 0x00, 0x80, 0x40, 0xC0, 0x20, 0xA0, 0x60, 0xE0, + 0x10, 0x90, 0x50, 0xD0, 0x30, 0xB0, 0x70, 0xF0, + 0x08, 0x88, 0x48, 0xC8, 0x28, 0xA8, 0x68, 0xE8, + 0x18, 0x98, 0x58, 0xD8, 0x38, 0xB8, 0x78, 0xF8, + 0x04, 0x84, 0x44, 0xC4, 0x24, 0xA4, 0x64, 0xE4, + 0x14, 0x94, 0x54, 0xD4, 0x34, 0xB4, 0x74, 0xF4, + 0x0C, 0x8C, 0x4C, 0xCC, 0x2C, 0xAC, 0x6C, 0xEC, + 0x1C, 0x9C, 0x5C, 0xDC, 0x3C, 0xBC, 0x7C, 0xFC, + 0x02, 0x82, 0x42, 0xC2, 0x22, 0xA2, 0x62, 0xE2, + 0x12, 0x92, 0x52, 0xD2, 0x32, 0xB2, 0x72, 0xF2, + 0x0A, 0x8A, 0x4A, 0xCA, 0x2A, 0xAA, 0x6A, 0xEA, + 0x1A, 0x9A, 0x5A, 0xDA, 0x3A, 0xBA, 0x7A, 0xFA, + 0x06, 0x86, 0x46, 0xC6, 0x26, 0xA6, 0x66, 0xE6, + 0x16, 0x96, 0x56, 0xD6, 0x36, 0xB6, 0x76, 0xF6, + 0x0E, 0x8E, 0x4E, 0xCE, 0x2E, 0xAE, 0x6E, 0xEE, + 0x1E, 0x9E, 0x5E, 0xDE, 0x3E, 0xBE, 0x7E, 0xFE, + 0x01, 0x81, 0x41, 0xC1, 0x21, 0xA1, 0x61, 0xE1, + 0x11, 0x91, 0x51, 0xD1, 0x31, 0xB1, 0x71, 0xF1, + 0x09, 0x89, 0x49, 0xC9, 0x29, 0xA9, 0x69, 0xE9, + 0x19, 0x99, 0x59, 0xD9, 0x39, 0xB9, 0x79, 0xF9, + 0x05, 0x85, 0x45, 0xC5, 0x25, 0xA5, 0x65, 0xE5, + 0x15, 0x95, 0x55, 0xD5, 0x35, 0xB5, 0x75, 0xF5, + 0x0D, 0x8D, 0x4D, 0xCD, 0x2D, 0xAD, 0x6D, 0xED, + 0x1D, 0x9D, 0x5D, 0xDD, 0x3D, 0xBD, 0x7D, 0xFD, + 0x03, 0x83, 0x43, 0xC3, 0x23, 0xA3, 0x63, 0xE3, + 0x13, 0x93, 0x53, 0xD3, 0x33, 0xB3, 0x73, 0xF3, + 0x0B, 0x8B, 0x4B, 0xCB, 0x2B, 0xAB, 0x6B, 0xEB, + 0x1B, 0x9B, 0x5B, 0xDB, 0x3B, 0xBB, 0x7B, 0xFB, + 0x07, 0x87, 0x47, 0xC7, 0x27, 0xA7, 0x67, 0xE7, + 0x17, 0x97, 0x57, 0xD7, 0x37, 0xB7, 0x77, 0xF7, + 0x0F, 0x8F, 0x4F, 0xCF, 0x2F, 0xAF, 0x6F, 0xEF, + 0x1F, 0x9F, 0x5F, 0xDF, 0x3F, 0xBF, 0x7F, 0xFE, + + 0x00, 0x80, 0x40, 0xC0, 0x20, 0xA0, 0x60, 0xE0, + 0x10, 0x90, 0x50, 0xD0, 0x30, 0xB0, 0x70, 0xF0, + 0x08, 0x88, 0x48, 0xC8, 0x28, 0xA8, 0x68, 0xE8, + 0x18, 0x98, 0x58, 0xD8, 0x38, 0xB8, 0x78, 0xF8, + 0x04, 0x84, 0x44, 0xC4, 0x24, 0xA4, 0x64, 0xE4, + 0x14, 0x94, 0x54, 0xD4, 0x34, 0xB4, 0x74, 0xF4, + 0x0C, 0x8C, 0x4C, 0xCC, 0x2C, 0xAC, 0x6C, 0xEC, + 0x1C, 0x9C, 0x5C, 0xDC, 0x3C, 0xBC, 0x7C, 0xFC, + 0x02, 0x82, 0x42, 0xC2, 0x22, 0xA2, 0x62, 0xE2, + 0x12, 0x92, 0x52, 0xD2, 0x32, 0xB2, 0x72, 0xF2, + 0x0A, 0x8A, 0x4A, 0xCA, 0x2A, 0xAA, 0x6A, 0xEA, + 0x1A, 0x9A, 0x5A, 0xDA, 0x3A, 0xBA, 0x7A, 0xFA, + 0x06, 0x86, 0x46, 0xC6, 0x26, 0xA6, 0x66, 0xE6, + 0x16, 0x96, 0x56, 0xD6, 0x36, 0xB6, 0x76, 0xF6, + 0x0E, 0x8E, 0x4E, 0xCE, 0x2E, 0xAE, 0x6E, 0xEE, + 0x1E, 0x9E, 0x5E, 0xDE, 0x3E, 0xBE, 0x7E, 0xFE, + 0x01, 0x81, 0x41, 0xC1, 0x21, 0xA1, 0x61, 0xE1, + 0x11, 0x91, 0x51, 0xD1, 0x31, 0xB1, 0x71, 0xF1, + 0x09, 0x89, 0x49, 0xC9, 0x29, 0xA9, 0x69, 0xE9, + 0x19, 0x99, 0x59, 0xD9, 0x39, 0xB9, 0x79, 0xF9, + 0x05, 0x85, 0x45, 0xC5, 0x25, 0xA5, 0x65, 0xE5, + 0x15, 0x95, 0x55, 0xD5, 0x35, 0xB5, 0x75, 0xF5, + 0x0D, 0x8D, 0x4D, 0xCD, 0x2D, 0xAD, 0x6D, 0xED, + 0x1D, 0x9D, 0x5D, 0xDD, 0x3D, 0xBD, 0x7D, 0xFD, + 0x03, 0x83, 0x43, 0xC3, 0x23, 0xA3, 0x63, 0xE3, + 0x13, 0x93, 0x53, 0xD3, 0x33, 0xB3, 0x73, 0xF3, + 0x0B, 0x8B, 0x4B, 0xCB, 0x2B, 0xAB, 0x6B, 0xEB, + 0x1B, 0x9B, 0x5B, 0xDB, 0x3B, 0xBB, 0x7B, 0xFB, + 0x07, 0x87, 0x47, 0xC7, 0x27, 0xA7, 0x67, 0xE7, + 0x17, 0x97, 0x57, 0xD7, 0x37, 0xB7, 0x77, 0xF7, + 0x0F, 0x8F, 0x4F, 0xCF, 0x2F, 0xAF, 0x6F, 0xEF, + 0x1F, 0x9F, 0x5F, 0xDF, 0x3F, 0xBF, 0x7F, 0xFF, +}; +#endif + static const byte bitCount[] = { 8, 7, 7, 6, 7, 6, 6, 5, 7, 6, 6, 5, 6, 5, 5, 4, 7, 6, 6, 5, 6, 5, 5, 4, 6, 5, 5, 4, 5, 4, 4, 3, diff --git a/scumm/camera.cpp b/scumm/camera.cpp index 489740a5b5..42e11c72b0 100644 --- a/scumm/camera.cpp +++ b/scumm/camera.cpp @@ -58,37 +58,6 @@ void ScummEngine::setCameraAt(int pos_x, int pos_y) { stopTalk(); } -void ScummEngine_v7::setCameraAt(int pos_x, int pos_y) { - Common::Point old; - - old = camera._cur; - - camera._cur.x = pos_x; - camera._cur.y = pos_y; - - clampCameraPos(&camera._cur); - - camera._dest = camera._cur; - VAR(VAR_CAMERA_DEST_X) = camera._dest.x; - VAR(VAR_CAMERA_DEST_Y) = camera._dest.y; - - assert(camera._cur.x >= (_screenWidth / 2) && camera._cur.y >= (_screenHeight / 2)); - - if (camera._cur.x != old.x || camera._cur.y != old.y) { - if (VAR(VAR_SCROLL_SCRIPT)) { - VAR(VAR_CAMERA_POS_X) = camera._cur.x; - VAR(VAR_CAMERA_POS_Y) = camera._cur.y; - runScript(VAR(VAR_SCROLL_SCRIPT), 0, 0, 0); - } - - // Even though cameraMoved() is called automatically, we may - // need to know at once that the camera has moved, or text may - // be printed at the wrong coordinates. See bugs #795938 and - // #929242 - cameraMoved(); - } -} - void ScummEngine::setCameraFollows(Actor *a) { int t, i; @@ -115,30 +84,6 @@ void ScummEngine::setCameraFollows(Actor *a) { runInventoryScript(0); } -void ScummEngine_v7::setCameraFollows(Actor *a) { - - byte oldfollow = camera._follows; - int ax, ay; - - camera._follows = a->_number; - VAR(VAR_CAMERA_FOLLOWED_ACTOR) = a->_number; - - if (!a->isInCurrentRoom()) { - startScene(a->getRoom(), 0, 0); - } - - ax = abs(a->_pos.x - camera._cur.x); - ay = abs(a->_pos.y - camera._cur.y); - - if (ax > VAR(VAR_CAMERA_THRESHOLD_X) || ay > VAR(VAR_CAMERA_THRESHOLD_Y) || ax > (_screenWidth / 2) || ay > (_screenHeight / 2)) { - setCameraAt(a->_pos.x, a->_pos.y); - } - - if (a->_number != oldfollow) - runInventoryScript(0); -} - - void ScummEngine::clampCameraPos(Common::Point *pt) { if (pt->x < VAR(VAR_CAMERA_MIN_X)) pt->x = (short) VAR(VAR_CAMERA_MIN_X); @@ -228,6 +173,105 @@ void ScummEngine::moveCamera() { } } +void ScummEngine::cameraMoved() { + int screenLeft; + if (_features & GF_NEW_CAMERA) { + assert(camera._cur.x >= (_screenWidth / 2) && camera._cur.y >= (_screenHeight / 2)); + } else { + if (camera._cur.x < (_screenWidth / 2)) { + camera._cur.x = (_screenWidth / 2); + } else if (camera._cur.x > _roomWidth - (_screenWidth / 2)) { + camera._cur.x = _roomWidth - (_screenWidth / 2); + } + } + + _screenStartStrip = camera._cur.x / 8 - gdi._numStrips / 2; + _screenEndStrip = _screenStartStrip + gdi._numStrips - 1; + + _screenTop = camera._cur.y - (_screenHeight / 2); + if (_features & GF_NEW_CAMERA) { + screenLeft = camera._cur.x - (_screenWidth / 2); + } else { + screenLeft = _screenStartStrip * 8; + } + + virtscr[0].xstart = screenLeft; +} + +void ScummEngine::panCameraTo(int x, int y) { + camera._dest.x = x; + camera._mode = kPanningCameraMode; + camera._movingToActor = false; +} + +void ScummEngine::actorFollowCamera(int act) { + if (!(_features & GF_NEW_CAMERA)) { + int old; + + old = camera._follows; + setCameraFollows(derefActor(act, "actorFollowCamera")); + if (camera._follows != old) + runInventoryScript(0); + + camera._movingToActor = false; + } +} + +#ifndef DISABLE_SCUMM_7_8 +void ScummEngine_v7::setCameraAt(int pos_x, int pos_y) { + Common::Point old; + + old = camera._cur; + + camera._cur.x = pos_x; + camera._cur.y = pos_y; + + clampCameraPos(&camera._cur); + + camera._dest = camera._cur; + VAR(VAR_CAMERA_DEST_X) = camera._dest.x; + VAR(VAR_CAMERA_DEST_Y) = camera._dest.y; + + assert(camera._cur.x >= (_screenWidth / 2) && camera._cur.y >= (_screenHeight / 2)); + + if (camera._cur.x != old.x || camera._cur.y != old.y) { + if (VAR(VAR_SCROLL_SCRIPT)) { + VAR(VAR_CAMERA_POS_X) = camera._cur.x; + VAR(VAR_CAMERA_POS_Y) = camera._cur.y; + runScript(VAR(VAR_SCROLL_SCRIPT), 0, 0, 0); + } + + // Even though cameraMoved() is called automatically, we may + // need to know at once that the camera has moved, or text may + // be printed at the wrong coordinates. See bugs #795938 and + // #929242 + cameraMoved(); + } +} + +void ScummEngine_v7::setCameraFollows(Actor *a) { + + byte oldfollow = camera._follows; + int ax, ay; + + camera._follows = a->_number; + VAR(VAR_CAMERA_FOLLOWED_ACTOR) = a->_number; + + if (!a->isInCurrentRoom()) { + startScene(a->getRoom(), 0, 0); + } + + ax = abs(a->_pos.x - camera._cur.x); + ay = abs(a->_pos.y - camera._cur.y); + + if (ax > VAR(VAR_CAMERA_THRESHOLD_X) || ay > VAR(VAR_CAMERA_THRESHOLD_Y) || ax > (_screenWidth / 2) || ay > (_screenHeight / 2)) { + setCameraAt(a->_pos.x, a->_pos.y); + } + + if (a->_number != oldfollow) + runInventoryScript(0); +} + void ScummEngine_v7::moveCamera() { Common::Point old = camera._cur; Actor *a = NULL; @@ -312,55 +356,11 @@ void ScummEngine_v7::moveCamera() { } } - -void ScummEngine::cameraMoved() { - int screenLeft; - if (_features & GF_NEW_CAMERA) { - assert(camera._cur.x >= (_screenWidth / 2) && camera._cur.y >= (_screenHeight / 2)); - } else { - if (camera._cur.x < (_screenWidth / 2)) { - camera._cur.x = (_screenWidth / 2); - } else if (camera._cur.x > _roomWidth - (_screenWidth / 2)) { - camera._cur.x = _roomWidth - (_screenWidth / 2); - } - } - - _screenStartStrip = camera._cur.x / 8 - gdi._numStrips / 2; - _screenEndStrip = _screenStartStrip + gdi._numStrips - 1; - - _screenTop = camera._cur.y - (_screenHeight / 2); - if (_features & GF_NEW_CAMERA) { - screenLeft = camera._cur.x - (_screenWidth / 2); - } else { - screenLeft = _screenStartStrip * 8; - } - - virtscr[0].xstart = screenLeft; -} - -void ScummEngine::panCameraTo(int x, int y) { - camera._dest.x = x; - camera._mode = kPanningCameraMode; - camera._movingToActor = false; -} - void ScummEngine_v7::panCameraTo(int x, int y) { VAR(VAR_CAMERA_FOLLOWED_ACTOR) = camera._follows = 0; VAR(VAR_CAMERA_DEST_X) = camera._dest.x = x; VAR(VAR_CAMERA_DEST_Y) = camera._dest.y = y; } - -void ScummEngine::actorFollowCamera(int act) { - if (!(_features & GF_NEW_CAMERA)) { - int old; - - old = camera._follows; - setCameraFollows(derefActor(act, "actorFollowCamera")); - if (camera._follows != old) - runInventoryScript(0); - - camera._movingToActor = false; - } -} +#endif } // End of namespace Scumm diff --git a/scumm/cursor.cpp b/scumm/cursor.cpp index a923f4897c..0aad5939de 100644 --- a/scumm/cursor.cpp +++ b/scumm/cursor.cpp @@ -22,14 +22,16 @@ #include "stdafx.h" #include "common/system.h" #include "common/util.h" -#include "scumm/bomp.h" #include "scumm/charset.h" #include "scumm/intern.h" #include "scumm/object.h" -#include "scumm/resource_v7he.h" #include "scumm/saveload.h" #include "scumm/scumm.h" +#include "scumm/bomp.h" +#ifndef DISABLE_HE +#include "scumm/resource_v7he.h" +#endif namespace Scumm { @@ -163,7 +165,6 @@ void ScummEngine_v70he::setCursorFromImg(uint img, uint room, uint imgindex) { else _win32ResExtractor->setCursor(img); } -#endif void ScummEngine_v90he::setDefaultCursor() { const uint16 *src; @@ -196,6 +197,7 @@ void ScummEngine_v90he::setDefaultCursor() { updateCursor(); } +#endif void ScummEngine_v6::setCursorFromImg(uint img, uint room, uint imgindex) { int w, h; diff --git a/scumm/input.cpp b/scumm/input.cpp index 584e01e0ac..787ed4f284 100644 --- a/scumm/input.cpp +++ b/scumm/input.cpp @@ -31,11 +31,18 @@ #include "scumm/debugger.h" #include "scumm/dialogs.h" #include "scumm/imuse.h" -#include "scumm/insane/insane.h" -#include "scumm/logic_he.h" #include "scumm/scumm.h" #include "scumm/sound.h" +#ifndef DISABLE_SCUMM_7_8 +#include "scumm/insane/insane.h" +#endif + +#ifndef DISABLE_HE +#include "scumm/logic_he.h" +#endif + + #ifdef _WIN32_WCE #define KEY_ALL_SKIP 3457 #endif @@ -211,9 +218,12 @@ void ScummEngine::parseEvents() { void ScummEngine::clearClickedStatus() { _keyPressed = 0; + +#ifndef DISABLE_HE if (_heversion >= 98) { ((ScummEngine_v90he *)this)->_logicHE->processKeyStroke(_keyPressed); } +#endif _mouseAndKeyboardStat = 0; _leftBtnPressed &= ~msClicked; _rightBtnPressed &= ~msClicked; @@ -222,9 +232,11 @@ void ScummEngine::clearClickedStatus() { void ScummEngine::processKbd(bool smushMode) { int saveloadkey; +#ifndef DISABLE_HE if (_heversion >= 98) { ((ScummEngine_v90he *)this)->_logicHE->processKeyStroke(_keyPressed); } +#endif _lastKeyHit = _keyPressed; _keyPressed = 0; @@ -413,6 +425,7 @@ void ScummEngine::processKbd(bool smushMode) { if (_lastKeyHit == VAR(VAR_CUTSCENEEXIT_KEY) || ((VAR(VAR_CUTSCENEEXIT_KEY) == 4 || VAR(VAR_CUTSCENEEXIT_KEY) == 64) && _lastKeyHit == 27)) { +#ifndef DISABLE_SCUMM_7_8 // Skip cutscene (or active SMUSH video). For the V2 games, which // normally use F4 for this, we add in a hack that makes escape work, // too (just for convenience). @@ -422,6 +435,7 @@ void ScummEngine::processKbd(bool smushMode) { else _smushVideoShouldFinish = true; } +#endif if (!smushMode || _smushVideoShouldFinish) abortCutscene(); if (_version <= 2) { diff --git a/scumm/intern.h b/scumm/intern.h index bee950899e..407431ef46 100644 --- a/scumm/intern.h +++ b/scumm/intern.h @@ -665,6 +665,7 @@ protected: byte VAR_TIMEDATE_SECOND; }; +#ifndef DISABLE_SCUMM_7_8 class ScummEngine_v60he : public ScummEngine_v6 { protected: typedef void (ScummEngine_v60he::*OpcodeProcv60he)(); @@ -715,7 +716,9 @@ protected: void o60_redimArray(); void o60_readFilePos(); }; +#endif +#ifndef DISABLE_HE class ScummEngine_v70he : public ScummEngine_v60he { friend class Win32ResExtractor; friend class MacResExtractor; @@ -1315,7 +1318,9 @@ protected: void o100_getSpriteInfo(); void o100_getWizData(); }; +#endif +#ifndef DISABLE_SCUMM_7_8 class ScummEngine_v7 : public ScummEngine_v6 { public: ScummEngine_v7(GameDetector *detector, OSystem *syst, const ScummGameSettings &gs, uint8 md5sum[16]); @@ -1429,6 +1434,8 @@ protected: }; +#endif + } // End of namespace Scumm #endif diff --git a/scumm/logic_he.cpp b/scumm/logic_he.cpp index fec1d5e4d6..046f05676f 100644 --- a/scumm/logic_he.cpp +++ b/scumm/logic_he.cpp @@ -434,7 +434,6 @@ void LogicHEfunshop::op_1005(int32 *args) { } int LogicHEfunshop::checkShape(int arg_0, int arg_4, int arg_8, int arg_C, int arg_10, int arg_14, int arg_18, int arg_1C, int arg_20, int arg_24) { - // XXX: Check arg_20/24 types return 1; } diff --git a/scumm/module.mk b/scumm/module.mk index ac5d8d495e..2a7b3166d8 100644 --- a/scumm/module.mk +++ b/scumm/module.mk @@ -2,7 +2,6 @@ MODULE := scumm MODULE_OBJS := \ scumm/actor.o \ - scumm/akos.o \ scumm/base-costume.o \ scumm/bomp.o \ scumm/boxes.o \ @@ -39,8 +38,6 @@ MODULE_OBJS := \ scumm/script_v2.o \ scumm/script_v5.o \ scumm/script_v6.o \ - scumm/script_v6he.o \ - scumm/script_v8.o \ scumm/scumm.o \ scumm/sound.o \ scumm/string.o \ @@ -48,6 +45,13 @@ MODULE_OBJS := \ scumm/util.o \ scumm/vars.o \ scumm/verbs.o \ + scumm/thumbnail.o + +ifndef DISABLE_SCUMM_7_8 +MODULE_OBJS += \ + scumm/akos.o \ + scumm/script_v6he.o \ + scumm/script_v8.o \ scumm/imuse_digi/dimuse.o \ scumm/imuse_digi/dimuse_bndmgr.o \ scumm/imuse_digi/dimuse_codecs.o \ @@ -69,8 +73,8 @@ MODULE_OBJS := \ scumm/smush/smush_player.o \ scumm/smush/saud_channel.o \ scumm/smush/smush_mixer.o \ - scumm/smush/smush_font.o \ - scumm/thumbnail.o + scumm/smush/smush_font.o +endif ifndef DISABLE_HE MODULE_OBJS += \ diff --git a/scumm/object.cpp b/scumm/object.cpp index ec39ea7530..c3dc557bb8 100644 --- a/scumm/object.cpp +++ b/scumm/object.cpp @@ -1115,6 +1115,7 @@ int ScummEngine::getObjectImageCount(int object) { } } +#ifndef DISABLE_SCUMM_7_8 int ScummEngine_v8::getObjectIdFromOBIM(const byte *obim) { // In V8, IMHD has no obj_id, but rather a name string. We map the name // back to an object id using a table derived from the DOBJ resource. @@ -1129,6 +1130,7 @@ int ScummEngine_v7::getObjectIdFromOBIM(const byte *obim) { const ImageHeader *imhd = (const ImageHeader *)findResourceData(MKID('IMHD'), obim); return READ_LE_UINT16(&imhd->v7.obj_id); } +#endif int ScummEngine::getObjectIdFromOBIM(const byte *obim) { if (_features & GF_SMALL_HEADER) diff --git a/scumm/palette.cpp b/scumm/palette.cpp index 3085c98f12..0dda37dd15 100644 --- a/scumm/palette.cpp +++ b/scumm/palette.cpp @@ -686,6 +686,7 @@ void ScummEngine::darkenPalette(int redScale, int greenScale, int blueScale, int } } +#ifndef DISABLE_SCUMM_7_8 static int HSL2RGBHelper(int n1, int n2, int hue) { if (hue > 360) hue = hue - 360; @@ -778,6 +779,7 @@ void ScummEngine_v8::desaturatePalette(int hueScale, int satScale, int lightScal setDirtyColors(startColor, endColor); } } +#endif int ScummEngine::remapPaletteColor(int r, int g, int b, int threshold) { diff --git a/scumm/resource.cpp b/scumm/resource.cpp index 2ad0f47543..2ac7d110df 100644 --- a/scumm/resource.cpp +++ b/scumm/resource.cpp @@ -342,6 +342,7 @@ void ScummEngine::readIndexFile() { closeRoom(); } +#ifndef DISABLE_SCUMM_7_8 void ScummEngine_v7::readIndexBlock(uint32 blocktype, uint32 itemsize) { int num; char *ptr; @@ -358,6 +359,7 @@ void ScummEngine_v7::readIndexBlock(uint32 blocktype, uint32 itemsize) { ScummEngine::readIndexBlock(blocktype, itemsize); } } +#endif #ifndef DISABLE_HE void ScummEngine_v70he::readIndexBlock(uint32 blocktype, uint32 itemsize) { @@ -1034,6 +1036,7 @@ void ScummEngine_v5::readMAXS(int blockSize) { _shadowPalette = (byte *)calloc(_shadowPaletteSize, 1); } +#ifndef DISABLE_SCUMM_7_8 void ScummEngine_v8::readMAXS(int blockSize) { debug(9, "readMAXS: MAXS has blocksize %d", blockSize); @@ -1096,6 +1099,7 @@ void ScummEngine_v7::readMAXS(int blockSize) { _shadowPaletteSize = NUM_SHADOW_PALETTE * 256; _shadowPalette = (byte *)calloc(_shadowPaletteSize, 1); } +#endif void ScummEngine_v6::readMAXS(int blockSize) { debug(0, "readMAXS: MAXS has blocksize %d", blockSize); @@ -1148,6 +1152,7 @@ void ScummEngine::readGlobalObjects() { #endif } +#ifndef DISABLE_SCUMM_7_8 void ScummEngine_v8::readGlobalObjects() { int i; int num = _fileHandle->readUint32LE(); @@ -1189,6 +1194,7 @@ void ScummEngine_v7::readGlobalObjects() { _classData[i] = FROM_LE_32(_classData[i]); #endif } +#endif void ScummEngine::allocateArrays() { // Note: Buffers are now allocated in scummMain to allow for diff --git a/scumm/saveload.cpp b/scumm/saveload.cpp index 6e19d9672a..ff9fe5b95c 100644 --- a/scumm/saveload.cpp +++ b/scumm/saveload.cpp @@ -162,10 +162,12 @@ bool ScummEngine::loadState(int slot, bool compat) { if (!_imuse || _saveSound || !_saveTemporaryState) _sound->stopAllSounds(); +#ifndef DISABLE_SCUMM_7_8 if (_imuseDigital) { _imuseDigital->stopAllSounds(); _imuseDigital->resetState(); } +#endif _sound->stopCD(); @@ -997,12 +999,14 @@ void ScummEngine_v5::saveOrLoad(Serializer *s, uint32 savegameVersion) { s->saveLoadEntries(this, cursorEntries); } +#ifndef DISABLE_SCUMM_7_8 void ScummEngine_v7::saveOrLoad(Serializer *s, uint32 savegameVersion) { ScummEngine::saveOrLoad(s, savegameVersion); assert(_imuseDigital); _imuseDigital->saveOrLoad(s); } +#endif #ifndef DISABLE_HE void ScummEngine_v70he::saveOrLoad(Serializer *s, uint32 savegameVersion) { diff --git a/scumm/script_v6.cpp b/scumm/script_v6.cpp index 70576e2b49..f744ee9365 100644 --- a/scumm/script_v6.cpp +++ b/scumm/script_v6.cpp @@ -1,4 +1,3 @@ - /* ScummVM - Scumm Interpreter * Copyright (C) 2001 Ludvig Strigeus * Copyright (C) 2001-2005 The ScummVM project @@ -29,19 +28,22 @@ #include "scumm/actor.h" #include "scumm/charset.h" #include "scumm/imuse.h" -#include "scumm/imuse_digi/dimuse.h" #include "scumm/intern.h" #include "scumm/object.h" #include "scumm/resource.h" #include "scumm/scumm.h" #include "scumm/sound.h" +#include "scumm/util.h" #include "scumm/verbs.h" -#include "scumm/smush/smush_player.h" #include "sound/mididrv.h" #include "sound/mixer.h" +#ifndef DISABLE_SCUMM_7_8 +#include "scumm/imuse_digi/dimuse.h" #include "scumm/insane/insane.h" +#include "scumm/smush/smush_player.h" +#endif namespace Scumm { @@ -1088,10 +1090,12 @@ void ScummEngine_v6::o6_startSound() { // sound. See also o6_soundOps() if (_heversion >= 61) offset = pop(); - + +#ifndef DISABLE_SCUMM_7_8 if (_features & GF_DIGI_IMUSE) _imuseDigital->startSfx(pop(), 64); else +#endif _sound->addSoundToQueue(pop(), offset); } @@ -2490,6 +2494,7 @@ void ScummEngine_v6::o6_kernelSetFunctions() { case 4: grabCursor(args[1], args[2], args[3], args[4]); break; +#ifndef DISABLE_SCUMM_7_8 case 6: { uint32 speed; if (_smushFrameRate == 0) @@ -2522,6 +2527,7 @@ void ScummEngine_v6::o6_kernelSetFunctions() { } } break; +#endif case 12: setCursorFromImg(args[1], (uint) - 1, args[2]); break; diff --git a/scumm/scumm.cpp b/scumm/scumm.cpp index 95009505a7..0fbd069c3a 100644 --- a/scumm/scumm.cpp +++ b/scumm/scumm.cpp @@ -34,23 +34,32 @@ #include "gui/message.h" #include "gui/newgui.h" -#include "scumm/akos.h" #include "scumm/charset.h" #include "scumm/costume.h" #include "scumm/debugger.h" #include "scumm/dialogs.h" -#include "scumm/imuse_digi/dimuse.h" #include "scumm/imuse.h" -#include "scumm/insane/insane.h" #include "scumm/intern.h" -#include "scumm/logic_he.h" #include "scumm/player_nes.h" #include "scumm/player_v1.h" #include "scumm/player_v2.h" #include "scumm/player_v2a.h" #include "scumm/player_v3a.h" -#include "scumm/resource_v7he.h" +#include "scumm/sound.h" #include "scumm/scumm.h" +#include "scumm/util.h" + +#ifndef DISABLE_HE +#include "scumm/logic_he.h" +#include "scumm/resource_v7he.h" +#endif + +#ifndef DISABLE_SCUMM_7_8 +#include "scumm/akos.h" +#include "scumm/imuse_digi/dimuse.h" +#include "scumm/insane/insane.h" +#endif + #ifdef __PALM_OS__ #include "extras/palm-scumm-md5.h" #else @@ -187,6 +196,7 @@ static const ScummGameSettings scumm_settings[] = { // {"test", "Test demo game", GID_SAMNMAX, 6, 0, /*MDT_PCSPK |*/ MDT_ADLIB | MDT_NATIVE, GF_NEW_OPCODES, Common::kPlatformUnknown, 0, 0}, +#ifndef DISABLE_SCUMM_7_8 /* Scumm Version 7 */ {"ft", "Full Throttle", GID_FT, 7, 0, MDT_NONE, GF_NEW_COSTUMES | GF_NEW_CAMERA | GF_DIGI_IMUSE, Common::kPlatformPC, 0, 0}, @@ -215,11 +225,14 @@ static const ScummGameSettings scumm_settings[] = { GF_NEW_COSTUMES | GF_NEW_CAMERA | GF_DIGI_IMUSE | GF_DEFAULT_TO_1X_SCALER | GF_DEMO, Common::kPlatformWindows, "comi", "COMI.LA0"}, #endif +#endif + // Humongous Entertainment Scumm Version 6 - {"puttputt", "Putt-Putt Joins The Parade", GID_HEGAME, 6, 61, MDT_ADLIB | MDT_NATIVE, - GF_USE_KEY | GF_NEW_COSTUMES | GF_MULTIPLE_VERSIONS, Common::kPlatformPC, 0, 0}, {"puttdemo", "Putt-Putt Joins The Parade (Demo)", GID_HEGAME, 6, 60, MDT_ADLIB | MDT_NATIVE, GF_USE_KEY | GF_MULTIPLE_VERSIONS, Common::kPlatformPC, 0, 0}, +#ifndef DISABLE_SCUMM_7_8 + {"puttputt", "Putt-Putt Joins The Parade", GID_HEGAME, 6, 61, MDT_ADLIB | MDT_NATIVE, + GF_USE_KEY | GF_NEW_COSTUMES | GF_MULTIPLE_VERSIONS, Common::kPlatformPC, 0, 0}, {"moondemo", "Putt-Putt Goes To The Moon (Demo)", GID_HEGAME, 6, 61, MDT_ADLIB | MDT_NATIVE, GF_USE_KEY | GF_NEW_COSTUMES | GF_MULTIPLE_VERSIONS, Common::kPlatformPC, 0, 0}, {"puttmoon", "Putt-Putt Goes To The Moon", GID_HEGAME, 6, 61, MDT_ADLIB | MDT_NATIVE, @@ -232,6 +245,7 @@ static const ScummGameSettings scumm_settings[] = { GF_USE_KEY | GF_NEW_COSTUMES | GF_MULTIPLE_VERSIONS, Common::kPlatformPC, 0, 0}, {"fbdemo", "Fatty Bear's Birthday Surprise (DOS Demo)", GID_FBEAR, 6, 61, MDT_ADLIB | MDT_NATIVE, GF_USE_KEY | GF_NEW_COSTUMES | GF_MULTIPLE_VERSIONS, Common::kPlatformPC, 0, 0}, +#endif #ifndef DISABLE_HE {"activity", "Putt-Putt & Fatty Bear's Activity Pack", GID_HEGAME, 6, 70, MDT_NONE, @@ -1342,6 +1356,7 @@ ScummEngine_v90he::~ScummEngine_v90he() { } #endif +#ifndef DISABLE_SCUMM_7_8 ScummEngine_v7::ScummEngine_v7(GameDetector *detector, OSystem *syst, const ScummGameSettings &gs, uint8 md5sum[16]) : ScummEngine_v6(detector, syst, gs, md5sum) { _existLanguageFile = false; @@ -1362,7 +1377,7 @@ ScummEngine_v8::ScummEngine_v8(GameDetector *detector, OSystem *syst, const Scum ScummEngine_v8::~ScummEngine_v8() { delete [] _objectIDMap; } - +#endif #pragma mark - #pragma mark --- Initialization --- @@ -1425,8 +1440,10 @@ int ScummEngine::init(GameDetector &detector) { // Create the costume renderer if (_features & GF_NEW_COSTUMES) { +#ifndef DISABLE_SCUMM_7_8 _costumeRenderer = new AkosRenderer(this); _costumeLoader = new AkosCostumeLoader(this); +#endif } else if (_platform == Common::kPlatformNES) { _costumeRenderer = new NESCostumeRenderer(this); _costumeLoader = new NESCostumeLoader(this); @@ -1435,10 +1452,12 @@ int ScummEngine::init(GameDetector &detector) { _costumeLoader = new ClassicCostumeLoader(this); } +#ifndef DISABLE_SCUMM_7_8 // Create FT INSANE object if (_gameId == GID_FT) _insane = new Insane((ScummEngine_v6 *)this); else +#endif _insane = 0; // Load game from specified slot, if any @@ -1755,6 +1774,7 @@ void ScummEngine_v6::scummInit() { } } +#ifndef DISABLE_SCUMM_7_8 void ScummEngine_v60he::scummInit() { ScummEngine::scummInit(); @@ -1764,6 +1784,7 @@ void ScummEngine_v60he::scummInit() { if (_gameId == GID_FUNPACK) setCursorHotspot(16, 16); } +#endif #ifndef DISABLE_HE void ScummEngine_v72he::scummInit() { @@ -1844,7 +1865,9 @@ void ScummEngine::setupMusic(int midi) { // Init iMuse if (_features & GF_DIGI_IMUSE) { +#ifndef DISABLE_SCUMM_7_8 _musicEngine = _imuseDigital = new IMuseDigital(this, 10); +#endif } else if (_platform == Common::kPlatformNES) { _musicEngine = new Player_NES(this); } else if ((_platform == Common::kPlatformAmiga) && (_version == 2)) { @@ -2247,11 +2270,13 @@ load_game: _sound->processSoundQues(); +#ifndef DISABLE_SCUMM_7_8 if (_imuseDigital) { _imuseDigital->flushTracks(); if ( ((_gameId == GID_DIG) && (!(_features & GF_DEMO))) || (_gameId == GID_CMI) ) _imuseDigital->refreshScripts(); } +#endif camera._last = camera._cur; @@ -2891,13 +2916,16 @@ Engine *Engine_SCUMM_create(GameDetector *detector, OSystem *syst) { engine = new ScummEngine_v70he(detector, syst, game, md5sum); break; #endif +#ifndef DISABLE_SCUMM_7_8 case 61: engine = new ScummEngine_v60he(detector, syst, game, md5sum); break; +#endif default: engine = new ScummEngine_v6(detector, syst, game, md5sum); } break; +#ifndef DISABLE_SCUMM_7_8 case 7: engine = new ScummEngine_v7(detector, syst, game, md5sum); break; @@ -2906,6 +2934,8 @@ Engine *Engine_SCUMM_create(GameDetector *detector, OSystem *syst) { engine = new ScummEngine_v8(detector, syst, game, md5sum); break; #endif + +#endif default: error("Engine_SCUMM_create(): Unknown version of game engine"); } diff --git a/scumm/sound.cpp b/scumm/sound.cpp index d6059aecc6..e222ab19d7 100644 --- a/scumm/sound.cpp +++ b/scumm/sound.cpp @@ -23,12 +23,15 @@ #include "stdafx.h" #include "scumm/actor.h" #include "scumm/imuse.h" -#include "scumm/imuse_digi/dimuse.h" #include "scumm/scumm.h" #include "scumm/saveload.h" #include "scumm/sound.h" #include "scumm/util.h" +#ifndef DISABLE_SCUMM_7_8 +#include "scumm/imuse_digi/dimuse.h" +#endif + #include "common/config-manager.h" #include "common/timer.h" #include "common/util.h" @@ -806,8 +809,10 @@ void Sound::startTalkSound(uint32 offset, uint32 b, int mode, Audio::SoundHandle } if (_vm->_imuseDigital) { +#ifndef DISABLE_SCUMM_7_8 //_vm->_imuseDigital->stopSound(kTalkSoundID); _vm->_imuseDigital->startVoice(kTalkSoundID, input); +#endif } else { _vm->_mixer->playInputStream(Audio::Mixer::kSFXSoundType, handle, input, id); } @@ -817,7 +822,9 @@ void Sound::startTalkSound(uint32 offset, uint32 b, int mode, Audio::SoundHandle void Sound::stopTalkSound() { if (_sfxMode & 2) { if (_vm->_imuseDigital) { +#ifndef DISABLE_SCUMM_7_8 _vm->_imuseDigital->stopSound(kTalkSoundID); +#endif } else if (_vm->_heversion >= 60) { _vm->_mixer->stopID(1); } else { @@ -855,8 +862,10 @@ int Sound::getSoundElapsedTime(int sound) const { } int Sound::isSoundRunning(int sound) const { +#ifndef DISABLE_SCUMM_7_8 if (_vm->_imuseDigital) return (_vm->_imuseDigital->getSoundStatus(sound) != 0); +#endif if (sound == _currentCDSound) return pollCD(); @@ -906,8 +915,10 @@ int Sound::isSoundRunning(int sound) const { */ bool Sound::isSoundInUse(int sound) const { +#ifndef DISABLE_SCUMM_7_8 if (_vm->_imuseDigital) return (_vm->_imuseDigital->getSoundStatus(sound) != 0); +#endif if (sound == _currentCDSound) return pollCD() != 0; @@ -1015,11 +1026,13 @@ void Sound::stopAllSounds() { void Sound::soundKludge(int *list, int num) { int i; +#ifndef DISABLE_SCUMM_7_8 if (_vm->_imuseDigital) { _vm->_imuseDigital->parseScriptCmds(list[0], list[1], list[2], list[3], list[4], list[5], list[6], list[7]); return; } +#endif if (list[0] == -1) { processSoundQues(); @@ -1081,9 +1094,11 @@ void Sound::pauseSounds(bool pause) { _soundsPaused = pause; +#ifndef DISABLE_SCUMM_7_8 if (_vm->_imuseDigital) { _vm->_imuseDigital->pause(pause); } +#endif _vm->_mixer->pauseAll(pause); diff --git a/scumm/string.cpp b/scumm/string.cpp index e0b42a18c7..bb2a07ac79 100644 --- a/scumm/string.cpp +++ b/scumm/string.cpp @@ -747,10 +747,12 @@ int ScummEngine::addStringToStack(byte *dst, int dstSize, int var) { return 0; } +#ifndef DISABLE_HE void ScummEngine_v80he::initCharset(int charsetno) { ScummEngine::initCharset(charsetno); VAR(VAR_CURRENT_CHARSET) = charsetno; } +#endif void ScummEngine::initCharset(int charsetno) { int i; @@ -836,6 +838,7 @@ void ScummEngine_v6::removeBlastTexts() { _blastTextQueuePos = 0; } +#ifndef DISABLE_SCUMM_7_8 int indexCompare(const void *p1, const void *p2) { const LangIndexNode *i1 = (const LangIndexNode *) p1; const LangIndexNode *i2 = (const LangIndexNode *) p2; @@ -989,11 +992,6 @@ void ScummEngine_v7::playSpeech(const byte *ptr) { } } -void ScummEngine::translateText(const byte *text, byte *trans_buff) { - // Default: just copy the string - memcpy(trans_buff, text, resStrLen(text) + 1); -} - void ScummEngine_v7::translateText(const byte *text, byte *trans_buff) { LangIndexNode target; LangIndexNode *found = NULL; @@ -1083,4 +1081,11 @@ void ScummEngine_v7::translateText(const byte *text, byte *trans_buff) { } } +#endif + +void ScummEngine::translateText(const byte *text, byte *trans_buff) { + // Default: just copy the string + memcpy(trans_buff, text, resStrLen(text) + 1); +} + } // End of namespace Scumm diff --git a/scumm/vars.cpp b/scumm/vars.cpp index e23e07295d..e78fd5abc9 100644 --- a/scumm/vars.cpp +++ b/scumm/vars.cpp @@ -24,10 +24,13 @@ #include "stdafx.h" #include "common/config-manager.h" #include "scumm/scumm.h" -#include "scumm/logic_he.h" #include "scumm/intern.h" #include "sound/mididrv.h" +#ifndef DISABLE_HE +#include "scumm/logic_he.h" +#endif + namespace Scumm { void ScummEngine::setupScummVars() { @@ -194,6 +197,7 @@ void ScummEngine_v6::setupScummVars() { VAR_CHARSET_MASK = 123; } +#ifndef DISABLE_HE void ScummEngine_v70he::setupScummVars() { ScummEngine_v6::setupScummVars(); @@ -303,7 +307,9 @@ void ScummEngine_v72he::setupScummVars() { VAR_NUM_UNK = 131; } } +#endif +#ifndef DISABLE_SCUMM_7_8 void ScummEngine_v7::setupScummVars() { VAR_MOUSE_X = 1; VAR_MOUSE_Y = 2; @@ -500,6 +506,7 @@ void ScummEngine_v8::setupScummVars() { VAR_BLAST_ABOVE_TEXT = 133; VAR_SYNC = 134; } +#endif void ScummEngine_v2::initScummVars() { @@ -525,6 +532,7 @@ void ScummEngine_v5::initScummVars() { _scummVars[74] = 1225; } +#ifndef DISABLE_SCUMM_7_8 void ScummEngine_v7::initScummVars() { ScummEngine::initScummVars(); @@ -539,7 +547,9 @@ void ScummEngine_v7::initScummVars() { VAR(VAR_DEFAULT_TALK_DELAY) = 60; VAR(VAR_VOICE_MODE) = ConfMan.getBool("subtitles"); } +#endif +#ifndef DISABLE_HE void ScummEngine_v70he::initScummVars() { ScummEngine::initScummVars(); @@ -591,6 +601,7 @@ void ScummEngine_v99he::initScummVars() { VAR(VAR_NUM_PALETTES) = _numPalettes; VAR(VAR_NUM_UNK) = _numUnk; } +#endif void ScummEngine::initScummVars() { |