diff options
117 files changed, 2175 insertions, 1134 deletions
@@ -486,6 +486,9 @@ Other contributions OS/2: Paul Smedley + RISC OS: + Cameron Cawley + SlackWare: Robert Kelsen @@ -1,7 +1,7 @@ For a more comprehensive changelog of the latest experimental code, see: https://github.com/scummvm/scummvm/commits/ -1.10.0 (YYYY-MM-DD) +2.0.0 (YYYY-MM-DD) New Games: - Added support for Full Pipe. - Added support for Hi-Res Adventure #3: Cranston Manor. @@ -57,6 +57,9 @@ For a more comprehensive changelog of the latest experimental code, see: MADE: - Fixed badly distorted sound (bug #9753). + MADS: + - Fix rare crash that can happen when Rex is first locked up + MOHAWK: - Added patch to the original data files to correct the vault access instructions in Myst ME. @@ -77,6 +80,10 @@ For a more comprehensive changelog of the latest experimental code, see: This bug is also present when using the original interpreter. - Fixed various other script bugs. + TsAGE: + - Display fixes for Return to Ringworld Demo + - Fix loading Return to Ringworld savegames with unreferenced dynamic objects + 1.9.1 (YYYY-MM-DD) General: - Added bilinear filtering option for SDL2 fullscreen mode. @@ -98,6 +105,7 @@ For a more comprehensive changelog of the latest experimental code, see: Tinsel: - Fixed some Discworld 2 text/voice not displaying & playing all the way through + - Fix crash in in-game save menu when all slots are used with long names TsAGE: - Fixed recently introduced bug preventing animations in Return to Ringworld from playing. diff --git a/audio/decoders/mp3.cpp b/audio/decoders/mp3.cpp index 93c21b9072..3fd134df41 100644 --- a/audio/decoders/mp3.cpp +++ b/audio/decoders/mp3.cpp @@ -119,6 +119,7 @@ public: // AudioStream API int readBuffer(int16 *buffer, const int numSamples); + bool endOfData() const; bool endOfStream() const; // PacketizedAudioStream API @@ -452,7 +453,10 @@ int PacketizedMP3Stream::readBuffer(int16 *buffer, const int numSamples) { while (samples < numSamples) { // Empty? Bail out for now, and mark the stream as ended if (_queue.empty()) { - _state = MP3_STATE_EOS; + // EOS state is only valid once a packet has been received at least + // once + if (_state == MP3_STATE_READY) + _state = MP3_STATE_EOS; return samples; } @@ -484,12 +488,17 @@ int PacketizedMP3Stream::readBuffer(int16 *buffer, const int numSamples) { return samples; } +bool PacketizedMP3Stream::endOfData() const { + Common::StackLock lock(_mutex); + return BaseMP3Stream::endOfData(); +} + bool PacketizedMP3Stream::endOfStream() const { + Common::StackLock lock(_mutex); + if (!endOfData()) return false; - // Lock the mutex - Common::StackLock lock(_mutex); if (!_queue.empty()) return false; diff --git a/backends/platform/psp/README.PSP b/backends/platform/psp/README.PSP index 46e027f4f7..b2f639af22 100644 --- a/backends/platform/psp/README.PSP +++ b/backends/platform/psp/README.PSP @@ -1,4 +1,4 @@ -ScummVM-PSP 1.10.0git README +ScummVM-PSP 2.0.0git README ============================================================================== Installation diff --git a/base/internal_version.h b/base/internal_version.h index c46922da57..63b63e5484 100644 --- a/base/internal_version.h +++ b/base/internal_version.h @@ -16,4 +16,4 @@ #define SCUMMVM_REVISION #endif -#define SCUMMVM_VERSION "1.10.0git" SCUMMVM_REVISION +#define SCUMMVM_VERSION "2.0.0git" SCUMMVM_REVISION @@ -2247,20 +2247,11 @@ echo_n "Checking host CPU architecture... " case $_host_cpu in arm*) echo "ARM" - case $_host_alias in - # Apple's as does not support the syntax we use in our ARM - # assembly. We simply do not enable it. - arm-apple-darwin9) - ;; - arm-apple-darwin10) - ;; - arm-apple-darwin11) - ;; - # psvita does not like the asm code... - arm-vita-eabi) + case $_host in + openpandora) + define_in_config_if_yes yes 'USE_ARM_NEON_ASPECT_CORRECTOR' ;; - - *) + android | android-arm | androidsdl-armeabi | arm-*riscos | caanoo | ds | gp2x | gp2xwiz | maemo | tizen | wince) define_in_config_if_yes yes 'USE_ARM_SCALER_ASM' # FIXME: The following feature exhibits a bug. It produces distorted # sound since 9003ce517ff9906b0288f9f7c02197fd091d4554. The ARM @@ -3156,7 +3147,6 @@ if test -n "$_host"; then _optimization_level=-O3 fi - define_in_config_if_yes yes 'USE_ARM_NEON_ASPECT_CORRECTOR' append_var CXXFLAGS "-march=armv7-a" append_var CXXFLAGS "-mtune=cortex-a8" append_var CXXFLAGS "-mfloat-abi=softfp" @@ -3263,7 +3253,6 @@ if test -n "$_host"; then _unix=yes _backend="tizen" _port_mk="backends/platform/tizen/tizen.mk" - _arm_asm=yes _build_scalers=no _seq_midi=no _mt32emu=no diff --git a/devtools/create_kyradat/games.cpp b/devtools/create_kyradat/games.cpp index e6f0b38c45..0c151ec7cb 100644 --- a/devtools/create_kyradat/games.cpp +++ b/devtools/create_kyradat/games.cpp @@ -287,6 +287,7 @@ const int kyra1FloppyOldNeed[] = { k1SpecialPalette30, k1SpecialPalette31, k1SpecialPalette32, + k1SpecialPalette33, k1PutDownString, k1WaitAmuletString, k1BlackJewelString, diff --git a/devtools/create_kyradat/resources.cpp b/devtools/create_kyradat/resources.cpp index 246811f821..8347279f13 100644 --- a/devtools/create_kyradat/resources.cpp +++ b/devtools/create_kyradat/resources.cpp @@ -442,6 +442,7 @@ static const ResourceProvider resourceProviders[] = { { k1SpecialPalette30, kKyra1, kPlatformDOS, kOldFloppy, UNK_LANG, &k1SpecialPalette30DOSOldFloppyProvider }, { k1SpecialPalette31, kKyra1, kPlatformDOS, kOldFloppy, UNK_LANG, &k1SpecialPalette31DOSOldFloppyProvider }, { k1SpecialPalette32, kKyra1, kPlatformDOS, kOldFloppy, UNK_LANG, &k1SpecialPalette32DOSOldFloppyProvider }, + { k1SpecialPalette33, kKyra1, kPlatformDOS, kOldFloppy, UNK_LANG, &k1SpecialPalette33DOSOldFloppyProvider }, { k1PutDownString, kKyra1, kPlatformDOS, kOldFloppy, RU_RUS, &k1PutDownStringDOSOldFloppyRussianProvider }, { k1WaitAmuletString, kKyra1, kPlatformDOS, kOldFloppy, RU_RUS, &k1WaitAmuletStringDOSOldFloppyRussianProvider }, { k1BlackJewelString, kKyra1, kPlatformDOS, kOldFloppy, RU_RUS, &k1BlackJewelStringDOSOldFloppyRussianProvider }, diff --git a/devtools/create_kyradat/resources/lok_dos_oldfloppy.h b/devtools/create_kyradat/resources/lok_dos_oldfloppy.h index 62b1530941..68c8a588e8 100644 --- a/devtools/create_kyradat/resources/lok_dos_oldfloppy.h +++ b/devtools/create_kyradat/resources/lok_dos_oldfloppy.h @@ -1440,6 +1440,19 @@ static const byte k1SpecialPalette32DOSOldFloppy[39] = { static const ByteProvider k1SpecialPalette32DOSOldFloppyProvider = { ARRAYSIZE(k1SpecialPalette32DOSOldFloppy), k1SpecialPalette32DOSOldFloppy }; +static const byte k1SpecialPalette33DOSOldFloppy[60] = { + 0x3F, 0x3D, 0x2F, 0x3F, 0x3D, 0x29, 0x3F, 0x3D, + 0x23, 0x3F, 0x3D, 0x1D, 0x3F, 0x3B, 0x17, 0x3F, + 0x3B, 0x11, 0x3F, 0x3B, 0x0B, 0x3F, 0x3B, 0x05, + 0x3F, 0x3B, 0x00, 0x3D, 0x38, 0x00, 0x3B, 0x34, + 0x00, 0x39, 0x33, 0x00, 0x39, 0x30, 0x00, 0x37, + 0x2D, 0x00, 0x36, 0x2B, 0x00, 0x34, 0x28, 0x00, + 0x33, 0x26, 0x00, 0x32, 0x24, 0x00, 0x30, 0x22, + 0x00, 0x2F, 0x20, 0x00 +}; + +static const ByteProvider k1SpecialPalette33DOSOldFloppyProvider = { ARRAYSIZE(k1SpecialPalette33DOSOldFloppy), k1SpecialPalette33DOSOldFloppy }; + static const Shape k1Healing1ShapesDOSOldFloppy[22] = { { 8, 0, 0, 3, 48, -12, -48 }, { 8, 3, 0, 3, 48, -12, -48 }, diff --git a/devtools/credits.pl b/devtools/credits.pl index fcf5602992..e86ea0e854 100755 --- a/devtools/credits.pl +++ b/devtools/credits.pl @@ -1058,6 +1058,10 @@ begin_credits("Credits"); add_person("Paul Smedley", "Creeping", ""); end_section(); + begin_section("RISC OS"); + add_person("Cameron Cawley", "ccawley2011", ""); + end_section(); + begin_section("SlackWare"); add_person("Robert Kelsen", "", ""); end_section(); diff --git a/devtools/update-version.pl b/devtools/update-version.pl index 0e2879ffd9..75f6f0e7c8 100755 --- a/devtools/update-version.pl +++ b/devtools/update-version.pl @@ -51,6 +51,7 @@ my @subs_files = qw( dists/gph/scummvm.ini dists/riscos/!Boot,feb backends/platform/psp/README.PSP + snapcraft.yaml ); my %subs = ( diff --git a/dists/android/AndroidManifest.xml b/dists/android/AndroidManifest.xml index 208ed62f90..3201fbee7e 100644 --- a/dists/android/AndroidManifest.xml +++ b/dists/android/AndroidManifest.xml @@ -1,16 +1,36 @@ <?xml version="1.0" encoding="utf-8"?> -<!-- NB: android:versionCode needs to be bumped for formal releases --> +<!-- NB: android:versionCode needs to be bumped for formal releases --> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="org.scummvm.scummvm" android:versionCode="@ANDROID_VERSIONCODE@" - android:versionName="1.10.0git" + android:versionName="2.0.0git" android:sharedUserId="org.scummvm.scummvm"> - <!-- This version works on Android 1.5 (SDK 3) and newer, but we - want Android 2.2 (SDK 8) defaults and features. --> <uses-sdk android:minSdkVersion="3" - android:targetSdkVersion="8"/> + android:targetSdkVersion="14"/> + + <uses-permission + android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> + + <uses-permission + android:name="android.permission.ACCESS_WIFI_STATE"/> + + <uses-feature + android:name="android.hardware.wifi" + android:required="false"/> + + <uses-feature + android:name="android.hardware.screen.landscape" + android:required="false"/> + + <uses-feature + android:name="android.hardware.touchscreen" + android:required="false"/> + + <uses-feature + android:name="android.software.leanback" + android:required="false"/> <application android:label="@string/app_name" @@ -19,36 +39,16 @@ android:icon="@drawable/scummvm"> <activity android:name=".ScummVMActivity" android:theme="@android:style/Theme.NoTitleBar.Fullscreen" + android:banner="@drawable/leanback_icon" android:screenOrientation="landscape" - android:configChanges="orientation|keyboardHidden" + android:configChanges="orientation|keyboardHidden|screenSize" android:windowSoftInputMode="adjustResize"> <intent-filter> <action android:name="android.intent.action.MAIN"/> <category android:name="android.intent.category.LAUNCHER"/> <category android:name="tv.ouya.intent.category.GAME"/> - </intent-filter> - </activity> - <activity android:name=".ScummVMActivity" - android:theme="@android:style/Theme.NoTitleBar.Fullscreen" - android:banner="@drawable/leanback_icon"> - <intent-filter> - <action android:name="android.intent.action.MAIN"/> <category android:name="android.intent.category.LEANBACK_LAUNCHER"/> - </intent-filter> + </intent-filter> </activity> </application> - - <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> - - <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" android:required="true"/> - - <uses-feature android:name="android.hardware.screen.landscape" - android:required="false" /> - - <uses-feature android:name="android.hardware.touchscreen" - android:required="false" /> - - <uses-feature android:name="android.software.leanback" - android:required="false" /> - </manifest> diff --git a/dists/android/AndroidManifest.xml.in b/dists/android/AndroidManifest.xml.in index 9601425c74..6cd7601f83 100644 --- a/dists/android/AndroidManifest.xml.in +++ b/dists/android/AndroidManifest.xml.in @@ -1,16 +1,36 @@ <?xml version="1.0" encoding="utf-8"?> -<!-- NB: android:versionCode needs to be bumped for formal releases --> +<!-- NB: android:versionCode needs to be bumped for formal releases --> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="org.scummvm.scummvm" android:versionCode="@ANDROID_VERSIONCODE@" android:versionName="@VERSION@" android:sharedUserId="org.scummvm.scummvm"> - <!-- This version works on Android 1.5 (SDK 3) and newer, but we - want Android 2.2 (SDK 8) defaults and features. --> <uses-sdk android:minSdkVersion="3" - android:targetSdkVersion="8"/> + android:targetSdkVersion="14"/> + + <uses-permission + android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> + + <uses-permission + android:name="android.permission.ACCESS_WIFI_STATE"/> + + <uses-feature + android:name="android.hardware.wifi" + android:required="false"/> + + <uses-feature + android:name="android.hardware.screen.landscape" + android:required="false"/> + + <uses-feature + android:name="android.hardware.touchscreen" + android:required="false"/> + + <uses-feature + android:name="android.software.leanback" + android:required="false"/> <application android:label="@string/app_name" @@ -19,36 +39,16 @@ android:icon="@drawable/scummvm"> <activity android:name=".ScummVMActivity" android:theme="@android:style/Theme.NoTitleBar.Fullscreen" + android:banner="@drawable/leanback_icon" android:screenOrientation="landscape" - android:configChanges="orientation|keyboardHidden" + android:configChanges="orientation|keyboardHidden|screenSize" android:windowSoftInputMode="adjustResize"> <intent-filter> <action android:name="android.intent.action.MAIN"/> <category android:name="android.intent.category.LAUNCHER"/> <category android:name="tv.ouya.intent.category.GAME"/> - </intent-filter> - </activity> - <activity android:name=".ScummVMActivity" - android:theme="@android:style/Theme.NoTitleBar.Fullscreen" - android:banner="@drawable/leanback_icon"> - <intent-filter> - <action android:name="android.intent.action.MAIN"/> <category android:name="android.intent.category.LEANBACK_LAUNCHER"/> - </intent-filter> + </intent-filter> </activity> </application> - - <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> - - <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" android:required="true"/> - - <uses-feature android:name="android.hardware.screen.landscape" - android:required="false" /> - - <uses-feature android:name="android.hardware.touchscreen" - android:required="false" /> - - <uses-feature android:name="android.software.leanback" - android:required="false" /> - </manifest> diff --git a/dists/debian/changelog b/dists/debian/changelog index 902aa89c9a..8d27a39da2 100644 --- a/dists/debian/changelog +++ b/dists/debian/changelog @@ -1,3 +1,164 @@ +scummvm (1.9.0+dfsg-2) unstable; urgency=medium + + * Team upload. + * Avoid disabling -Wformat, which causes a build failure with GCC 7. + Closes: #871161. + + -- Stephen Kitt <skitt@debian.org> Thu, 10 Aug 2017 12:05:39 +0200 + +scummvm (1.9.0+dfsg-1) unstable; urgency=medium + + * New upstream release [October 2016]. + * Removed obsolete "libsdl2.patch". + * Removed traces of -dbg package. + * Build reproducibly (Closes: #827145) + Thanks, Reiner Herrmann. + + -- Dmitry Smirnov <onlyjob@debian.org> Fri, 11 Nov 2016 23:17:07 +1100 + +scummvm (1.8.1+dfsg-1) unstable; urgency=medium + + * New upstream release [May 2016]. + * Standards-Version: 3.9.8. + * Removed obsolete "format-security.patch". + * Build-Depends: + + libfreetype6-dev + + libpng-dev + + -- Dmitry Smirnov <onlyjob@debian.org> Mon, 06 Jun 2016 00:28:50 +1000 + +scummvm (1.8.0+dfsg-1) unstable; urgency=low + + * New upstream release [March 2016]. + + [ Alexandre Detiste ] + * Use HTTPS for Vcs URLs. + * Standards-Version: 3.9.7. + * Watch "http://scummvm.org/downloads/" for releases. + + [ Dmitry Smirnov ] + * Corrected icons installation path (Closes: #778687) + * Update watch file to v4; use copyright/Files-Exclided; + simplified rules/get-orig-source. + * watch: check GitHub for releases. + * Removed .menu file. + * Fixed in new upstream release 1.8.0: + + Spelling mistake in Spanish translation of Lure of the Temptress: + "obsevar" -> "observar" has been fixed upstream (Closes: #805215). + * clean: remove "config.mk". + * Removed obsolete "drop1test.patch". + * Switch to libsdl2 (Closes: #807710): + + New "libsdl2.patch" to find "sdl2-config"; + + Build-Depends: + - libsdl1.2-dev + + libsdl2-dev | libsdl1.2-dev + * Added "format-security.patch" to fix FTBFS. + * Build with full hardening. + + -- Dmitry Smirnov <onlyjob@debian.org> Tue, 15 Mar 2016 10:07:19 +1100 + +scummvm (1.7.0+dfsg-2) unstable; urgency=medium + + * Team upload. + * Add disable-arm-asm.patch. + Fix a crash and segmentation fault on ARM systems by disabling asm + optimizations. + Thanks to Konstantinos Margaritis <markos@freevec.org> for the report + and patch and Vagrant Cascadian for further testing. + (Closes: #779029) + + -- Markus Koschany <apo@gambaru.de> Sat, 28 Feb 2015 18:50:52 +0100 + +scummvm (1.7.0+dfsg-1) unstable; urgency=low + + * New upstream release [July 2014]. + - remove old/obsolete patches. + + added new "drop1test.patch" to disable problematic test. + + build with "--disable-eventrecorder" to avoid FTBFS in tests. + + added "libjpeg-dev" and "libfaad-dev" to Build-Depends. + * Install all arch-independent files (themes, game data, etc.). + * Build-time re-compression of "classic" theme. + * Added "debian/gbp.conf". + * Standards-Version to 3.9.5. + + -- Dmitry Smirnov <onlyjob@debian.org> Sun, 10 Aug 2014 00:50:36 +1000 + +scummvm (1.6.0+dfsg-3) unstable; urgency=medium + + * Touch "config.mk" before dh_auto_clean to fix FTBFS (Closes: #718164). + + -- Dmitry Smirnov <onlyjob@debian.org> Tue, 30 Jul 2013 17:05:40 +1000 + +scummvm (1.6.0+dfsg-2) unstable; urgency=low + + * New patches to produce working executables on kFreeBSD and Hurd: + + [hurd+kfreebsd] to build on Hurd & kFreeBSD (Closes: #711320); + thanks to Petr Salinger. + + [posix] to fix FTBFS in timidity on GNU Hurd. + + -- Dmitry Smirnov <onlyjob@debian.org> Fri, 07 Jun 2013 18:40:21 +1000 + +scummvm (1.6.0+dfsg-1) unstable; urgency=low + + * New upstream release [May 2013]. + * Added "libtheora-dev" to Build-Depends. + * get-orig-source: minor repacking improvement to produce identical + archives. + + -- Dmitry Smirnov <onlyjob@debian.org> Sun, 02 Jun 2013 19:09:54 +1000 + +scummvm (1.5.0+dfsg-1) unstable; urgency=low + + [ Dmitry Smirnov ] + * New upstream release [July 2012]. + * xz compression for .deb files and debian source. + * debhelper to version 9. + * Standards to 3.9.4. + * Built-Using field for scummvm-data to document bundled fonts. + * Build-Depends: + + alphabetising and sorting. + + added "fonts-freefont-ttf" and "zip" to facilitate substitution + of font files and theme re-compression. + + introduced "autotools_dev". + * Added Vcs links. + * Tightened relationships with "scummvm-data (= ${source:Version})". + * lintianisation: removed tabs from package description. + * Added commented scummvm-dbg package. + * debian/rules: + + optimisation. + + enabled parallel build. + + increased log verbosity with "--enable-verbose-build". + + install upstream changelog. + + gracefully handle stripping if -dbg package is + (un-)commented in debian/control. + + re-compress scummmodern.zip and replace bundled fonts from + fonts-freefont-ttf. + + added "get-orig-source" target for DFSG-repackaging and removing + non-free fonts. + + fixed FTBFS on GNU Hurd. + * debian/copyright: + + to copyright-format-1.0. + + audit of upstream copyrights/licenses. + * Dropped obsolete patch "debian-changes-1.0.0-1". + * Dropped empty directories. + * Moved .desktop file to the main package, added breaks/replaces + * Added README.source with notes regarding DFSG concerns. + * Added debian/watch. + * Added myself to Uploaders. + + [ Markus Koschany ] + * Update package description. Suggest new ScummVM games Drascula and + Lure of the Temptress. + + -- Dmitry Smirnov <onlyjob@debian.org> Sun, 05 May 2013 20:46:54 +1000 + +scummvm (1.4.1-1) unstable; urgency=low + + * New upstream release + * Install translations.dat into scummvm-data + + -- Moritz Muehlenhoff <jmm@debian.org> Sat, 14 Jan 2012 11:39:15 +0100 + scummvm (1.4.0-1) unstable; urgency=low * New upstream release diff --git a/dists/debian/clean b/dists/debian/clean new file mode 100644 index 0000000000..add6683a6d --- /dev/null +++ b/dists/debian/clean @@ -0,0 +1,3 @@ +gui/themes/scummclassic.zip +gui/themes/scummmodern.zip +config.mk diff --git a/dists/debian/compat b/dists/debian/compat index 7f8f011eb7..ec635144f6 100644 --- a/dists/debian/compat +++ b/dists/debian/compat @@ -1 +1 @@ -7 +9 diff --git a/dists/debian/control b/dists/debian/control index f101ce3ef8..a1ffa15e82 100644 --- a/dists/debian/control +++ b/dists/debian/control @@ -2,15 +2,45 @@ Source: scummvm Section: games Priority: optional Maintainer: Debian Games Team <pkg-games-devel@lists.alioth.debian.org> -Uploaders: David Weinehall <tao@debian.org>, Moritz Muehlenhoff <jmm@debian.org> -Build-Depends: debhelper (>= 7.0.50~), nasm [i386], libsdl2-dev, libmad0-dev, libasound2-dev [linux-any], libvorbis-dev, libmpeg2-4-dev, libflac-dev, libz-dev, libfluidsynth-dev, python -Standards-Version: 3.9.2 +Uploaders: David Weinehall <tao@debian.org> + ,Moritz Muehlenhoff <jmm@debian.org> + ,Dmitry Smirnov <onlyjob@debian.org> +Build-Depends: debhelper (>= 9), autotools-dev + ,fonts-freefont-ttf + ,libasound2-dev [linux-any] + ,libfaad-dev + ,libflac-dev + ,libfluidsynth-dev + ,libfreetype6-dev + ,libjpeg-dev + ,libmad0-dev + ,libmpeg2-4-dev + ,libpng-dev + ,libsdl2-dev | libsdl1.2-dev + ,libtheora-dev + ,libvorbis-dev + ,libz-dev + ,nasm [i386] + ,python + ,zip +# Cloud integration: +# ,libsdl2-net-dev +# ,libcurl4-gnutls-dev +Standards-Version: 3.9.8 Homepage: http://www.scummvm.org +Vcs-Git: https://anonscm.debian.org/git/pkg-games/scummvm.git +Vcs-Browser: https://anonscm.debian.org/cgit/pkg-games/scummvm.git Package: scummvm Architecture: any -Depends: ${shlibs:Depends}, scummvm-data, ${misc:Depends} -Suggests: fluidsynth | timidity, beneath-a-steel-sky, flight-of-the-amazon-queen +Depends: ${misc:Depends}, ${shlibs:Depends}, scummvm-data (= ${source:Version}) +Suggests: fluidsynth | timidity + ,beneath-a-steel-sky + ,drascula + ,flight-of-the-amazon-queen + ,lure-of-the-temptress +Replaces: scummvm-data (<< 1.5.0-1) +Breaks: scummvm-data (<< 1.5.0-1) Description: engine for several graphical adventure games ScummVM is a `virtual machine' for several classic graphical point-and-click adventure games. It is designed to run Adventure Soft's @@ -21,11 +51,13 @@ Description: engine for several graphical adventure games list at <http://www.scummvm.org/compatibility.php> for a full list of supported games. . - The game data of two games compatible with ScummVM is included in Debian. + The game data of four games compatible with ScummVM is included in Debian. These are: . - - Beneath a Steel Sky (package name: beneath-a-steel-sky) - - Flight of the Amazon Queen (package name: flight-of-the-amazon-queen) + - Beneath a Steel Sky (package: beneath-a-steel-sky) + - Drascula: The Vampire Strikes Back (package: drascula) + - Flight of the Amazon Queen (package: flight-of-the-amazon-queen) + - Lure of the Temptress (package: lure-of-the-temptress) . To actually make use of ScummVM, you'll have to install one of these, or obtain the proprietary game data for another supported game from somewhere @@ -33,7 +65,8 @@ Description: engine for several graphical adventure games Package: scummvm-data Architecture: all -Depends: ${shlibs:Depends},${misc:Depends} +Built-Using: ${my:Built-Using} +Depends: ${misc:Depends} Replaces: scummvm (<< 1.0.0-3) Description: engine for several graphical adventure games (data files) ScummVM is a `virtual machine' for several classic graphical @@ -45,11 +78,13 @@ Description: engine for several graphical adventure games (data files) list at <http://www.scummvm.org/compatibility.php> for a full list of supported games. . - The game data of two games compatible with ScummVM is included in Debian. + The game data of four games compatible with ScummVM is included in Debian. These are: . - - Beneath a Steel Sky (package name: beneath-a-steel-sky) - - Flight of the Amazon Queen (package name: flight-of-the-amazon-queen) + - Beneath a Steel Sky (package: beneath-a-steel-sky) + - Drascula: The Vampire Strikes Back (package: drascula) + - Flight of the Amazon Queen (package: flight-of-the-amazon-queen) + - Lure of the Temptress (package: lure-of-the-temptress) . To actually make use of ScummVM, you'll have to install one of these, or obtain the proprietary game data for another supported game from somewhere diff --git a/dists/debian/copyright b/dists/debian/copyright index 0123b2886c..bd2068aa1a 100644 --- a/dists/debian/copyright +++ b/dists/debian/copyright @@ -1,41 +1,373 @@ -ScummVM was debianized by Bastien Nocera <hadess@hadess.net> the 5th Apr 2002. -It was adopted by Tore Anderson <tore@linpro.no> the 4th Oct 2002, -then adopted by David Weinehall <tao@debian.org> the 30th Jan 2006, -then adopted by the Debian Games Team by Moritz Muehlenhoff <jmm@debian.org> - -It was downloaded from <http://www.scummvm.org/>. - -Upstream Authors: see `/usr/share/doc/scummvm/AUTHORS'. - -ScummVM is Copyright © 2002-2017 The ScummVM Team - - This program is free software; you can redistribute it and/or modify it - under the terms of the GNU General Public License as published by the - Free Software Foundation; either version 2, or (at your option) any - later version. - - On Debian GNU/Linux systems, the complete text of the GNU General - Public License can be found in `/usr/share/common-licenses/GPL'. - -This copyright also applies to the Debian-related build scripts. - -Some parts of ScummVM (the mt32 softsynth code) is covered by a more -permissive BSD-style license: - - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. +Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ +Upstream-Name: ScummVM +Source: http://www.scummvm.org/ +Comment: + ScummVM was debianized by Bastien Nocera <hadess@hadess.net> the 5th Apr 2002. + It was adopted by Tore Anderson <tore@linpro.no> the 4th Oct 2002, + then adopted by David Weinehall <tao@debian.org> the 30th Jan 2006, + then adopted by the Debian Games Team by Moritz Muehlenhoff <jmm@debian.org> +Files-Excluded: + gui/themes/fonts/topaz + gui/themes/fonts/Arial* + */*/*/*/*.o* + */*/*/*.dll + +Files: * +Copyright: + 2001-2016 The ScummVM Project + The ScummVM Team + 2002-2011 The DOSBox Team + 1994-1998 Revolution Software Ltd. + 2001-2004 Andrea Mazzoleni + 2003-2005 Andreas 'Sprawl' Karlsso + 2002-2008 Jurgen 'SumthinWicked' Braam + 2003-2014 Lars 'AnotherGuest' Persso + 2013-2014 Fedor Strizhniou + 1990-2012 Neil Dodwell + 1995-1997 Presto Studios, Inc. + and others listed in COPYRIGHT file +License: GPL-2+ +Comment: + See list of copyright holders in "/usr/share/doc/scummvm/COPYRIGHT". + See list of upstream authors in "/usr/share/doc/scummvm/AUTHORS". + +Files: audio/softsynth/mt32/* +Copyright: 2003-2006,2008-2009,2011-2014 Dean Beeler + 2003-2006,2008-2009,2011-2014 Jerome Fisher + 2011-2014 Sergey V. Mikayev +License: LGPL-2.1+ + +Files: backends/platform/ds/arm9/source/fat/* +Copyright: Michael Chisholm <chishm@hotmail.com> +License: MC-custom + This software is completely free. No warranty is provided. + If you use it, please give me credit and email me about your + project at chishm@hotmail.com + +Files: backends/platform/ds/arm9/source/fat/io_m3_common.* + backends/platform/ds/arm9/source/fat/io_njsd.* + backends/platform/ds/arm9/source/fat/io_sd_* +Copyright: 2006 Michael "Chishm" Chisholm +License: BSD-3-clause + Redistribution and use in source and binary forms, with or without modification, + are permitted provided that the following conditions are met: + . + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation and/or + other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products derived + from this software without specific prior written permission. + . + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Files: backends/platform/ds/arm9/source/interrupt.s + backends/platform/ds/arm9/source/keys.cpp +Copyright: 2005 Dave Murphy (WinterMute) +License: BSD-3-clause~dm + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any + damages arising from the use of this software. + . + Permission is granted to anyone to use this software for any + purpose, including commercial applications, and to alter it and + redistribute it freely, subject to the following restrictions: + 1. The origin of this software must not be misrepresented; you + must not claim that you wrote the original software. If you use + this software in a product, an acknowledgment in the product + documentation would be appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and + must not be misrepresented as being the original software. + 3. This notice may not be removed or altered from any source + distribution. + +Files: + engines/pegasus/interaction.cpp +Copyright: + 2001-2016 The ScummVM Team + 1995-1997 Presto Studios, Inc. +License: GPL-2+ + +Files: engines/sword25/util/lua_* +Copyright: + 2001-2016 The ScummVM Team + 2004 Ben Sunshine-Hill +License: GPL-2+ +Comment: + This code is heavily based on the Pluto code base. + Copyright (C) 2004 by Ben Sunshine-Hill, and released into the public + domain. People making use of this software as part of an application + are politely requested to email the author at sneftel@gmail.com + with a brief description of the application, primarily to satisfy his + curiosity. + . + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY + CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +Files: engines/sword25/util/lua/* +Copyright: 1994-2008 Lua.org, PUC-Rio. +License: Expat + +Files: engines/wintermute/utils/convert_utf.* +Copyright: 2001-2004 Unicode, Inc. +License: unicode + This source code is provided as is by Unicode, Inc. No claims are + made as to fitness for any particular purpose. No warranties of any + kind are expressed or implied. The recipient agrees to determine + applicability of information provided. If this file has been + purchased on magnetic or optical media from Unicode, Inc., the + sole remedy for any claim will be exchange of defective media + within 90 days of receipt. + . + Limitations on Rights to Redistribute This Code + . + Unicode, Inc. hereby grants the right to freely use the information + supplied in this file in the creation of products supporting the + Unicode Standard, and to make copies of this file in any form + for internal or external distribution as long as this notice + remains attached. + +Files: engines/wintermute/utils/crc.* +Copyright: 2000 Michael Barr +License: public-domain-crc + This software is placed into + the public domain and may be used for any purpose. However, this + notice must not be changed or removed and no warranty is either + expressed or implied by its publication or distribution. + +Files: + engines/wage/combat.cpp + engines/wage/design.cpp + engines/wage/design.h + engines/wage/dialog.cpp + engines/wage/dialog.h + engines/wage/entities.cpp + engines/wage/entities.h + engines/wage/gui-console.cpp + engines/wage/gui.cpp + engines/wage/gui.h + engines/wage/randomhat.cpp + engines/wage/randomhat.h + engines/wage/saveload.cpp + engines/wage/script.cpp + engines/wage/script.h + engines/wage/sound.cpp + engines/wage/sound.h + engines/wage/util.cpp + engines/wage/wage.cpp + engines/wage/wage.h + engines/wage/world.cpp + engines/wage/world.h +Copyright: + 2001-2016 The ScummVM Project + 2009 Alexei Svitkine, Eugene Sandulenko +License: GPL-2+ and Expat + +Files: + graphics/nine_patch.cpp + graphics/nine_patch.h +Copyright: + 2001-2016 The ScummVM Project + 2011 Matthew Leverton +License: GPL-2+ and Expat + +Files: gui/themes/fonts/Free*.ttf + gui/themes/scummmodern/Free*.ttf +Copyright: 2002-2009 Free Software Foundation. +License: GPL-3+ + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + . + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + . + The complete text of the GNU General Public License can be found + in "/usr/share/common-licenses/GPL-3". + +Files: gui/themes/fonts/clR6x12*.bdf +Copyright: 1989 Dale Schumacher <dal@syntel.mn.org> +License: MIT-like + Permission to use, copy, modify, and distribute this software and + its documentation for any purpose and without fee is hereby + granted, provided that the above copyright notice appear in all + copies and that both that copyright notice and this permission + notice appear in supporting documentation, and that the name of + Dale Schumacher not be used in advertising or publicity pertaining to + distribution of the software without specific, written prior + permission. Dale Schumacher makes no representations about the + suitability of this software for any purpose. It is provided "as + is" without express or implied warranty. + +Files: gui/themes/fonts/fixed5x8*.bdf +Copyright: not-applicable +License: public-domain + Public domain font. Share and enjoy. + +Files: gui/themes/fonts/helv*.bdf +Copyright: 1984-1989,1994 Adobe Systems Incorporated. + 1988,1994 Digital Equipment Corporation. +License: MIT-Adobe-DEC + Adobe is a trademark of Adobe Systems Incorporated which may be + registered in certain jurisdictions. + Permission to use these trademarks is hereby granted only in + association with the images described in this file. + . + Permission to use, copy, modify, distribute and sell this software + and its documentation for any purpose and without fee is hereby + granted, provided that the above copyright notices appear in all + copies and that both those copyright notices and this permission + notice appear in supporting documentation, and that the names of + Adobe Systems and Digital Equipment Corporation not be used in + advertising or publicity pertaining to distribution of the software + without specific, written prior permission. Adobe Systems and + Digital Equipment Corporation make no representations about the + suitability of this software for any purpose. It is provided "as + is" without express or implied warranty. + +Files: graphics/yuv_to_rgb.cpp +Copyright: 2001-2012 The ScummVM Project +License: GPL-2+ +Comment: portions copyright as below + The YUV to RGB conversion code is derived from SDL's YUV overlay code, which + in turn appears to be derived from mpeg_play. The following copyright + notices have been included in accordance with the original license. Please + note that the term "software" in this context only applies to the + buildLookup() and plotYUV*() functions below. + . + Copyright (c) 1995 The Regents of the University of California. + All rights reserved. + . + Permission to use, copy, modify, and distribute this software and its + documentation for any purpose, without fee, and without written agreement is + hereby granted, provided that the above copyright notice and the following + two paragraphs appear in all copies of this software. + . + IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF + CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + . + THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO + PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. + . + Copyright (c) 1995 Erik Corry + All rights reserved. + . + Permission to use, copy, modify, and distribute this software and its + documentation for any purpose, without fee, and without written agreement is + hereby granted, provided that the above copyright notice and the following + two paragraphs appear in all copies of this software. + . + IN NO EVENT SHALL ERIK CORRY BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, + SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OF + THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF ERIK CORRY HAS BEEN ADVISED + OF THE POSSIBILITY OF SUCH DAMAGE. + . + ERIK CORRY SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A + PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS" + BASIS, AND ERIK CORRY HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, + UPDATES, ENHANCEMENTS, OR MODIFICATIONS. + . + Portions of this software Copyright (c) 1995 Brown University. + All rights reserved. + . + Permission to use, copy, modify, and distribute this software and its + documentation for any purpose, without fee, and without written agreement + is hereby granted, provided that the above copyright notice and the + following two paragraphs appear in all copies of this software. + . + IN NO EVENT SHALL BROWN UNIVERSITY BE LIABLE TO ANY PARTY FOR + DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT + OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF BROWN + UNIVERSITY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + . + BROWN UNIVERSITY SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A + PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS" + BASIS, AND BROWN UNIVERSITY HAS NO OBLIGATION TO PROVIDE MAINTENANCE, + SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. + +Files: test/cxxtest/* +Copyright: 2008 Sandia Corporation +License: LGPL-2.1+ + +Files: debian/* +Copyright: 2002 Bastien Nocera <hadess@hadess.net> + 2003,2006-2008 David Weinehall <tao@debian.org> + 2012-2016 Dmitry Smirnov <onlyjob@debian.org> + 2009-2012 Moritz Muehlenhoff <jmm@debian.org> + 2002-2005 Tore Anderson <tore@linpro.no> +License: GPL-2+ + +License: GPL-2+ + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 2 of the License, or + (at your option) any later version. + . + This package is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + . + The complete text of the GNU General Public License version 2 + can be found in `/usr/share/common-licenses/GPL-2'. + +License: LGPL-2.1+ + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + . + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + . + On Debian systems, the complete text of the GNU Library General Public License + can be found in the file `/usr/share/common-licenses/LGPL-2.1'. + +License: Expat + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + . + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + . + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. +Comment: + This license also known as "MIT/X11 (BSD like)" or "MIT" however FSF + consider "MIT" labelling ambiguous and copyright-format specification + recommend to label such license as "Expat". diff --git a/dists/debian/gbp.conf b/dists/debian/gbp.conf new file mode 100644 index 0000000000..964373b02a --- /dev/null +++ b/dists/debian/gbp.conf @@ -0,0 +1,11 @@ +[buildpackage] +force-create = True +overlay = True +export-dir = ../build-area/ + +[dch] +id-length = 0 + +[import-orig] +pristine-tar = False +merge = False diff --git a/dists/debian/rules b/dists/debian/rules index bf91ca37aa..4b91a47e3e 100755 --- a/dists/debian/rules +++ b/dists/debian/rules @@ -1,14 +1,69 @@ #!/usr/bin/make -f +# Uncomment this to turn on verbose mode. +#export DH_VERBOSE=1 + +export DEB_BUILD_MAINT_OPTIONS=hardening=+all + +# #827145: +# When building for i386 on an amd64 system/kernel, the host +# architecture is misdetected as x86_64, which causes USE_NASM to be +# unset and prevents the object files hq2x_i386.o and hq3x_i386.o from +# being built. +# This is fixed by passing the host architecture explicitely to +# configure. +DEB_HOST_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_HOST_GNU_TYPE) + %: - dh $@ + dh $@ --parallel --max-parallel=4 --with autotools_dev -override_dh_auto_configure: +ifeq ($(DEB_BUILD_ARCH_OS),hurd) +OPTARGS:= --disable-alsa +endif ifeq ($(DEB_BUILD_ARCH_OS),kfreebsd) - ./configure --prefix=/usr --datadir=/usr/share/scummvm --enable-release --disable-alsa -else - ./configure --prefix=/usr --datadir=/usr/share/scummvm --enable-release +OPTARGS:= --disable-alsa endif +override_dh_auto_clean: + ##718164 "FTBFS: Makefile:87: *** You need to run ./configure before you can run make". + [ -f config.mk ] || touch config.mk + dh_auto_clean + +override_dh_auto_configure: + ./configure \ + --host=$(DEB_HOST_GNU_TYPE) \ + --datadir=/usr/share/scummvm \ + --disable-eventrecorder \ + --enable-release \ + --enable-verbose-build \ + --prefix=/usr $(OPTARGS) + +FPATH=gui/themes/scummmodern +override_dh_auto_build: + ## replacing bundled fonts... + for F in $(FPATH)/Free*.ttf; do cp -v /usr/share/fonts/truetype/freefont/$$(basename $${F}) $(FPATH)/ ;done + ## re-compressing "modern" theme... + cd $(FPATH) && zip -9 -X ../scummmodern.zip -r . + ## re-compressing "classic" theme... + cd gui/themes/scummclassic && zip -9 -X ../scummclassic.zip -r . + ## build executable(s)... + dh_auto_build + +override_dh_installchangelogs: + dh_installchangelogs NEWS + +override_dh_gencontrol: + dh_gencontrol -- -Vmy:Built-Using="$(foreach pkg,fonts-freefont-ttf,$(word 2,$(shell dpkg --status $(pkg) | grep Source)) (=$(word 2,$(shell dpkg --status $(pkg) | grep Version))),)" +# get-orig-source +PKD = $(abspath $(dir $(MAKEFILE_LIST))) +PKG = $(word 2,$(shell dpkg-parsechangelog -l$(PKD)/changelog | grep ^Source)) +VER ?= $(shell dpkg-parsechangelog -l$(PKD)/changelog | perl -ne 'print $$1 if m{^Version:\s*([\d\.]+)}') +DTYPE := +dfsg +.PHONY: get-orig-source +get-orig-source: $(PKG)_$(VER)$(DTYPE).orig.tar.xz + @ +$(PKG)_$(VER)$(DTYPE).orig.tar.xz: + @echo "# Downloading..." + uscan --noconf --verbose --rename --destdir=$(CURDIR) --check-dirname-level=0 --force-download --download-version $(VER) $(PKD) diff --git a/dists/debian/scummvm-data.install b/dists/debian/scummvm-data.install index c77aefbc0a..613913e8a8 100644 --- a/dists/debian/scummvm-data.install +++ b/dists/debian/scummvm-data.install @@ -1,5 +1,3 @@ -icons/scummvm.xpm usr/share/icons -icons/scummvm.svg usr/share/icons -dists/scummvm.desktop usr/share/applications -gui/themes/scummmodern.zip usr/share/scummvm -dists/pred.dic usr/share/scummvm +usr/share/scummvm/* +usr/share/pixmaps/*.xpm +icons/scummvm.svg /usr/share/icons/hicolor/scalable/apps/ diff --git a/dists/debian/scummvm.dirs b/dists/debian/scummvm.dirs index 6b05c7ace8..465f3a3d81 100644 --- a/dists/debian/scummvm.dirs +++ b/dists/debian/scummvm.dirs @@ -1,5 +1,2 @@ usr/games usr/share/man/man6 -usr/share/icons -usr/share/scummvm -usr/share/applications diff --git a/dists/debian/scummvm.docs b/dists/debian/scummvm.docs index c73c810363..f34db31d52 100644 --- a/dists/debian/scummvm.docs +++ b/dists/debian/scummvm.docs @@ -2,4 +2,3 @@ AUTHORS COPYRIGHT README TODO -NEWS diff --git a/dists/debian/scummvm.install b/dists/debian/scummvm.install index 457a89cfaa..838c30419f 100644 --- a/dists/debian/scummvm.install +++ b/dists/debian/scummvm.install @@ -1,2 +1,2 @@ scummvm usr/games - +dists/scummvm.desktop usr/share/applications diff --git a/dists/debian/source/format b/dists/debian/source/format new file mode 100644 index 0000000000..163aaf8d82 --- /dev/null +++ b/dists/debian/source/format @@ -0,0 +1 @@ +3.0 (quilt) diff --git a/dists/debian/source/options b/dists/debian/source/options new file mode 100644 index 0000000000..628961cb39 --- /dev/null +++ b/dists/debian/source/options @@ -0,0 +1,4 @@ +compression = "xz" + +# ignore changes on replaced (unbundled) fonts +extend-diff-ignore = "(^|/)gui/themes/scummmodern/[^/]+\.ttf$" diff --git a/dists/debian/watch b/dists/debian/watch new file mode 100644 index 0000000000..13b3749cef --- /dev/null +++ b/dists/debian/watch @@ -0,0 +1,17 @@ +# uscan(1) configuration file. +version=4 + +opts="\ +pgpmode=none,\ +repacksuffix=+dfsg,\ +repack,compression=xz,\ +dversionmangle=s/\+dfsg\d*//,\ +" http://scummvm.org/downloads/ .*/scummvm-([0-9.]+)\.tar\.(?:xz|bz2|gz) + +opts="\ +pgpmode=none,\ +repacksuffix=+dfsg,\ +repack,compression=xz,\ +dversionmangle=s/\+dfsg\d*//,\ +" https://github.com/scummvm/scummvm/releases \ + .*/archive/v?\.?(\d[\d\.]+)\.tar\.gz diff --git a/dists/engine-data/kyra.dat b/dists/engine-data/kyra.dat Binary files differindex 4dcfb0c380..81f96e7831 100644 --- a/dists/engine-data/kyra.dat +++ b/dists/engine-data/kyra.dat diff --git a/dists/gph/README-GPH b/dists/gph/README-GPH index f1588b3e38..55136e5352 100644 --- a/dists/gph/README-GPH +++ b/dists/gph/README-GPH @@ -1,4 +1,4 @@ -ScummVM 1.10.0git - GPH DEVICE SPECIFIC README +ScummVM 2.0.0git - GPH DEVICE SPECIFIC README ------------------------------------------------------------------------ diff --git a/dists/gph/scummvm.ini b/dists/gph/scummvm.ini index 392eccf29b..339554d9ee 100644 --- a/dists/gph/scummvm.ini +++ b/dists/gph/scummvm.ini @@ -1,5 +1,5 @@ [info] -name="ScummVM 1.10.0git" +name="ScummVM 2.0.0git" path="/scummvm/scummvm.gpe" icon="/scummvm/scummvm.png" title="/scummvm/scummvmb.png" diff --git a/dists/ios7/Info.plist b/dists/ios7/Info.plist index 3684ade28d..6cc5f6ede9 100644 --- a/dists/ios7/Info.plist +++ b/dists/ios7/Info.plist @@ -19,11 +19,11 @@ <key>CFBundlePackageType</key> <string>APPL</string> <key>CFBundleShortVersionString</key> - <string>1.10.0git</string> + <string>2.0.0git</string> <key>CFBundleSignature</key> <string>????</string> <key>CFBundleVersion</key> - <string>1.10.0git</string> + <string>2.0.0git</string> <key>UIApplicationExitsOnSuspend</key> <false/> <key>UIDeviceFamily</key> diff --git a/dists/iphone/Info.plist b/dists/iphone/Info.plist index 491f3af3ac..a757eb645f 100644 --- a/dists/iphone/Info.plist +++ b/dists/iphone/Info.plist @@ -15,11 +15,11 @@ <key>CFBundlePackageType</key> <string>APPL</string> <key>CFBundleShortVersionString</key> - <string>1.10.0git</string> + <string>2.0.0git</string> <key>CFBundleSignature</key> <string>????</string> <key>CFBundleVersion</key> - <string>1.10.0git</string> + <string>2.0.0git</string> <key>CFBundleIconFile</key> <string>icon.png</string> <key>CFBundleIconFiles</key> diff --git a/dists/irix/scummvm.spec b/dists/irix/scummvm.spec index 9b218ff988..3e121d8a82 100644 --- a/dists/irix/scummvm.spec +++ b/dists/irix/scummvm.spec @@ -1,5 +1,5 @@ product scummvm - id "ScummVM 1.10.0git" + id "ScummVM 2.0.0git" image sw id "software" version 18 diff --git a/dists/macosx/Info.plist b/dists/macosx/Info.plist index ab0bf4db27..ffeb9dd569 100644 --- a/dists/macosx/Info.plist +++ b/dists/macosx/Info.plist @@ -9,7 +9,7 @@ <key>CFBundleExecutable</key> <string>scummvm</string> <key>CFBundleGetInfoString</key> - <string>1.10.0git, Copyright 2001-2017 The ScummVM Team</string> + <string>2.0.0git, Copyright 2001-2017 The ScummVM Team</string> <key>CFBundleIconFile</key> <string>scummvm.icns</string> <key>CFBundleIdentifier</key> @@ -45,9 +45,9 @@ <key>CFBundlePackageType</key> <string>APPL</string> <key>CFBundleShortVersionString</key> - <string>1.10.0git</string> + <string>2.0.0git</string> <key>CFBundleVersion</key> - <string>1.10.0git</string> + <string>2.0.0git</string> <key>NSHumanReadableCopyright</key> <string>Copyright 2001-2017 The ScummVM Team</string> <key>NSPrincipalClass</key> diff --git a/dists/macosx/dockplugin/Info.plist b/dists/macosx/dockplugin/Info.plist index dc2a4fda45..7f51ef4d4a 100644 --- a/dists/macosx/dockplugin/Info.plist +++ b/dists/macosx/dockplugin/Info.plist @@ -15,9 +15,9 @@ <key>CFBundlePackageType</key> <string>BNDL</string> <key>CFBundleShortVersionString</key> - <string>1.10.0git</string> + <string>2.0.0git</string> <key>CFBundleVersion</key> - <string>1.10.0git</string> + <string>2.0.0git</string> <key>NSHumanReadableCopyright</key> <string>Copyright 2001-2017 The ScummVM Team</string> <key>NSPrincipalClass</key> diff --git a/dists/openpandora/PXML.xml b/dists/openpandora/PXML.xml index e6ec51c281..b728e9201b 100644 --- a/dists/openpandora/PXML.xml +++ b/dists/openpandora/PXML.xml @@ -4,11 +4,11 @@ <package id="scummvm.djwillis.0001"> <author name="DJWillis" website="http://www.scummvm.org/"/> <!-- version type can be alpha, beta or release, set to release in branch --> - <version major="1" minor="10" release="0" build="1" type="release"/> + <version major="2" minor="0" release="0" build="1" type="release"/> <!-- Both title and titles are needed --> - <title lang="en_US">ScummVM 1.10.0git</title> + <title lang="en_US">ScummVM 2.0.0git</title> <titles> - <title lang="en_US">ScummVM 1.10.0git</title> + <title lang="en_US">ScummVM 2.0.0git</title> </titles> <descriptions> <description lang="en_US"> @@ -25,7 +25,7 @@ <exec command="./runscummvm.sh"/> <author name="DJWillis" website="http://www.scummvm.org/"/> <!-- version type can be alpha, beta or release, set to release in branch --> - <version major="1" minor="10" release="0" build="1" type="release"/> + <version major="2" minor="0" release="0" build="1" type="release"/> <!-- Both title and titles are needed --> <title lang="en_US">ScummVM</title> <titles> diff --git a/dists/openpandora/README-OPENPANDORA b/dists/openpandora/README-OPENPANDORA index d5f6c473df..daa3197146 100644 --- a/dists/openpandora/README-OPENPANDORA +++ b/dists/openpandora/README-OPENPANDORA @@ -1,4 +1,4 @@ -ScummVM 1.10.0git - OPENPANDORA SPECIFIC README +ScummVM 2.0.0git - OPENPANDORA SPECIFIC README ------------------------------------------------------------------------ Please refer to the: diff --git a/dists/openpandora/README-PND.txt b/dists/openpandora/README-PND.txt index 369ce669a9..0a1f4435e6 100644 --- a/dists/openpandora/README-PND.txt +++ b/dists/openpandora/README-PND.txt @@ -1,4 +1,4 @@ -ScummVM 1.10.0git - OPENPANDORA README - HOW TO INSTALL +ScummVM 2.0.0git - OPENPANDORA README - HOW TO INSTALL ------------------------------------------------------------------------ Please refer to the: diff --git a/dists/openpandora/index.html b/dists/openpandora/index.html index efececaed5..6c241bdf8a 100644 --- a/dists/openpandora/index.html +++ b/dists/openpandora/index.html @@ -5,7 +5,7 @@ </h3> <h4> - <p>ScummVM 1.10.0git: OpenPandora Specific Documentation</p> + <p>ScummVM 2.0.0git: OpenPandora Specific Documentation</p> </h4> <A href="docs/README-OPENPANDORA">ScummVM OpenPandora README</a><br/> @@ -13,7 +13,7 @@ <A href="http://wiki.scummvm.org/index.php/OpenPandora">ScummVM OpenPandora WiKi</a><br/> <h4> - <p>ScummVM 1.10.0git: General Documentation</p> + <p>ScummVM 2.0.0git: General Documentation</p> </h4> <A href="http://www.scummvm.org/">ScummVM website</a><br/> diff --git a/dists/redhat/README b/dists/redhat/README index d1cef06632..04a9ab3bc1 100644 --- a/dists/redhat/README +++ b/dists/redhat/README @@ -1,34 +1,35 @@ How to build an RPM: -Note: the following assumes that the RPM topdir is /usr/src/redhat . -If you have set a different topdir in /usr/lib/rpm/macros or ~/.rpmmacros, -adapt the below instructions where necessary. +0) Install dependencies: +This assumes Fedora 24 or higher. + +dnf install gcc-c++ make git libmad-devel desktop-file-utils libogg-devel libvorbis-devel flac-devel zlib-devel nasm SDL2-devel freetype-devel fluidsynth-devel libtheora-devel libpng-devel libjpeg-turbo-devel alsa-lib-devel wxGTK3-devel boost-devel rpm-build 1) Collect sources: -Place scummvm-%{version}.tar.bz2 and libmad-0.15.1b.tar.bz2 -in /usr/src/redhat/SOURCES . -If you have a different version of libmad, put the correct version -numbers in the .spec file. +Place scummvm-%{version}.tar.bz2, scummvm-tools-%{version}.tar.bz2, +faad2-2.8.6.tar.gz, libmpeg2-0.5.1.tar.gz in ~/rpmbuild/SOURCES . + +This assumes that the RPM topdir is ~/rpmbuild/ . If you have set a different +topdir, adapt appropriately. -Place scummvm.spec in /usr/src/redhat/SPECS . +faad2 is available at https://sourceforge.net/projects/faac/files/faad2-src/faad2-2.8.0/faad2-2.8.6.tar.gz/download +libmpeg2 at http://libmpeg2.sourceforge.net/files/libmpeg2-0.5.1.tar.gz -2) Build the rpm: -Change directory to /usr/src/redhat/SPECS . +2) Build the rpms: + Run: rpmbuild -ba scummvm.spec +rpmbuild -ba scummvm-tools.spec -The RPM should now be built and placed in /usr/src/redhat/RPMS/i386 and -the source RPM in /usr/src/redhat/SRPMS - +The RPMs should now be built and placed in ~/rpmbuild/RPMS/x86_64 and +the source RPMs in ~/rpmbuild/SRPMS -Note: libmad is statically linked into the scummvm binary -because Fedora does not carry a libmad package, so I did not -want to make the scummvm package depend on them. -You can get libmad from http://www.underbit.com/products/mad/ . +Note: faad2 and libmpeg2 are statically linked into the scummvm binary +because Fedora do not carry the corresponding packages. diff --git a/dists/redhat/scummvm-tools.spec b/dists/redhat/scummvm-tools.spec index a9ca021a65..8a87b95ffb 100644 --- a/dists/redhat/scummvm-tools.spec +++ b/dists/redhat/scummvm-tools.spec @@ -7,7 +7,7 @@ # Prologue information #------------------------------------------------------------------------------ Name : scummvm-tools -Version : 1.10.0git +Version : 2.0.0git Release : 1 Summary : ScummVM-related tools Group : Interpreters @@ -16,11 +16,18 @@ License : GPL Url : http://www.scummvm.org Source : %{name}-%{version}.tar.bz2 -Source1 : libmad-0.15.1b.tar.bz2 BuildRoot : %{_tmppath}/%{name}-%{version}-root -BuildRequires : zlib-devel -BuildRequires : wxGTK-devel +BuildRequires: zlib-devel +BuildRequires: wxGTK3-devel +BuildRequires: libmad-devel +BuildRequires: libvorbis-devel +BuildRequires: libogg-devel +BuildRequires: libpng-devel +BuildRequires: boost-devel +BuildRequires: flac-devel +BuildRequires: freetype-devel + #------------------------------------------------------------------------------ # Description #------------------------------------------------------------------------------ @@ -31,19 +38,20 @@ Tools for compressing ScummVM datafiles and other related tools. # install scripts #------------------------------------------------------------------------------ %prep -%setup -q -a 1 -n scummvm-tools-%{version} +%setup -q -n scummvm-tools-%{version} %build -(cd libmad-0.15.1b; grep -v 'force-\(mem\|addr\)' configure > configure.new; mv -f configure.new configure; chmod 700 configure; ./configure --enable-static --disable-shared --prefix=%{_builddir}/scummvm-%{version}/tmp; make; make install) -./configure --with-mad-prefix=%{_builddir}/scummvm-%{version}/tmp -make +./configure --prefix=%{_prefix} +make %{_smp_mflags} %install -install -m755 -d %{buildroot}%{_bindir} -install -m755 -D create_sjisfnt %{buildroot}%{_bindir} -install -m755 -D scummvm-tools{,-cli} %{buildroot}%{_bindir} -install -m755 -D de{cine,gob,kyra,riven,scumm,sword2} %{buildroot}%{_bindir} -install -m755 -D {construct,extract}_mohawk %{buildroot}%{_bindir} +make DESTDIR=%{buildroot} install +rm %{buildroot}%{_datadir}/scummvm-tools/detaillogo.jpg +rm %{buildroot}%{_datadir}/scummvm-tools/logo.jpg +rm %{buildroot}%{_datadir}/scummvm-tools/scummvmtools.icns +rm %{buildroot}%{_datadir}/scummvm-tools/scummvmtools.ico +rm %{buildroot}%{_datadir}/scummvm-tools/scummvmtools_128.png +rm %{buildroot}%{_datadir}/scummvm-tools/tile.gif %clean rm -Rf ${RPM_BUILD_ROOT} @@ -53,11 +61,7 @@ rm -Rf ${RPM_BUILD_ROOT} #------------------------------------------------------------------------------ %files %doc README COPYING -%attr(0755,root,root)%{_bindir}/scummvm* -%attr(0755,root,root)%{_bindir}/create_sjisfnt -%attr(0755,root,root)%{_bindir}/de* -%attr(0755,root,root)%{_bindir}/extract_* -%attr(0755,root,root)%{_bindir}/construct_* +%attr(0755,root,root)%{_bindir}/* #------------------------------------------------------------------------------ # Change Log diff --git a/dists/redhat/scummvm-tools.spec.in b/dists/redhat/scummvm-tools.spec.in index f64871486d..373b85f693 100644 --- a/dists/redhat/scummvm-tools.spec.in +++ b/dists/redhat/scummvm-tools.spec.in @@ -16,11 +16,18 @@ License : GPL Url : http://www.scummvm.org Source : %{name}-%{version}.tar.bz2 -Source1 : libmad-0.15.1b.tar.bz2 BuildRoot : %{_tmppath}/%{name}-%{version}-root -BuildRequires : zlib-devel -BuildRequires : wxGTK-devel +BuildRequires: zlib-devel +BuildRequires: wxGTK3-devel +BuildRequires: libmad-devel +BuildRequires: libvorbis-devel +BuildRequires: libogg-devel +BuildRequires: libpng-devel +BuildRequires: boost-devel +BuildRequires: flac-devel +BuildRequires: freetype-devel + #------------------------------------------------------------------------------ # Description #------------------------------------------------------------------------------ @@ -31,19 +38,20 @@ Tools for compressing ScummVM datafiles and other related tools. # install scripts #------------------------------------------------------------------------------ %prep -%setup -q -a 1 -n scummvm-tools-%{version} +%setup -q -n scummvm-tools-%{version} %build -(cd libmad-0.15.1b; grep -v 'force-\(mem\|addr\)' configure > configure.new; mv -f configure.new configure; chmod 700 configure; ./configure --enable-static --disable-shared --prefix=%{_builddir}/scummvm-%{version}/tmp; make; make install) -./configure --with-mad-prefix=%{_builddir}/scummvm-%{version}/tmp -make +./configure --prefix=%{_prefix} +make %{_smp_mflags} %install -install -m755 -d %{buildroot}%{_bindir} -install -m755 -D create_sjisfnt %{buildroot}%{_bindir} -install -m755 -D scummvm-tools{,-cli} %{buildroot}%{_bindir} -install -m755 -D de{cine,gob,kyra,riven,scumm,sword2} %{buildroot}%{_bindir} -install -m755 -D {construct,extract}_mohawk %{buildroot}%{_bindir} +make DESTDIR=%{buildroot} install +rm %{buildroot}%{_datadir}/scummvm-tools/detaillogo.jpg +rm %{buildroot}%{_datadir}/scummvm-tools/logo.jpg +rm %{buildroot}%{_datadir}/scummvm-tools/scummvmtools.icns +rm %{buildroot}%{_datadir}/scummvm-tools/scummvmtools.ico +rm %{buildroot}%{_datadir}/scummvm-tools/scummvmtools_128.png +rm %{buildroot}%{_datadir}/scummvm-tools/tile.gif %clean rm -Rf ${RPM_BUILD_ROOT} @@ -53,15 +61,15 @@ rm -Rf ${RPM_BUILD_ROOT} #------------------------------------------------------------------------------ %files %doc README COPYING -%attr(0755,root,root)%{_bindir}/scummvm* -%attr(0755,root,root)%{_bindir}/create_sjisfnt -%attr(0755,root,root)%{_bindir}/de* -%attr(0755,root,root)%{_bindir}/extract_* -%attr(0755,root,root)%{_bindir}/construct_* +%attr(0755,root,root)%{_bindir}/* #------------------------------------------------------------------------------ # Change Log #------------------------------------------------------------------------------ %changelog +* Thu Nov 23 2017 (2.0.0) + - remove own libmad since this is now in Fedora itself +* Sat Apr 03 2010 (1.2.0) + - include libmad * Sat Mar 26 2005 (0.7.1) - first tools package diff --git a/dists/redhat/scummvm.spec b/dists/redhat/scummvm.spec index b2b821a189..eb84b6e324 100644 --- a/dists/redhat/scummvm.spec +++ b/dists/redhat/scummvm.spec @@ -7,7 +7,7 @@ # Prologue information #------------------------------------------------------------------------------ Name : scummvm -Version : 1.10.0git +Version : 2.0.0git Release : 1 Summary : Graphic adventure game interpreter Group : Interpreters @@ -16,10 +16,8 @@ License : GPL Url : http://www.scummvm.org Source : %{name}-%{version}.tar.bz2 -Source1 : libmad-0.15.1b.tar.bz2 -Source2 : faad2-2.7.tar.bz2 -Source3 : mpeg2dec-0.5.1.tar.bz2 -Patch0 : libmad-0.15.1b-fixes-1.patch +Source1 : faad2-2.8.6.tar.gz +Source2 : libmpeg2-0.5.1.tar.gz BuildRoot : %{_tmppath}/%{name}-%{version}-root BuildRequires: desktop-file-utils @@ -34,6 +32,8 @@ BuildRequires: fluidsynth-devel BuildRequires: libtheora-devel BuildRequires: libpng-devel BuildRequires: libjpeg-turbo-devel +BuildRequires: alsa-lib-devel +BuildRequires: libmad-devel #------------------------------------------------------------------------------ # Description @@ -52,41 +52,18 @@ games) and many more. See http://www.scummvm.org for a full compatibility list. # install scripts #------------------------------------------------------------------------------ %prep -%setup -q -a 1 -a 2 -a 3 -n scummvm-%{version} -%patch0 -p0 +%setup -q -a 1 -a 2 -n scummvm-%{version} mkdir tmp %build -(cd libmad-0.15.1b; ./configure --enable-static --disable-shared --prefix=%{_builddir}/scummvm-%{version}/tmp; make; make install) -(cd faad2-2.7; ./configure --enable-static --disable-shared --prefix=%{_builddir}/scummvm-%{version}/tmp; make; make install) -(cd mpeg2dec-0.5.1; ./configure --enable-static --disable-shared --prefix=%{_builddir}/scummvm-%{version}/tmp; make; make install) -./configure --with-mad-prefix=%{_builddir}/scummvm-%{version}/tmp --with-faad-prefix=%{_builddir}/scummvm-%{version}/tmp --with-mpeg2-prefix=%{_builddir}/scummvm-%{version}/tmp --prefix=%{_prefix} --enable-release -make +(cd faad2-2.8.6; ./configure --enable-static --disable-shared --prefix=%{_builddir}/scummvm-%{version}/tmp; make %{_smp_mflags} -C libfaad all install) +(cd libmpeg2-0.5.1; ./configure --enable-static --disable-shared --prefix=%{_builddir}/scummvm-%{version}/tmp; make -C libmpeg2 all install; make -C include all install) +./configure --with-faad-prefix=%{_builddir}/scummvm-%{version}/tmp --with-mpeg2-prefix=%{_builddir}/scummvm-%{version}/tmp --prefix=%{_prefix} --enable-release +make %{_smp_mflags} %install -install -m755 -D scummvm %{buildroot}%{_bindir}/scummvm -install -m644 -D dists/scummvm.6 %{buildroot}%{_mandir}/man6/scummvm.6 -install -m644 -D icons/scummvm.xpm %{buildroot}%{_datadir}/pixmaps/scummvm.xpm -install -m644 -D icons/scummvm.svg %{buildroot}%{_datadir}/icons/hicolor/scalable/apps/scummvm.svg +make DESTDIR=%{buildroot} install install -m644 -D dists/redhat/scummvm48.png %{buildroot}%{_datadir}/icons/hicolor/48x48/apps/scummvm.png -install -m644 -D gui/themes/scummclassic.zip %{buildroot}%{_datadir}/scummvm/scummclassic.zip -install -m644 -D gui/themes/scummmodern.zip %{buildroot}%{_datadir}/scummvm/scummmodern.zip -install -m644 -D gui/themes/translations.dat %{buildroot}%{_datadir}/scummvm/translations.dat -install -m644 -D dists/pred.dic %{buildroot}%{_datadir}/scummvm/pred.dic -install -m644 -D dists/engine-data/kyra.dat %{buildroot}%{_datadir}/scummvm/kyra.dat -install -m644 -D dists/engine-data/lure.dat %{buildroot}%{_datadir}/scummvm/lure.dat -install -m644 -D dists/engine-data/queen.tbl %{buildroot}%{_datadir}/scummvm/queen.tbl -install -m644 -D dists/engine-data/sky.cpt %{buildroot}%{_datadir}/scummvm/sky.cpt -install -m644 -D dists/engine-data/drascula.dat %{buildroot}%{_datadir}/scummvm/drascula.dat -install -m644 -D dists/engine-data/teenagent.dat %{buildroot}%{_datadir}/scummvm/teenagent.dat -install -m644 -D dists/engine-data/titanic.dat %{buildroot}%{_datadir}/scummvm/titanic.dat -install -m644 -D dists/engine-data/hugo.dat %{buildroot}%{_datadir}/scummvm/hugo.dat -install -m644 -D dists/engine-data/tony.dat %{buildroot}%{_datadir}/scummvm/tony.dat -install -m644 -D dists/engine-data/toon.dat %{buildroot}%{_datadir}/scummvm/toon.dat -install -m644 -D dists/engine-data/wintermute.zip %{buildroot}%{_datadir}/scummvm/wintermute.zip -install -m644 -D dists/engine-data/neverhood.dat %{buildroot}%{_datadir}/scummvm/neverhood.dat -install -m644 -D dists/engine-data/mort.dat %{buildroot}%{_datadir}/scummvm/mort.dat -install -m644 -D dists/engine-data/access.dat %{buildroot}%{_datadir}/scummvm/access.dat desktop-file-install --vendor scummvm --dir=%{buildroot}/%{_datadir}/applications dists/scummvm.desktop %clean @@ -115,29 +92,19 @@ fi %{_datadir}/pixmaps/scummvm.xpm %{_datadir}/icons/hicolor/48x48/apps/scummvm.png %{_datadir}/icons/hicolor/scalable/apps/scummvm.svg -%{_datadir}/scummvm/scumm*.zip -%{_datadir}/scummvm/translations.dat -%{_datadir}/scummvm/pred.dic -%{_datadir}/scummvm/kyra.dat -%{_datadir}/scummvm/queen.tbl -%{_datadir}/scummvm/sky.cpt -%{_datadir}/scummvm/lure.dat -%{_datadir}/scummvm/drascula.dat -%{_datadir}/scummvm/teenagent.dat -%{_datadir}/scummvm/titanic.dat -%{_datadir}/scummvm/hugo.dat -%{_datadir}/scummvm/tony.dat -%{_datadir}/scummvm/toon.dat -%{_datadir}/scummvm/wintermute.zip -%{_datadir}/scummvm/neverhood.dat -%{_datadir}/scummvm/mort.dat -%{_datadir}/scummvm/access.dat +%{_datadir}/appdata/scummvm.appdata.xml +%{_datadir}/scummvm/* %{_mandir}/man6/scummvm.6* #------------------------------------------------------------------------------ # Change Log #------------------------------------------------------------------------------ %changelog +* Thu Nov 23 2017 (2.0.0) + - remove own libmad since this is now in Fedora itself +* Fri Jul 11 2014 (1.8.0) + - add libmad build patch + - re-add mpeg2dec * Thu Dec 29 2011 (1.4.0-2) - include libfaad2 * Fri Sep 17 2010 (1.2.0) diff --git a/dists/redhat/scummvm.spec.in b/dists/redhat/scummvm.spec.in index 6c3f7ebaa8..7fbedd77f7 100644 --- a/dists/redhat/scummvm.spec.in +++ b/dists/redhat/scummvm.spec.in @@ -16,10 +16,8 @@ License : GPL Url : http://www.scummvm.org Source : %{name}-%{version}.tar.bz2 -Source1 : libmad-0.15.1b.tar.bz2 -Source2 : faad2-2.7.tar.bz2 -Source3 : mpeg2dec-0.5.1.tar.bz2 -Patch0 : libmad-0.15.1b-fixes-1.patch +Source1 : faad2-2.8.6.tar.gz +Source2 : libmpeg2-0.5.1.tar.gz BuildRoot : %{_tmppath}/%{name}-%{version}-root BuildRequires: desktop-file-utils @@ -34,6 +32,8 @@ BuildRequires: fluidsynth-devel BuildRequires: libtheora-devel BuildRequires: libpng-devel BuildRequires: libjpeg-turbo-devel +BuildRequires: alsa-lib-devel +BuildRequires: libmad-devel #------------------------------------------------------------------------------ # Description @@ -52,41 +52,18 @@ games) and many more. See http://www.scummvm.org for a full compatibility list. # install scripts #------------------------------------------------------------------------------ %prep -%setup -q -a 1 -a 2 -a 3 -n scummvm-%{version} -%patch0 -p0 +%setup -q -a 1 -a 2 -n scummvm-%{version} mkdir tmp %build -(cd libmad-0.15.1b; ./configure --enable-static --disable-shared --prefix=%{_builddir}/scummvm-%{version}/tmp; make; make install) -(cd faad2-2.7; ./configure --enable-static --disable-shared --prefix=%{_builddir}/scummvm-%{version}/tmp; make; make install) -(cd mpeg2dec-0.5.1; ./configure --enable-static --disable-shared --prefix=%{_builddir}/scummvm-%{version}/tmp; make; make install) -./configure --with-mad-prefix=%{_builddir}/scummvm-%{version}/tmp --with-faad-prefix=%{_builddir}/scummvm-%{version}/tmp --with-mpeg2-prefix=%{_builddir}/scummvm-%{version}/tmp --prefix=%{_prefix} --enable-release -make +(cd faad2-2.8.6; ./configure --enable-static --disable-shared --prefix=%{_builddir}/scummvm-%{version}/tmp; make %{_smp_mflags} -C libfaad all install) +(cd libmpeg2-0.5.1; ./configure --enable-static --disable-shared --prefix=%{_builddir}/scummvm-%{version}/tmp; make -C libmpeg2 all install; make -C include all install) +./configure --with-faad-prefix=%{_builddir}/scummvm-%{version}/tmp --with-mpeg2-prefix=%{_builddir}/scummvm-%{version}/tmp --prefix=%{_prefix} --enable-release +make %{_smp_mflags} %install -install -m755 -D scummvm %{buildroot}%{_bindir}/scummvm -install -m644 -D dists/scummvm.6 %{buildroot}%{_mandir}/man6/scummvm.6 -install -m644 -D icons/scummvm.xpm %{buildroot}%{_datadir}/pixmaps/scummvm.xpm -install -m644 -D icons/scummvm.svg %{buildroot}%{_datadir}/icons/hicolor/scalable/apps/scummvm.svg +make DESTDIR=%{buildroot} install install -m644 -D dists/redhat/scummvm48.png %{buildroot}%{_datadir}/icons/hicolor/48x48/apps/scummvm.png -install -m644 -D gui/themes/scummclassic.zip %{buildroot}%{_datadir}/scummvm/scummclassic.zip -install -m644 -D gui/themes/scummmodern.zip %{buildroot}%{_datadir}/scummvm/scummmodern.zip -install -m644 -D gui/themes/translations.dat %{buildroot}%{_datadir}/scummvm/translations.dat -install -m644 -D dists/pred.dic %{buildroot}%{_datadir}/scummvm/pred.dic -install -m644 -D dists/engine-data/kyra.dat %{buildroot}%{_datadir}/scummvm/kyra.dat -install -m644 -D dists/engine-data/lure.dat %{buildroot}%{_datadir}/scummvm/lure.dat -install -m644 -D dists/engine-data/queen.tbl %{buildroot}%{_datadir}/scummvm/queen.tbl -install -m644 -D dists/engine-data/sky.cpt %{buildroot}%{_datadir}/scummvm/sky.cpt -install -m644 -D dists/engine-data/drascula.dat %{buildroot}%{_datadir}/scummvm/drascula.dat -install -m644 -D dists/engine-data/teenagent.dat %{buildroot}%{_datadir}/scummvm/teenagent.dat -install -m644 -D dists/engine-data/titanic.dat %{buildroot}%{_datadir}/scummvm/titanic.dat -install -m644 -D dists/engine-data/hugo.dat %{buildroot}%{_datadir}/scummvm/hugo.dat -install -m644 -D dists/engine-data/tony.dat %{buildroot}%{_datadir}/scummvm/tony.dat -install -m644 -D dists/engine-data/toon.dat %{buildroot}%{_datadir}/scummvm/toon.dat -install -m644 -D dists/engine-data/wintermute.zip %{buildroot}%{_datadir}/scummvm/wintermute.zip -install -m644 -D dists/engine-data/neverhood.dat %{buildroot}%{_datadir}/scummvm/neverhood.dat -install -m644 -D dists/engine-data/mort.dat %{buildroot}%{_datadir}/scummvm/mort.dat -install -m644 -D dists/engine-data/access.dat %{buildroot}%{_datadir}/scummvm/access.dat desktop-file-install --vendor scummvm --dir=%{buildroot}/%{_datadir}/applications dists/scummvm.desktop %clean @@ -115,29 +92,19 @@ fi %{_datadir}/pixmaps/scummvm.xpm %{_datadir}/icons/hicolor/48x48/apps/scummvm.png %{_datadir}/icons/hicolor/scalable/apps/scummvm.svg -%{_datadir}/scummvm/scumm*.zip -%{_datadir}/scummvm/translations.dat -%{_datadir}/scummvm/pred.dic -%{_datadir}/scummvm/kyra.dat -%{_datadir}/scummvm/queen.tbl -%{_datadir}/scummvm/sky.cpt -%{_datadir}/scummvm/lure.dat -%{_datadir}/scummvm/drascula.dat -%{_datadir}/scummvm/teenagent.dat -%{_datadir}/scummvm/titanic.dat -%{_datadir}/scummvm/hugo.dat -%{_datadir}/scummvm/tony.dat -%{_datadir}/scummvm/toon.dat -%{_datadir}/scummvm/wintermute.zip -%{_datadir}/scummvm/neverhood.dat -%{_datadir}/scummvm/mort.dat -%{_datadir}/scummvm/access.dat +%{_datadir}/appdata/scummvm.appdata.xml +%{_datadir}/scummvm/* %{_mandir}/man6/scummvm.6* #------------------------------------------------------------------------------ # Change Log #------------------------------------------------------------------------------ %changelog +* Thu Nov 23 2017 (2.0.0) + - remove own libmad since this is now in Fedora itself +* Fri Jul 11 2014 (1.8.0) + - add libmad build patch + - re-add mpeg2dec * Thu Dec 29 2011 (1.4.0-2) - include libfaad2 * Fri Sep 17 2010 (1.2.0) diff --git a/dists/riscos/!Boot,feb b/dists/riscos/!Boot,feb index b286b449fa..fc6cb78b3c 100644 --- a/dists/riscos/!Boot,feb +++ b/dists/riscos/!Boot,feb @@ -5,4 +5,4 @@ Set ScummVM$Title "ScummVM" Set ScummVM$Description "Play certain classic graphical point-and-click adventure games" Set ScummVM$Publisher "ScummVM Developers" Set ScummVM$Web "http://www.scummvm.org/" -Set ScummVM$Version "1.10.0git" +Set ScummVM$Version "2.0.0git" diff --git a/dists/scummvm.rc b/dists/scummvm.rc index e926382aa9..89c1905026 100644 --- a/dists/scummvm.rc +++ b/dists/scummvm.rc @@ -73,8 +73,8 @@ pred.dic FILE "dists/pred.dic" #endif VS_VERSION_INFO VERSIONINFO - FILEVERSION 1,10,0,0 - PRODUCTVERSION 1,10,0,0 + FILEVERSION 2,0,0,0 + PRODUCTVERSION 2,0,0,0 FILEFLAGSMASK VS_FFI_FILEFLAGSMASK #ifdef _DEBUG FILEFLAGS VS_FF_DEBUG @@ -92,13 +92,13 @@ BEGIN VALUE "Comments", "Look! A three headed monkey (TM)! .. Nice use of the TM!\0" VALUE "CompanyName", "scummvm.org\0" VALUE "FileDescription", "http://www.scummvm.org/\0" - VALUE "FileVersion", "1.10.0git\0" + VALUE "FileVersion", "2.0.0git\0" VALUE "InternalName", "scummvm\0" VALUE "LegalCopyright", "Copyright © 2001-2017 The ScummVM Team\0" VALUE "LegalTrademarks", "'SCUMM', and all SCUMM games are a TM of LucasArts. Simon The Sorcerer is a TM of AdventureSoft. Beneath a Steel Sky and Broken Sword are a TM of Revolution. Flight of the Amazon Queen is a TM of John Passfield and Steve Stamatiadis. \0" VALUE "OriginalFilename", "scummvm.exe\0" VALUE "ProductName", "ScummVM\0" - VALUE "ProductVersion", "1.10.0git\0" + VALUE "ProductVersion", "2.0.0git\0" END END diff --git a/dists/slackware/scummvm.SlackBuild b/dists/slackware/scummvm.SlackBuild index 527f567a57..4a20d01fab 100755 --- a/dists/slackware/scummvm.SlackBuild +++ b/dists/slackware/scummvm.SlackBuild @@ -9,7 +9,7 @@ if [ "$TMP" = "" ]; then fi PKG=$TMP/package-scummvm -VERSION=1.10.0git +VERSION=2.0.0git ARCH=i486 BUILD=1 diff --git a/dists/wii/meta.xml b/dists/wii/meta.xml index 1cd2e36e42..e961fd16f9 100644 --- a/dists/wii/meta.xml +++ b/dists/wii/meta.xml @@ -2,7 +2,7 @@ <app version="1"> <name>ScummVM</name> <coder>The ScummVM Team</coder> - <version>1.10.0git@REVISION@</version> + <version>2.0.0git@REVISION@</version> <release_date>@TIMESTAMP@</release_date> <short_description>Point & Click Adventures</short_description> <long_description>ScummVM is a program which allows you to run certain classic graphical point-and-click adventure games, provided you already have their data files. The clever part about this: ScummVM just replaces the executables shipped with the games, allowing you to play them on systems for which they were never designed! diff --git a/doc/de/NEUES b/doc/de/NEUES index da0fcff4c1..05a769e4ce 100644 --- a/doc/de/NEUES +++ b/doc/de/NEUES @@ -2,7 +2,7 @@ Umfangreichere Informationen über die Änderungen des aktuellen experimentellen Programmcodes finden Sie auf Englisch unter: https://github.com/scummvm/scummvm/commits/ -1.10.0 (DD.MM.YYYY) +2.0.0 (DD.MM.YYYY) Neue Spiele: - Unterstützung für Full Pipe hinzugefügt. - Unterstützung für Hi-Res Adventure #3: Cranston Manor hinzugefügt. diff --git a/engines/drascula/animation.cpp b/engines/drascula/animation.cpp index c89e5ff738..d9ff90748b 100644 --- a/engines/drascula/animation.cpp +++ b/engines/drascula/animation.cpp @@ -1293,7 +1293,7 @@ void DrasculaEngine::animation_5_5(){ } flags[6] = 1; - updateVisible(); + updateVisible(); // sets visible[1] to 1 and visible[2] to 0 pause(12); loadPic(96, frontSurface); diff --git a/engines/drascula/rooms.cpp b/engines/drascula/rooms.cpp index f99f00c8e7..8263483666 100644 --- a/engines/drascula/rooms.cpp +++ b/engines/drascula/rooms.cpp @@ -618,7 +618,7 @@ bool DrasculaEngine::room_22(int fl) { finishSound(); selectVerb(kVerbNone); removeObject(22); - updateVisible(); + updateVisible(); // sets visible[2] to 0 and visible[1] to 1 trackProtagonist = 3; talk(499); talk(500); @@ -825,7 +825,7 @@ bool DrasculaEngine::room_35(int fl) { visible[1] = 0; flags[15] = 1; flags[17] = 1; - updateVisible(); + updateVisible(); // sets visible[1] to 0 and visible[3] to 1 } else if (pickedObject == kVerbPick && fl == 149) { pickObject(13); visible[3] = 0; @@ -872,7 +872,7 @@ bool DrasculaEngine::room_53(int fl) { } else if (pickedObject == 16 && fl == 121) { flags[2] = 1; selectVerb(kVerbNone); - updateVisible(); + updateVisible(); // sets visible[3] to 0 pickedObject = kVerbMove; } else if (pickedObject == 16) { // Wall plug in chapter 5 @@ -906,7 +906,7 @@ bool DrasculaEngine::room_54(int fl) { pickObject(8); flags[13] = 1; talk_mus(10); - updateVisible(); + updateVisible(); // sets visible[3] to 0 } else if (pickedObject == 10 && fl == 119) { pause(4); talk(436); @@ -922,7 +922,7 @@ bool DrasculaEngine::room_55(int fl) { if (pickedObject == kVerbPick && fl == 122) { pickObject(12); flags[8] = 1; - updateVisible(); + updateVisible(); // sets visible[1] to 0 } else if (fl == 206) { playSound(11); animate("det.bin", 17); @@ -947,7 +947,7 @@ bool DrasculaEngine::room_56(int fl) { bool DrasculaEngine::room_58(int fl) { if (pickedObject == kVerbMove && fl == 103) { flags[8] = 1; - updateVisible(); + updateVisible(); // sets isDoor[1] to 1 } else { hasAnswer = 0; } @@ -1665,9 +1665,9 @@ void DrasculaEngine::enterRoom(int roomIndex) { char fileName[20]; sprintf(fileName, "%d.ald", roomIndex); - int soc, l, martin = 0, objIsExit = 0; + int soc, l, overridenWidth = 0, objIsExit = 0; float chiquez = 0, pequegnez = 0; - char pant1[20], pant2[20], pant3[20], pant4[20]; + char surfaceName[20]; int palLevel = 0; _hasName = false; @@ -1685,22 +1685,42 @@ void DrasculaEngine::enterRoom(int roomIndex) { p.parseString(roomDisk); p.parseInt(palLevel); - if (currentChapter == 2) - p.parseInt(martin); + if (currentChapter == 2) { + p.parseInt(overridenWidth); + + if (overridenWidth != 0) { + curWidth = overridenWidth; + p.parseInt(curHeight); + p.parseInt(feetHeight); + p.parseInt(stepX); + p.parseInt(stepY); + + p.parseString(surfaceName); + loadPic(surfaceName, frontSurface); - if (currentChapter == 2 && martin != 0) { - curWidth = martin; - p.parseInt(curHeight); - p.parseInt(feetHeight); - p.parseInt(stepX); - p.parseInt(stepY); + p.parseString(surfaceName); + loadPic(surfaceName, extraSurface); - p.parseString(pant1); - p.parseString(pant2); - p.parseString(pant3); - p.parseString(pant4); + p.parseString(surfaceName); + // unused + + p.parseString(surfaceName); + loadPic(surfaceName, backSurface); + + strcpy(menuBackground, surfaceName); + } else { + curWidth = CHARACTER_WIDTH; + curHeight = CHARACTER_HEIGHT; + feetHeight = FEET_HEIGHT; + stepX = STEP_X; + stepY = STEP_Y; + + loadPic(97, extraSurface); + loadPic(96, frontSurface); + loadPic(99, backSurface); - strcpy(menuBackground, pant4); + strcpy(menuBackground, "99.alg"); + } } p.parseInt(numRoomObjs); @@ -1745,27 +1765,6 @@ void DrasculaEngine::enterRoom(int roomIndex) { // no need to delete the stream, since TextResourceParser takes ownership // delete stream; - if (currentChapter == 2 && martin != 0) { - loadPic(pant2, extraSurface); - loadPic(pant1, frontSurface); - loadPic(pant4, backSurface); - } - - if (currentChapter == 2) { - if (martin == 0) { - stepX = STEP_X; - stepY = STEP_Y; - curHeight = CHARACTER_HEIGHT; - curWidth = CHARACTER_WIDTH; - feetHeight = FEET_HEIGHT; - loadPic(97, extraSurface); - loadPic(96, frontSurface); - loadPic(99, backSurface); - - strcpy(menuBackground, "99.alg"); - } - } - for (l = 0; l < numRoomObjs; l++) { if (objectNum[l] == objExit) objIsExit = l; diff --git a/engines/fullpipe/gfx.h b/engines/fullpipe/gfx.h index a7c0c765e2..a2c83c8131 100644 --- a/engines/fullpipe/gfx.h +++ b/engines/fullpipe/gfx.h @@ -214,7 +214,7 @@ public: virtual bool load(MfcArchive &file); void addPictureObject(PictureObject *pct); - BigPicture *getBigPicture(int x, int y) { return _bigPictureArray[y * _bigPictureYDim + x]; } + BigPicture *getBigPicture(int x, int y) { return _bigPictureArray[y * _bigPictureXDim + x]; } }; struct ShadowsItem { diff --git a/engines/fullpipe/inventory.cpp b/engines/fullpipe/inventory.cpp index 7cf8fe9712..1a3c234ef6 100644 --- a/engines/fullpipe/inventory.cpp +++ b/engines/fullpipe/inventory.cpp @@ -95,7 +95,9 @@ bool Inventory2::loadPartial(MfcArchive &file) { // Inventory2_SerializePartiall int numInvs = file.readUint32LE(); for (int i = 0; i < numInvs; i++) { - _inventoryItems.push_back(InventoryItem(file.readUint16LE(), file.readUint16LE())); + int16 itemId = file.readUint16LE(); + int16 count = file.readUint16LE(); + _inventoryItems.push_back(InventoryItem(itemId, count)); } return true; diff --git a/engines/mads/nebular/nebular_scenes3.cpp b/engines/mads/nebular/nebular_scenes3.cpp index 7323ee893d..6c6afa9a61 100644 --- a/engines/mads/nebular/nebular_scenes3.cpp +++ b/engines/mads/nebular/nebular_scenes3.cpp @@ -881,6 +881,9 @@ void Scene307::step() { _guardTime = 0; } else if ((_prisonerTimer > 300) && (_game._screenObjects._inputMode != kInputConversation) && (_scene->_animation[0] == nullptr) && !_activePrisonerFl) { if (!_globals[kMetBuddyBeast]) { + if (_prisonerMessageId == -1) + _prisonerMessageId = 0x104; + int idx = _scene->_kernelMessages.add(Common::Point(5, 51), 0xFDFC, 0, 81, 120, _game.getQuote(_prisonerMessageId)); _scene->_kernelMessages.setQuoted(idx, 4, true); _prisonerMessageId++; diff --git a/engines/prince/detection.cpp b/engines/prince/detection.cpp index 8e7fbd7197..a8fa305332 100644 --- a/engines/prince/detection.cpp +++ b/engines/prince/detection.cpp @@ -88,6 +88,18 @@ static const PrinceGameDescription gameDescriptions[] = { { { "prince", + "Galador", + AD_ENTRY1s("databank.ptc", "a67b55730f3d7064921bd2a59e1063a3", 3892982), + Common::RU_RUS, + Common::kPlatformWindows, + ADGF_TESTING, + GUIO1(GUIO_NONE) + }, + kPrinceDataPL + }, + { + { + "prince", "The Prince and the Coward", { {"databank.ptc", 0, "5fa03833177331214ec1354761b1d2ee", 3565031}, diff --git a/engines/sci/decompressor.cpp b/engines/sci/decompressor.cpp index ca2298e67e..158119fe86 100644 --- a/engines/sci/decompressor.cpp +++ b/engines/sci/decompressor.cpp @@ -89,7 +89,7 @@ uint32 Decompressor::getBitsLSB(int n) { // fetching more data to buffer if needed if (_nBits < n) fetchBitsLSB(); - uint32 ret = (_dwBits & ~((~0) << n)); + uint32 ret = (_dwBits & ~(0xFFFFFFFFU << n)); _dwBits >>= n; _nBits -= n; return ret; diff --git a/engines/sci/detection_tables.h b/engines/sci/detection_tables.h index 9d55f02345..4b91ec158c 100644 --- a/engines/sci/detection_tables.h +++ b/engines/sci/detection_tables.h @@ -736,7 +736,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resource.map", 0, "372d059f75856afa6d73dd84cbb8913d", 10783}, {"resource.000", 0, "69b7516962510f780d38519cc15fcc7c", 13022630}, AD_LISTEND}, - Common::EN_ANY, Common::kPlatformDOS, ADGF_TESTING, GUIO_GK1_FLOPPY }, + Common::EN_ANY, Common::kPlatformDOS, ADGF_NO_FLAGS, GUIO_GK1_FLOPPY }, // Gabriel Knight - English DOS Floppy (supplied my markcoolio in bug report #2723777) // SCI interpreter version 2.000.000 @@ -744,7 +744,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resource.map", 0, "65e8c14092e4c9b3b3538b7602c8c5ec", 10783}, {"resource.000", 0, "69b7516962510f780d38519cc15fcc7c", 13022630}, AD_LISTEND}, - Common::EN_ANY, Common::kPlatformDOS, ADGF_TESTING, GUIO_GK1_FLOPPY }, + Common::EN_ANY, Common::kPlatformDOS, ADGF_NO_FLAGS, GUIO_GK1_FLOPPY }, // Gabriel Knight - English DOS Floppy // SCI interpreter version 2.000.000, VERSION file reports "1.0\nGabriel Knight\n11/22/10:33 pm\n\x1A" @@ -752,7 +752,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resource.map", 0, "ef41df08cf2c1f680216cdbeed0f8311", 10783}, {"resource.000", 0, "69b7516962510f780d38519cc15fcc7c", 13022630}, AD_LISTEND}, - Common::EN_ANY, Common::kPlatformDOS, ADGF_TESTING, GUIO_GK1_FLOPPY }, + Common::EN_ANY, Common::kPlatformDOS, ADGF_NO_FLAGS, GUIO_GK1_FLOPPY }, // Gabriel Knight - German DOS Floppy (supplied my markcoolio in bug report #2723775) // SCI interpreter version 2.000.000 @@ -760,7 +760,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resource.map", 0, "ad6508b0296b25c07b1f58828dc33696", 10789}, {"resource.000", 0, "091cf08910780feabc56f8551b09cb36", 13077029}, AD_LISTEND}, - Common::DE_DEU, Common::kPlatformDOS, ADGF_TESTING, GUIO_GK1_FLOPPY }, + Common::DE_DEU, Common::kPlatformDOS, ADGF_NO_FLAGS, GUIO_GK1_FLOPPY }, // Gabriel Knight - French DOS Floppy (supplied my kervala in bug report #3611487) // SCI interpreter version 2.000.000 @@ -768,7 +768,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resource.map", 0, "236e36cc847cdeafdd5e5fa8cba916ed", 10801}, {"resource.000", 0, "091cf08910780feabc56f8551b09cb36", 13033072}, AD_LISTEND}, - Common::FR_FRA, Common::kPlatformDOS, ADGF_TESTING, GUIO_GK1_FLOPPY }, + Common::FR_FRA, Common::kPlatformDOS, ADGF_NO_FLAGS, GUIO_GK1_FLOPPY }, // Gabriel Knight - English DOS CD (from jvprat) // Executable scanning reports "2.000.000", VERSION file reports "01.100.000" @@ -776,7 +776,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resource.map", 0, "372d059f75856afa6d73dd84cbb8913d", 10996}, {"resource.000", 0, "69b7516962510f780d38519cc15fcc7c", 12581736}, AD_LISTEND}, - Common::EN_ANY, Common::kPlatformDOS, ADGF_CD | ADGF_TESTING, GUIO_GK1_CD_DOS }, + Common::EN_ANY, Common::kPlatformDOS, ADGF_CD, GUIO_GK1_CD_DOS }, // Gabriel Knight - English Windows CD (from jvprat) // Executable scanning reports "2.000.000", VERSION file reports "01.100.000" @@ -784,7 +784,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resource.map", 0, "372d059f75856afa6d73dd84cbb8913d", 10996}, {"resource.000", 0, "69b7516962510f780d38519cc15fcc7c", 12581736}, AD_LISTEND}, - Common::EN_ANY, Common::kPlatformWindows, ADGF_CD | ADGF_TESTING, GUIO_GK1_CD_WIN }, + Common::EN_ANY, Common::kPlatformWindows, ADGF_CD, GUIO_GK1_CD_WIN }, // Gabriel Knight - German DOS CD (from Tobis87) // SCI interpreter version 2.000.000 @@ -792,7 +792,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resource.map", 0, "a7d3e55114c65647310373cb390815ba", 11392}, {"resource.000", 0, "091cf08910780feabc56f8551b09cb36", 13400497}, AD_LISTEND}, - Common::DE_DEU, Common::kPlatformDOS, ADGF_CD | ADGF_TESTING, GUIO_GK1_CD_DOS }, + Common::DE_DEU, Common::kPlatformDOS, ADGF_CD, GUIO_GK1_CD_DOS }, // Gabriel Knight - Spanish DOS CD (from jvprat) // Executable scanning reports "2.000.000", VERSION file reports "1.000.000, April 13, 1995" @@ -800,7 +800,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resource.map", 0, "7cb6e9bba15b544ec7a635c45bde9953", 11404}, {"resource.000", 0, "091cf08910780feabc56f8551b09cb36", 13381599}, AD_LISTEND}, - Common::ES_ESP, Common::kPlatformDOS, ADGF_CD | ADGF_TESTING, GUIO_GK1_CD_DOS }, + Common::ES_ESP, Common::kPlatformDOS, ADGF_CD, GUIO_GK1_CD_DOS }, // Gabriel Knight - French DOS CD (from Hkz) // VERSION file reports "1.000.000, May 3, 1994" @@ -808,7 +808,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resource.map", 0, "55f909ba93a2515042a08d8a2da8414e", 11392}, {"resource.000", 0, "091cf08910780feabc56f8551b09cb36", 13325145}, AD_LISTEND}, - Common::FR_FRA, Common::kPlatformDOS, ADGF_CD | ADGF_TESTING, GUIO_GK1_CD_DOS }, + Common::FR_FRA, Common::kPlatformDOS, ADGF_CD, GUIO_GK1_CD_DOS }, // Gabriel Knight - Spanish Windows CD (from jvprat) // Executable scanning reports "2.000.000", VERSION file reports "1.000.000, April 13, 1995" @@ -816,7 +816,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resource.map", 0, "7cb6e9bba15b544ec7a635c45bde9953", 11404}, {"resource.000", 0, "091cf08910780feabc56f8551b09cb36", 13381599}, AD_LISTEND}, - Common::ES_ESP, Common::kPlatformWindows, ADGF_CD | ADGF_TESTING, GUIO_GK1_CD_WIN }, + Common::ES_ESP, Common::kPlatformWindows, ADGF_CD, GUIO_GK1_CD_WIN }, // Gabriel Knight - English Macintosh (Floppy!) // This version is hi-res ONLY, so it should NOT get GAMEOPTION_HIGH_RESOLUTION_GRAPHICS @@ -858,7 +858,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resource.map", 0, "e0effce11c4908f4b91838741716c83d", 1351}, {"resource.000", 0, "d04cfc7f04b6f74d13025378be49ec2b", 4640330}, AD_LISTEND}, - Common::EN_ANY, Common::kPlatformWindows, ADGF_DEMO | ADGF_TESTING, GUIO_GK2_DEMO }, + Common::EN_ANY, Common::kPlatformWindows, ADGF_DEMO, GUIO_GK2_DEMO }, // Gabriel Knight 2 - English DOS (GOG version) - ressci.* merged in ressci.000 // using Enrico Rolfi's HD/DVD installer: http://gkpatches.vogons.zetafleet.com/ @@ -866,7 +866,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resmap.000", 0, "b996fa1e57389a1e179a00a0049de1f4", 8110}, {"ressci.000", 0, "a19fc3604c6e5407abcf03d59ee87217", 168522221}, AD_LISTEND}, - Common::EN_ANY, Common::kPlatformDOS, ADGF_TESTING, GUIO_GK2 }, + Common::EN_ANY, Common::kPlatformDOS, ADGF_NO_FLAGS, GUIO_GK2 }, // Gabriel Knight 2 - English DOS (from jvprat) // Executable scanning reports "2.100.002", VERSION file reports "1.1" @@ -884,7 +884,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resmap.006", 0, "ce9359037277b7d7976da185c2fa0aad", 2977}, {"ressci.006", 0, "8e44e03890205a7be12f45aaba9644b4", 60659424}, AD_LISTEND}, - Common::EN_ANY, Common::kPlatformDOS, ADGF_TESTING, GUIO_GK2 }, + Common::EN_ANY, Common::kPlatformDOS, ADGF_NO_FLAGS, GUIO_GK2 }, // Gabriel Knight 2 - French DOS (6-CDs Sierra Originals reedition) // Executable scanning reports "2.100.002", VERSION file reports "1.0" @@ -902,7 +902,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resmap.006", 0, "11b2e722170b8c93fdaa5428e2c7676f", 3001}, {"ressci.006", 0, "4037d941aec39d2e654e20960429aefc", 60568486}, AD_LISTEND}, - Common::FR_FRA, Common::kPlatformDOS, ADGF_TESTING, GUIO_GK2 }, + Common::FR_FRA, Common::kPlatformDOS, ADGF_NO_FLAGS, GUIO_GK2 }, // Gabriel Knight 2 - German DOS/Windows (6-CDs original release, provided by m_kiewitz) // Executable scanning reports "2.100.002", VERSION file reports "1.0" @@ -920,7 +920,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resmap.005", 0, "9fe7e86d66deabfeb10760990d2b1724", 2053}, {"resmap.006", 0, "c5323f49b7ee6a2c08c4852290e351c0", 2995}, AD_LISTEND}, - Common::DE_DEU, Common::kPlatformDOS, ADGF_TESTING, GUIO_GK2 }, + Common::DE_DEU, Common::kPlatformDOS, ADGF_NO_FLAGS, GUIO_GK2 }, // Gabriel Knight 2 - English Macintosh // NOTE: This only contains disc 1 files (as well as the persistent file: @@ -1847,7 +1847,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resource.map", 0, "2be9ab94429c721af8e05c507e048a15", 18697}, {"resource.000", 0, "eb63ea3a2c2469dc2d777d351c626404", 203882535}, AD_LISTEND}, - Common::EN_ANY, Common::kPlatformWindows, ADGF_TESTING, GUIO_KQ7 }, + Common::EN_ANY, Common::kPlatformWindows, ADGF_NO_FLAGS, GUIO_KQ7 }, // King's Quest 7 - English Windows-interpreter-only (supplied by m_kiewitz) // SCI interpreter version 2.100.002, VERSION file reports "1.51" @@ -1856,7 +1856,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resource.000", 0, "eb63ea3a2c2469dc2d777d351c626404", 206626576}, {"resource.aud", 0, "c2a988a16053eb98c7b73a75139902a0", 217716879}, AD_LISTEND}, - Common::EN_ANY, Common::kPlatformWindows, ADGF_TESTING, GUIO_KQ7 }, + Common::EN_ANY, Common::kPlatformWindows, ADGF_NO_FLAGS, GUIO_KQ7 }, // King's Quest 7 - German Windows-interpreter-only (supplied by markcoolio in bug report #2727402) // SCI interpreter version 2.100.002, VERSION file reports "1.51" @@ -1866,7 +1866,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resource.000", 0, "eb63ea3a2c2469dc2d777d351c626404", 206626576}, {"resource.aud", 0, "3f17bcaf8a9ff6a6c2d4de1a2078fdcc", 258119621}, AD_LISTEND}, - Common::DE_DEU, Common::kPlatformWindows, ADGF_TESTING, GUIO_KQ7 }, + Common::DE_DEU, Common::kPlatformWindows, ADGF_NO_FLAGS, GUIO_KQ7 }, // King's Quest 7 - English Windows (from abevi) // VERSION 1.65c @@ -1874,7 +1874,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resource.000", 0, "4948e4e1506f1e1c4e1d47abfa06b7f8", 204385195}, {"resource.map", 0, "40ccafb2195301504eba2e4f4f2c7f3d", 18925}, AD_LISTEND}, - Common::EN_ANY, Common::kPlatformWindows, ADGF_TESTING, GUIO_KQ7 }, + Common::EN_ANY, Common::kPlatformWindows, ADGF_NO_FLAGS, GUIO_KQ7 }, // King's Quest 7 - German Windows (from blumentopferde in bug report Trac#9738) // VERSION 1.65c @@ -1883,7 +1883,16 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resource.000", 0, "4948e4e1506f1e1c4e1d47abfa06b7f8", 204385195}, {"resource.map", 0, "59d234e4fd61c1377f659c8479a513fb", 18925}, AD_LISTEND}, - Common::DE_DEU, Common::kPlatformWindows, ADGF_TESTING, GUIO_KQ7 }, + Common::DE_DEU, Common::kPlatformWindows, ADGF_NO_FLAGS, GUIO_KQ7 }, + + // King's Quest 7 - French Windows (from gatesbillou) + // VERSION 1.51 + {"kq7", "", { + {"resource.aud", 0, "d8b89ef2f7248c63d5810f2e49fb7255", 205546166}, + {"resource.000", 0, "eb63ea3a2c2469dc2d777d351c626404", 206626576}, + {"resource.map", 0, "838b9ff132bd6962026fee832e8a7ddb", 18697}, + AD_LISTEND}, + Common::FR_FRA, Common::kPlatformWindows, ADGF_NO_FLAGS, GUIO_KQ7 }, // King's Quest 7 - French Windows (from bgK) // VERSION 1.65c @@ -1892,7 +1901,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resource.000", 0, "4948e4e1506f1e1c4e1d47abfa06b7f8", 204385195}, {"resource.map", 0, "a134fc9138b0830d8197877c52ed7aaa", 18925}, AD_LISTEND}, - Common::FR_FRA, Common::kPlatformWindows, ADGF_TESTING, GUIO_KQ7 }, + Common::FR_FRA, Common::kPlatformWindows, ADGF_NO_FLAGS, GUIO_KQ7 }, // King's Quest 7 - English DOS (from FRG) // SCI interpreter version 2.100.002, VERSION file reports "2.00b" @@ -1908,7 +1917,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"avi/911.rbt", 0, NULL, -1}, {"avi/912.rbt", 0, NULL, -1}, AD_LISTEND}, - Common::EN_ANY, Common::kPlatformDOS, ADGF_TESTING, GUIO_KQ7 }, + Common::EN_ANY, Common::kPlatformDOS, ADGF_NO_FLAGS, GUIO_KQ7 }, // King's Quest 7 - English Windows (from FRG) // SCI interpreter version 2.100.002, VERSION file reports "2.00b" @@ -1924,7 +1933,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"avi/e208x11.avi", 0, NULL, -1}, {"avi/int08x11.avi", 0, NULL, -1}, AD_LISTEND}, - Common::EN_ANY, Common::kPlatformWindows, ADGF_TESTING, GUIO_KQ7 }, + Common::EN_ANY, Common::kPlatformWindows, ADGF_NO_FLAGS, GUIO_KQ7 }, // King's Quest 7 - Italian DOS (from dego93 on bug report Trac#9739) // VERSION file reports "2.00" @@ -1933,7 +1942,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resource.000", 0, "51c1ead1163e19a2de8f121c39df7a76", 200764100}, {"resource.map", 0, "c174fb32f045112e210373a31681d97f", 18709}, AD_LISTEND}, - Common::IT_ITA, Common::kPlatformDOS, ADGF_TESTING, GUIO_KQ7 }, + Common::IT_ITA, Common::kPlatformDOS, ADGF_NO_FLAGS, GUIO_KQ7 }, // King's Quest 7 - Italian Windows (from dego93 on bug report Trac#9739) // VERSION file reports "2.00" @@ -1942,7 +1951,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resource.000", 0, "51c1ead1163e19a2de8f121c39df7a76", 200764100}, {"resource.map", 0, "c174fb32f045112e210373a31681d97f", 18709}, AD_LISTEND}, - Common::IT_ITA, Common::kPlatformWindows, ADGF_TESTING, GUIO_KQ7 }, + Common::IT_ITA, Common::kPlatformWindows, ADGF_NO_FLAGS, GUIO_KQ7 }, // King's Quest 7 - Spanish DOS (from jvprat) // Executable scanning reports "2.100.002", VERSION file reports "2.00" @@ -1950,7 +1959,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resource.map", 0, "0b62693cbe87e3aaca3e8655a437f27f", 18709}, {"resource.000", 0, "51c1ead1163e19a2de8f121c39df7a76", 200764100}, AD_LISTEND}, - Common::ES_ESP, Common::kPlatformDOS, ADGF_TESTING, GUIO_KQ7 }, + Common::ES_ESP, Common::kPlatformDOS, ADGF_NO_FLAGS, GUIO_KQ7 }, // King's Quest 7 - Spanish Windows (from jvprat) // Executable scanning reports "2.100.002", VERSION file reports "2.00" @@ -1958,7 +1967,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resource.map", 0, "0b62693cbe87e3aaca3e8655a437f27f", 18709}, {"resource.000", 0, "51c1ead1163e19a2de8f121c39df7a76", 200764100}, AD_LISTEND}, - Common::ES_ESP, Common::kPlatformWindows, ADGF_TESTING, GUIO_KQ7 }, + Common::ES_ESP, Common::kPlatformWindows, ADGF_NO_FLAGS, GUIO_KQ7 }, // King's Quest 7 - English DOS Non-Interactive Demo // SCI interpreter version 2.100.002 @@ -1966,7 +1975,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resource.map", 0, "b44f774108d63faa1d021101221c5a54", 1690}, {"resource.000", 0, "d9659d2cf0c269c6a9dc776707f5bea0", 2433827}, AD_LISTEND}, - Common::EN_ANY, Common::kPlatformDOS, ADGF_DEMO | ADGF_TESTING, GUIO_KQ7_DEMO }, + Common::EN_ANY, Common::kPlatformDOS, ADGF_DEMO, GUIO_KQ7_DEMO }, // King's Quest 7 - English Windows Demo (from DrMcCoy) // SCI interpreter version 2.100.002 @@ -1974,7 +1983,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resource.map", 0, "38e627a37a975aea40cc72b0518b0709", 18412}, {"resource.000", 0, "bad61d50aaa64298fa57a7c6ccd3bccf", 84020382}, AD_LISTEND}, - Common::EN_ANY, Common::kPlatformWindows, ADGF_DEMO | ADGF_TESTING, GUIO_KQ7_DEMO }, + Common::EN_ANY, Common::kPlatformWindows, ADGF_DEMO, GUIO_KQ7_DEMO }, #undef GUIO_KQ7_DEMO #undef GUIO_KQ7 @@ -1985,7 +1994,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resource.000", 0, "9b1cddecd4f0720d83661ba7aed28891", 162697}, {"resource.map", 0, "93a2251fa64e729d7a7d2fe56b217c8e", 502}, AD_LISTEND}, - Common::EN_ANY, Common::kPlatformDOS, ADGF_TESTING, GUIO6(GUIO_NOSUBTITLES, GUIO_NOMUSIC, GUIO_NOSPEECH, GUIO_NOSFX, GUIO_NOMIDI, GUIO_NOLAUNCHLOAD) }, + Common::EN_ANY, Common::kPlatformDOS, ADGF_NO_FLAGS, GUIO6(GUIO_NOSUBTITLES, GUIO_NOMUSIC, GUIO_NOSPEECH, GUIO_NOSFX, GUIO_NOMIDI, GUIO_NOLAUNCHLOAD) }, #endif // ENABLE_SCI32 @@ -2692,7 +2701,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resource.map", 0, "0c0804434ea62278dd15032b1947426c", 8872}, {"resource.000", 0, "9a9f4870504444cda863dd14d077a680", 18520872}, AD_LISTEND}, - Common::EN_ANY, Common::kPlatformDOS, ADGF_TESTING, GUIO_LSL6HIRES }, + Common::EN_ANY, Common::kPlatformDOS, ADGF_NO_FLAGS, GUIO_LSL6HIRES }, // Larry 6 - German DOS CD - HIRES (provided by richiefs in bug report #2670691) // SCI interpreter version 2.100.002 @@ -2700,7 +2709,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resource.map", 0, "badfdf446ffed569a310d2c63a249421", 8896}, {"resource.000", 0, "bd944d2b06614a5b39f1586906f0ee88", 18534274}, AD_LISTEND}, - Common::DE_DEU, Common::kPlatformDOS, ADGF_TESTING, GUIO_LSL6HIRES }, + Common::DE_DEU, Common::kPlatformDOS, ADGF_NO_FLAGS, GUIO_LSL6HIRES }, // Larry 6 - French DOS CD - HIRES (provided by richiefs in bug report #2670691) // SCI interpreter version 2.100.002 @@ -2708,7 +2717,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resource.map", 0, "d184e9aa4f2d4b5670ddb3669db82cda", 8896}, {"resource.000", 0, "bd944d2b06614a5b39f1586906f0ee88", 18538987}, AD_LISTEND}, - Common::FR_FRA, Common::kPlatformDOS, ADGF_TESTING, GUIO_LSL6HIRES }, + Common::FR_FRA, Common::kPlatformDOS, ADGF_NO_FLAGS, GUIO_LSL6HIRES }, #undef GUIO_LSL6HIRES @@ -2727,7 +2736,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"ressci.000", 0, "5cc6159688b2dc03790a67c90ccc67f9", 10195878}, {"resmap.000", 0, "6a2b2811eef82e87cde91cf1de845af8", 2695}, AD_LISTEND}, - Common::EN_ANY, Common::kPlatformDOS, ADGF_DEMO | ADGF_TESTING, GUIO_LSL7_DEMO }, + Common::EN_ANY, Common::kPlatformDOS, ADGF_DEMO, GUIO_LSL7_DEMO }, // Larry 7 - English DOS CD (from spookypeanut) // SCI interpreter version 3.000.000 @@ -2735,7 +2744,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resmap.000", 0, "eae93e1b1d1ccc58b4691c371281c95d", 8188}, {"ressci.000", 0, "89353723488219e25589165d73ed663e", 66965678}, AD_LISTEND}, - Common::EN_ANY, Common::kPlatformDOS, ADGF_TESTING, GUIO_LSL7 }, + Common::EN_ANY, Common::kPlatformDOS, ADGF_NO_FLAGS, GUIO_LSL7 }, // Larry 7 - German DOS (from Tobis87) // SCI interpreter version 3.000.000 @@ -2743,7 +2752,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resmap.000", 0, "c11e6bfcfc2f2d05da47e5a7df3e9b1a", 8188}, {"ressci.000", 0, "a8c6817bb94f332ff498a71c8b47f893", 66971724}, AD_LISTEND}, - Common::DE_DEU, Common::kPlatformDOS, ADGF_TESTING, GUIO_LSL7 }, + Common::DE_DEU, Common::kPlatformDOS, ADGF_NO_FLAGS, GUIO_LSL7 }, // Larry 7 - French DOS (provided by richiefs in bug report #2670691) // SCI interpreter version 3.000.000 @@ -2751,7 +2760,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resmap.000", 0, "4407849fd52fe3efb0c30fba60cd5cd4", 8206}, {"ressci.000", 0, "dc37c3055fffbefb494ff22b145d377b", 66964472}, AD_LISTEND}, - Common::FR_FRA, Common::kPlatformDOS, ADGF_TESTING, GUIO_LSL7 }, + Common::FR_FRA, Common::kPlatformDOS, ADGF_NO_FLAGS, GUIO_LSL7 }, // Larry 7 - Italian DOS CD (from glorifindel) // SCI interpreter version 3.000.000 @@ -2759,7 +2768,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resmap.000", 0, "9852a97141f789413f29bf956052acdb", 8212}, {"ressci.000", 0, "440b9fed89590abb4e4386ed6f948ee2", 67140181}, AD_LISTEND}, - Common::IT_ITA, Common::kPlatformDOS, ADGF_TESTING, GUIO_LSL7 }, + Common::IT_ITA, Common::kPlatformDOS, ADGF_NO_FLAGS, GUIO_LSL7 }, // Larry 7 - Spanish DOS (from the Leisure Suit Larry Collection) // Executable scanning reports "3.000.000", VERSION file reports "1.0s" @@ -2767,7 +2776,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resmap.000", 0, "8f3d603e1acc834a5d598b30cdfc93f3", 8188}, {"ressci.000", 0, "32792f9bc1bf3633a88b382bb3f6e40d", 67071418}, AD_LISTEND}, - Common::ES_ESP, Common::kPlatformDOS, ADGF_TESTING, GUIO_LSL7 }, + Common::ES_ESP, Common::kPlatformDOS, ADGF_NO_FLAGS, GUIO_LSL7 }, #undef GUIO_LSL7_DEMO #undef GUIO_LSL7 @@ -2793,7 +2802,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resource.map", 0, "543124606352bfa5e07696ddf2a669be", 64}, {"resource.000", 0, "5d7714416b612463d750fb9c5690c859", 28952}, AD_LISTEND}, - Common::EN_ANY, Common::kPlatformDOS, ADGF_DEMO | ADGF_TESTING, GUIO_LIGHTHOUSE_DEMO }, + Common::EN_ANY, Common::kPlatformDOS, ADGF_DEMO, GUIO_LIGHTHOUSE_DEMO }, // Lighthouse - English Windows Demo // Executable scanning reports "3.000.000", VERSION file reports "1.00" @@ -2801,7 +2810,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resmap.000", 0, "3bdee7a16926975a4729f75cf6b80a92", 1525}, {"ressci.000", 0, "3c585827fa4a82f4c04a56a0bc52ccee", 11494351}, AD_LISTEND}, - Common::EN_ANY, Common::kPlatformDOS, ADGF_DEMO | ADGF_TESTING, GUIO_LIGHTHOUSE_DEMO }, + Common::EN_ANY, Common::kPlatformDOS, ADGF_DEMO, GUIO_LIGHTHOUSE_DEMO }, // Lighthouse - English Windows Glider Demo // Executable scanning reports "3.000.000" @@ -2809,7 +2818,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resmap.000", 0, "fca5bec5f778fc3f86d3176dc4ae6e54", 346}, {"ressci.000", 0, "896e81b6d70940c3b0696ef51cee51bc", 3300500}, AD_LISTEND}, - Common::EN_ANY, Common::kPlatformDOS, ADGF_DEMO | ADGF_TESTING, GUIO_LIGHTHOUSE_DEMO }, + Common::EN_ANY, Common::kPlatformDOS, ADGF_DEMO, GUIO_LIGHTHOUSE_DEMO }, // Lighthouse - English DOS (from jvprat) // Executable scanning reports "3.000.000", VERSION file reports "1.1" @@ -2819,7 +2828,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resmap.002", 0, "c68db5333f152fea6ca2dfc75cad8b34", 7573}, {"ressci.002", 0, "175468431a979b9f317c294ce3bc1430", 94628315}, AD_LISTEND}, - Common::EN_ANY, Common::kPlatformDOS, ADGF_TESTING, GUIO_LIGHTHOUSE }, + Common::EN_ANY, Common::kPlatformDOS, ADGF_NO_FLAGS, GUIO_LIGHTHOUSE }, // Lighthouse - Japanese DOS (from m_kiewitz) // Executable scanning reports "3.000.000", VERSION file reports "1.0C" @@ -2829,7 +2838,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resmap.002", 0, "723fc742c623d8933e5753a264324cb0", 7657}, {"ressci.002", 0, "175468431a979b9f317c294ce3bc1430", 94627469}, AD_LISTEND}, - Common::JA_JPN, Common::kPlatformDOS, ADGF_TESTING, GUIO_LIGHTHOUSE }, + Common::JA_JPN, Common::kPlatformDOS, ADGF_NO_FLAGS, GUIO_LIGHTHOUSE }, // Lighthouse - Spanish DOS (from jvprat) // Executable scanning reports "3.000.000", VERSION file reports "1.1" @@ -2839,7 +2848,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resmap.002", 0, "e7dc85884a2417e2eff9de0c63dd65fa", 7630}, {"ressci.002", 0, "3c8d627c555b0e3e4f1d9955bc0f0df4", 94631127}, AD_LISTEND}, - Common::ES_ESP, Common::kPlatformDOS, ADGF_TESTING, GUIO_LIGHTHOUSE }, + Common::ES_ESP, Common::kPlatformDOS, ADGF_NO_FLAGS, GUIO_LIGHTHOUSE }, // Lighthouse - French DOS (from bgK) // Executable scanning reports "3.000.000", VERSION file reports "1.1" @@ -2849,7 +2858,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resmap.002", 0, "703e7ab04bd358e76bc098995d71f36a", 7642}, {"ressci.002", 0, "6635764dc258b2041ca9a387e5aaab25", 115212682}, AD_LISTEND}, - Common::FR_FRA, Common::kPlatformDOS, ADGF_TESTING, GUIO_LIGHTHOUSE }, + Common::FR_FRA, Common::kPlatformDOS, ADGF_NO_FLAGS, GUIO_LIGHTHOUSE }, #undef GUIO_LIGHTHOUSE_DEMO #undef GUIO_LIGHTHOUSE @@ -2985,7 +2994,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resource.map", 0, "5159a1578c4306bfe070a3e4d8c2e1d3", 4741}, {"resource.000", 0, "1926925c95d82f0999590e93b02887c5", 15150768}, AD_LISTEND}, - Common::EN_ANY, Common::kPlatformWindows, ADGF_TESTING | ADGF_DROPPLATFORM, GUIO_MOTHERGOOSEHIRES }, + Common::EN_ANY, Common::kPlatformWindows, ADGF_DROPPLATFORM, GUIO_MOTHERGOOSEHIRES }, // Mixed-Up Mother Goose Deluxe - Multilingual Windows CD (EN/FR/DE/ES) // Executable scanning reports "2.100.002" @@ -2993,7 +3002,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resmap.000", 0, "ef611af561898dcfea87846919ebf3eb", 4969}, {"ressci.000", 0, "227685bc59d90821978d330713e44a7a", 17205800}, AD_LISTEND}, - Common::EN_ANY, Common::kPlatformWindows, ADGF_TESTING | ADGF_DROPPLATFORM, GUIO_MOTHERGOOSEHIRES }, + Common::EN_ANY, Common::kPlatformWindows, ADGF_DROPPLATFORM, GUIO_MOTHERGOOSEHIRES }, #undef GUIO_MOTHERGOOSEHIRES @@ -3038,7 +3047,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resmap.007", 0, "aa8175cfc93242af6f5e65bdceaafc0d", 7972}, //{"ressci.007", 0, "3aae6559aa1df273bc542d5ac6330d75", 25859038}, AD_LISTEND}, - Common::EN_ANY, Common::kPlatformDOS, ADGF_TESTING, GUIO_PHANTASMAGORIA }, + Common::EN_ANY, Common::kPlatformDOS, ADGF_NO_FLAGS, GUIO_PHANTASMAGORIA }, // Phantasmagoria - English DOS (from jvprat) // Executable scanning reports "2.100.002", VERSION file reports "1.100.000UK" @@ -3058,7 +3067,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resmap.007", 0, "afbd16ea77869a720afa1c5371de107d", 7972}, //{"ressci.007", 0, "3aae6559aa1df273bc542d5ac6330d75", 25859038}, AD_LISTEND}, - Common::EN_ANY, Common::kPlatformDOS, ADGF_TESTING, GUIO_PHANTASMAGORIA }, + Common::EN_ANY, Common::kPlatformDOS, ADGF_NO_FLAGS, GUIO_PHANTASMAGORIA }, // Phantasmagoria - German DOS/Windows // Windows executable scanning reports "unknown" - "Sep 19 1995 09:39:48" @@ -3081,7 +3090,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resmap.007", 0, "06309b8043aecb85bd507b15d16cb544", 7984}, //{"ressci.007", 0, "3aae6559aa1df273bc542d5ac6330d75", 26898681}, AD_LISTEND}, - Common::DE_DEU, Common::kPlatformDOS, ADGF_TESTING, GUIO_PHANTASMAGORIA }, + Common::DE_DEU, Common::kPlatformDOS, ADGF_NO_FLAGS, GUIO_PHANTASMAGORIA }, // Phantasmagoria - French DOS // Supplied by Kervala in bug #6574 @@ -3100,7 +3109,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"ressci.006", 0, "3aae6559aa1df273bc542d5ac6330d75", 85415107}, {"resmap.007", 0, "5633960bc106c39ca91d2d8fce18fd2d", 7984}, AD_LISTEND}, - Common::FR_FRA, Common::kPlatformDOS, ADGF_TESTING, GUIO_PHANTASMAGORIA }, + Common::FR_FRA, Common::kPlatformDOS, ADGF_NO_FLAGS, GUIO_PHANTASMAGORIA }, // Phantasmagoria - French DOS (supplied by enclume in bug report Trac#9910) // VERSION file reports "1.100.000" @@ -3119,7 +3128,26 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"ressci.006", 0, "3aae6559aa1df273bc542d5ac6330d75", 81076474}, {"resmap.007", 0, "3d15c24fe60e8f7171480bfaa2d566bc", 7984}, AD_LISTEND}, - Common::FR_FRA, Common::kPlatformDOS, ADGF_TESTING, GUIO_PHANTASMAGORIA }, + Common::FR_FRA, Common::kPlatformDOS, ADGF_NO_FLAGS, GUIO_PHANTASMAGORIA }, + + // Phantasmagoria - Italian DOS (from AlessioR) + // VERSION file reports "1.100.000" + {"phantasmagoria", "", { + {"resmap.001", 0, "fba09c05c18e526fa35b30c33c12b150", 11524}, + {"ressci.001", 0, "3aae6559aa1df273bc542d5ac6330d75", 65804446}, + {"resmap.002", 0, "1cf3e74510804f1c87f83e25b61042cb", 12064}, + {"ressci.002", 0, "3aae6559aa1df273bc542d5ac6330d75", 71473087}, + {"resmap.003", 0, "6c22d9ff6a9d3803d4d7435b8bf6b2f7", 12340}, + {"ressci.003", 0, "3aae6559aa1df273bc542d5ac6330d75", 73552108}, + {"resmap.004", 0, "73e22dc5e0f5134a7e70ebe6d52735b9", 12562}, + {"ressci.004", 0, "3aae6559aa1df273bc542d5ac6330d75", 75712511}, + {"resmap.005", 0, "197bc2be5412bea7b8aaf9a65a2da92f", 12616}, + {"ressci.005", 0, "3aae6559aa1df273bc542d5ac6330d75", 78868623}, + {"resmap.006", 0, "673ca2dda6f9337459de768f52f63c7e", 12538}, + {"ressci.006", 0, "3aae6559aa1df273bc542d5ac6330d75", 77794567}, + {"resmap.007", 0, "7d6abc183155daf93e0452a58ddf16dc", 7984}, + AD_LISTEND}, + Common::IT_ITA, Common::kPlatformDOS, ADGF_NO_FLAGS, GUIO_PHANTASMAGORIA }, // Phantasmagoria - English DOS Demo // Executable scanning reports "2.100.002" @@ -3127,7 +3155,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resmap.001", 0, "416138651ea828219ca454cae18341a3", 11518}, {"ressci.001", 0, "3aae6559aa1df273bc542d5ac6330d75", 65844612}, AD_LISTEND}, - Common::EN_ANY, Common::kPlatformDOS, ADGF_DEMO | ADGF_TESTING, GUIO_PHANTASMAGORIA_DEMO }, + Common::EN_ANY, Common::kPlatformDOS, ADGF_DEMO, GUIO_PHANTASMAGORIA_DEMO }, // Phantasmagoria - English DOS/Windows (GOG version) - ressci.* merged in ressci.000 // Windows executable scanning reports "2.100.002" - "Sep 19 1995 15:09:43" @@ -3138,7 +3166,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"ressci.000", 0, "cd5967f9b9586e3380645961c0765be3", 116822037}, {"resmap.000", 0, "3cafc1c6a53945c1f3babbfd6380c64c", 16468}, AD_LISTEND}, - Common::EN_ANY, Common::kPlatformDOS, ADGF_TESTING, GUIO_PHANTASMAGORIA }, + Common::EN_ANY, Common::kPlatformDOS, ADGF_NO_FLAGS, GUIO_PHANTASMAGORIA }, // Phantasmagoria - English Macintosh // NOTE: This only contains disc 1 files (as well as the two persistent files: @@ -3202,7 +3230,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resmap.005", 0, "8bd5ceeedcbe16dfe55d1b90dcd4be84", 1942}, {"ressci.005", 0, "05f9fe2bee749659acb3cd2c90252fc5", 67905112}, AD_LISTEND}, - Common::EN_ANY, Common::kPlatformWindows, ADGF_TESTING | ADGF_DROPPLATFORM, GUIO_PHANTASMAGORIA2 }, + Common::EN_ANY, Common::kPlatformWindows, ADGF_DROPPLATFORM, GUIO_PHANTASMAGORIA2 }, // Phantasmagoria 2 - English DOS (GOG version) (supplied by littleboy in patch #1360) // Note: Fully uncensored, basically the US release, but ressci.* merged into ressci.000 @@ -3213,7 +3241,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"ressci.000", 0, "c54f26d9f43f908151263254b6d97053", 108134481}, {"resmap.000", 0, "de154a223a9ef4ea7358b76adc38ef5b", 2956}, AD_LISTEND}, - Common::EN_ANY, Common::kPlatformWindows, ADGF_TESTING | ADGF_DROPPLATFORM, GUIO_PHANTASMAGORIA2 }, + Common::EN_ANY, Common::kPlatformWindows, ADGF_DROPPLATFORM, GUIO_PHANTASMAGORIA2 }, // Phantasmagoria 2 - German DOS/Windows (supplied by AReim1982) // Note: Fully uncensored, but one scene is missing probably because of a mastering error (Curtis + Therese meeting near water cooler) @@ -3235,7 +3263,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resmap.005", 0, "2fc48a4a5a73b726994f189da51a8b2a", 1954}, {"ressci.005", 0, "e94005890d22dd3b7f605a2a7c025803", 68232146}, AD_LISTEND}, - Common::DE_DEU, Common::kPlatformWindows, ADGF_TESTING | ADGF_DROPPLATFORM, GUIO_PHANTASMAGORIA2 }, + Common::DE_DEU, Common::kPlatformWindows, ADGF_DROPPLATFORM, GUIO_PHANTASMAGORIA2 }, // Phantasmagoria 2 - French DOS/Windows (supplied by bgK) // Windows executable scanning reports "3.000.000" - "Nov 09 1996 16:03:00" @@ -3253,7 +3281,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resmap.005", 0, "7811a1801660090725ceef799b62fc72", 1954}, {"ressci.005", 0, "b6f090a2c8fc955d17b8a47085b2f890", 68231525}, AD_LISTEND}, - Common::FR_FRA, Common::kPlatformWindows, ADGF_TESTING | ADGF_DROPPLATFORM, GUIO_PHANTASMAGORIA2 }, + Common::FR_FRA, Common::kPlatformWindows, ADGF_DROPPLATFORM, GUIO_PHANTASMAGORIA2 }, // Phantasmagoria 2 - Japanese Windows (supplied by m_kiewitz) // Features English voices w/ Japanese subtitles. Background images were also localized to Japanese. @@ -3275,7 +3303,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { //{"resaud.002", 0, "3b4c5f92e5143fd3539b227e48ac2929", 8414502}, //{"ressfx.001", 0, "343a6ca9ddd614541b11b155de6368ac", 90268706}, AD_LISTEND}, - Common::JA_JPN, Common::kPlatformWindows, ADGF_TESTING | ADGF_DROPPLATFORM, GUIO_PHANTASMAGORIA2 }, + Common::JA_JPN, Common::kPlatformWindows, ADGF_DROPPLATFORM, GUIO_PHANTASMAGORIA2 }, #undef GUIO_PHANTASMAGORIA2 #undef GUIO_PHANTASMAGORIA2_CENSORED @@ -3522,7 +3550,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resource.map", 0, "379dfe80ed6bd16c47e4b950c4722eac", 11374}, {"resource.000", 0, "fd316a09b628b7032248139003369022", 18841068}, AD_LISTEND}, - Common::EN_ANY, Common::kPlatformDOS, ADGF_CD | ADGF_TESTING, GUIO_PQ4_CD }, + Common::EN_ANY, Common::kPlatformDOS, ADGF_CD, GUIO_PQ4_CD }, // Police Quest 4 - French DOS CD (French text, English speech) (From bgK) // Executable scanning reports "2.100.002", VERSION file reports "1.000.000" @@ -3530,7 +3558,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resource.map", 0, "c378f024f27332deccb1bae3b78e693c", 11386}, {"resource.000", 0, "3dd3ff150b78899500d4e1bea9b733c6", 18866242}, AD_LISTEND}, - Common::FR_FRA, Common::kPlatformDOS, ADGF_CD | ADGF_TESTING, GUIO_PQ4_CD }, + Common::FR_FRA, Common::kPlatformDOS, ADGF_CD, GUIO_PQ4_CD }, // Police Quest 4 - German DOS CD (German text, English speech) // Supplied by markcoolio in bug report #3392955 @@ -3538,7 +3566,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resource.map", 0, "a398076371ed0e1e706c8f9fb9fc7ac5", 11386}, {"resource.000", 0, "6ff21954e0a2c5992279e7eb787c8d56", 18918747}, AD_LISTEND}, - Common::DE_DEU, Common::kPlatformDOS, ADGF_CD | ADGF_TESTING, GUIO_PQ4_CD }, + Common::DE_DEU, Common::kPlatformDOS, ADGF_CD, GUIO_PQ4_CD }, // Police Quest 4 - English DOS // SCI interpreter version 2.000.000 (a guess?) @@ -3546,7 +3574,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resource.map", 0, "aed9643158ccf01b71f359db33137f82", 9895}, {"resource.000", 0, "da383857b3be1e4514daeba2524359e0", 15141432}, AD_LISTEND}, - Common::EN_ANY, Common::kPlatformDOS, ADGF_TESTING, GUIO_PQ4_FLOPPY }, + Common::EN_ANY, Common::kPlatformDOS, ADGF_NO_FLAGS, GUIO_PQ4_FLOPPY }, // Police Quest 4 - French DOS (supplied by abevi in bug report #2612718) // SCI interpreter version 2.000.000 @@ -3554,7 +3582,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resource.map", 0, "008030846edcc7c5c7a812c7f4ae4ceb", 9256}, {"resource.000", 0, "6ba98bd2e436739d87ecd2a9b99cabb4", 14730153}, AD_LISTEND}, - Common::FR_FRA, Common::kPlatformDOS, ADGF_TESTING, GUIO_PQ4_FLOPPY }, + Common::FR_FRA, Common::kPlatformDOS, ADGF_NO_FLAGS, GUIO_PQ4_FLOPPY }, // Police Quest 4 - German DOS (supplied by markcoolio in bug report #2723840) // SCI interpreter version 2.000.000 (a guess?) @@ -3562,7 +3590,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resource.map", 0, "2393ee728ab930b2762cb5889f9b5aff", 9256}, {"resource.000", 0, "6ba98bd2e436739d87ecd2a9b99cabb4", 14730155}, AD_LISTEND}, - Common::DE_DEU, Common::kPlatformDOS, ADGF_TESTING, GUIO_PQ4_FLOPPY }, + Common::DE_DEU, Common::kPlatformDOS, ADGF_NO_FLAGS, GUIO_PQ4_FLOPPY }, #undef GUIO_PQ4_FLOPPY #undef GUIO_PQ4_CD @@ -4044,7 +4072,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resmap.001", 0, "775304e9b2a545156be4d94209550094", 1393}, {"ressci.001", 0, "259437fd75fdf51e8207fda8c01fa4fd", 2334384}, AD_LISTEND}, - Common::EN_ANY, Common::kPlatformDOS, ADGF_DEMO | ADGF_TESTING, GUIO_RAMA_DEMO }, + Common::EN_ANY, Common::kPlatformDOS, ADGF_DEMO, GUIO_RAMA_DEMO }, // RAMA - English DOS/Windows (from jvprat) // Executable scanning reports "3.000.000", VERSION file reports "1.100.000" @@ -4056,7 +4084,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resmap.003", 0, "31ef4c0621711585d031f0ae81707251", 1636}, {"ressci.003", 0, "2a68edd064e5e4937b5e9c74b38f2082", 6860492}, AD_LISTEND}, - Common::EN_ANY, Common::kPlatformDOS, ADGF_TESTING, GUIO_RAMA }, + Common::EN_ANY, Common::kPlatformDOS, ADGF_NO_FLAGS, GUIO_RAMA }, // RAMA - English DOS/Windows (from Quietust, in bug report #2850645) {"rama", "", { @@ -4067,7 +4095,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resmap.003", 0, "48841e4b84ef1b98b48d43566fda9e13", 1636}, {"ressci.003", 0, "2a68edd064e5e4937b5e9c74b38f2082", 6870356}, AD_LISTEND}, - Common::EN_ANY, Common::kPlatformDOS, ADGF_TESTING, GUIO_RAMA }, + Common::EN_ANY, Common::kPlatformDOS, ADGF_NO_FLAGS, GUIO_RAMA }, // RAMA - German DOS/Windows CD (from farmboy0, in gh-397) {"rama", "", { @@ -4078,7 +4106,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resmap.003", 0, "222096000bd83a1d56577114a452cccf", 1636}, {"ressci.003", 0, "2a68edd064e5e4937b5e9c74b38f2082", 6954219}, AD_LISTEND}, - Common::DE_DEU, Common::kPlatformDOS, ADGF_TESTING, GUIO_RAMA }, + Common::DE_DEU, Common::kPlatformDOS, ADGF_NO_FLAGS, GUIO_RAMA }, // RAMA - French DOS/Windows CD (from bgK) // Executable scanning reports "3.000.000", VERSION file reports "1.000.000" @@ -4090,14 +4118,14 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resmap.003", 0, "fd2ce2312084e60b2cc5194a799873d0", 1636}, {"ressci.003", 0, "2a68edd064e5e4937b5e9c74b38f2082", 6379952}, AD_LISTEND}, - Common::FR_FRA, Common::kPlatformDOS, ADGF_TESTING, GUIO_RAMA }, + Common::FR_FRA, Common::kPlatformDOS, ADGF_NO_FLAGS, GUIO_RAMA }, // RAMA - Italian DOS/Windows CD (from glorifindel) {"rama", "", { {"ressci.001", 0, "2a68edd064e5e4937b5e9c74b38f2082", 70611091}, {"resmap.001", 0, "70ba2ff04a2b7fb2c52420ba7fbd47c2", 8338}, AD_LISTEND}, - Common::IT_ITA, Common::kPlatformDOS, ADGF_TESTING, GUIO_RAMA }, + Common::IT_ITA, Common::kPlatformDOS, ADGF_NO_FLAGS, GUIO_RAMA }, #undef GUIO_RAMA_DEMO #undef GUIO_RAMA @@ -4121,21 +4149,21 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resmap.000", 0, "f2ead37749ed8f6535a2445a7d05a0cc", 46525}, {"ressci.000", 0, "4294c6d7510935f2e0a52e302073c951", 262654836}, AD_LISTEND}, - Common::EN_ANY, Common::kPlatformWindows, ADGF_TESTING | ADGF_DROPPLATFORM, GUIO_SHIVERS }, + Common::EN_ANY, Common::kPlatformWindows, ADGF_DROPPLATFORM, GUIO_SHIVERS }, // Shivers - German Windows (from Tobis87) {"shivers", "", { {"resmap.000", 0, "f483d0a1f78334c18052e92785c3086e", 46537}, {"ressci.000", 0, "6751b144671e2deed919eb9d284b07eb", 262390692}, AD_LISTEND}, - Common::DE_DEU, Common::kPlatformWindows, ADGF_TESTING | ADGF_DROPPLATFORM, GUIO_SHIVERS }, + Common::DE_DEU, Common::kPlatformWindows, ADGF_DROPPLATFORM, GUIO_SHIVERS }, // Shivers - French Windows (from legluondunet in bug report Trac#9742) {"shivers", "", { {"resmap.000", 0, "73bee036dc8ece0d03f637eb340ea428", 46543}, {"ressci.000", 0, "8d45ebb1e5a13468d10e676b8dbce682", 262161072}, AD_LISTEND}, - Common::FR_FRA, Common::kPlatformWindows, ADGF_TESTING | ADGF_DROPPLATFORM, GUIO_SHIVERS }, + Common::FR_FRA, Common::kPlatformWindows, ADGF_DROPPLATFORM, GUIO_SHIVERS }, // Shivers - English Windows Non-interactive Demo // Executable scanning reports "2.100.002" @@ -4143,14 +4171,14 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resmap.000", 0, "d9e0bc5eddefcbe47f528760085d8927", 1186}, {"ressci.000", 0, "3a93c6340b54e07e65d0e5583354d186", 10505469}, AD_LISTEND}, - Common::EN_ANY, Common::kPlatformWindows, ADGF_DEMO | ADGF_TESTING | ADGF_DROPPLATFORM, GUIO_SHIVERS }, + Common::EN_ANY, Common::kPlatformWindows, ADGF_DEMO | ADGF_DROPPLATFORM, GUIO_SHIVERS }, // Shivers - English Windows Interactive Demo (from bgK in bug report Trac#9745) {"shivers", "Demo", { {"resmap.000", 0, "58a20b0c839d31d56802ead6c8f953c4", 7069}, {"ressci.000", 0, "f9eb6338f658945feadd4d27e58bdb93", 37404155}, AD_LISTEND}, - Common::EN_ANY, Common::kPlatformWindows, ADGF_DEMO | ADGF_TESTING | ADGF_DROPPLATFORM, GUIO_SHIVERS }, + Common::EN_ANY, Common::kPlatformWindows, ADGF_DEMO | ADGF_DROPPLATFORM, GUIO_SHIVERS }, #undef GUIO_SHIVERS_DEMO #undef GUIO_SHIVERS @@ -4753,7 +4781,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resource.map", 0, "6dddfa3a8f3a3a513ec9dfdfae955005", 10528}, {"resource.000", 0, "c4259ab7355aead07773397b1052827d", 41150806}, AD_LISTEND}, - Common::EN_ANY, Common::kPlatformDOS, ADGF_TESTING, GUIO_SQ6 }, + Common::EN_ANY, Common::kPlatformDOS, ADGF_NO_FLAGS, GUIO_SQ6 }, // Space Quest 6 - English DOS/Win3.11 CD ver 1.11 (from FRG) // SCI interpreter version 2.100.002 (just a guess) @@ -4761,7 +4789,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resource.map", 0, "e0615d6e4e10e37ae42e6a2a95aaf145", 10528}, {"resource.000", 0, "c4259ab7355aead07773397b1052827d", 41150806}, AD_LISTEND}, - Common::EN_ANY, Common::kPlatformDOS, ADGF_TESTING, GUIO_SQ6 }, + Common::EN_ANY, Common::kPlatformDOS, ADGF_NO_FLAGS, GUIO_SQ6 }, // Space Quest 6 - French DOS/Win3.11 CD (from French magazine Joystick - September 1997) // Executable scanning reports "2.100.002", VERSION file reports "1.0" @@ -4769,7 +4797,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resource.map", 0, "3c831625931d5079b73ae8c275f52c95", 10534}, {"resource.000", 0, "4195ca940f759424f62b90e262cc1737", 40932397}, AD_LISTEND}, - Common::FR_FRA, Common::kPlatformDOS, ADGF_TESTING, GUIO_SQ6 }, + Common::FR_FRA, Common::kPlatformDOS, ADGF_NO_FLAGS, GUIO_SQ6 }, // Space Quest 6 - German DOS (from Tobis87, updated info from markcoolio in bug report #2723884) // SCI interpreter version 2.100.002 (just a guess) @@ -4777,7 +4805,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resource.map", 0, "664d797415484f85c90b1b45aedc7686", 10534}, {"resource.000", 0, "ba87ba91e5bdabb4169dd0df75777722", 40933685}, AD_LISTEND}, - Common::DE_DEU, Common::kPlatformDOS, ADGF_TESTING, GUIO_SQ6 }, + Common::DE_DEU, Common::kPlatformDOS, ADGF_NO_FLAGS, GUIO_SQ6 }, // Space Quest 6 - English DOS/Win3.11 Interactive Demo (from FRG) // SCI interpreter version 2.100.002 (just a guess) @@ -4785,7 +4813,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resource.map", 0, "368f07b07433db3f819fa3fa0e5efee5", 2572}, {"resource.000", 0, "ab12724e078dea34b624e0d2a38dcd7c", 2272050}, AD_LISTEND}, - Common::EN_ANY, Common::kPlatformDOS, ADGF_DEMO | ADGF_TESTING, GUIO_SQ6_DEMO }, + Common::EN_ANY, Common::kPlatformDOS, ADGF_DEMO, GUIO_SQ6_DEMO }, // Space Quest 6 - English Win3.11 Demo (from Sneak Peeks 2 CD) // Executable scanning reports "2.100.002", VERSION file reports "1.000.000" @@ -4793,7 +4821,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resource.map", 0, "5cf3f0db76080a4ac327190bd027e355", 2164}, {"resource.000", 0, "ab12724e078dea34b624e0d2a38dcd7c", 2159708}, AD_LISTEND}, - Common::EN_ANY, Common::kPlatformWindows, ADGF_DEMO | ADGF_TESTING, GUIO_SQ6_DEMO }, + Common::EN_ANY, Common::kPlatformWindows, ADGF_DEMO, GUIO_SQ6_DEMO }, #undef GUIO_SQ6_DEMO #undef GUIO_SQ6 @@ -4842,7 +4870,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resmap.000", 0, "9a3e172cde9963d0a969f26469318cec", 3403}, {"ressci.000", 0, "db3e290481c35c3224e9602e71e4a1f1", 5073868}, AD_LISTEND}, - Common::EN_ANY, Common::kPlatformWindows, ADGF_DEMO | ADGF_TESTING | ADGF_DROPPLATFORM, GUIO_TORIN_DEMO }, + Common::EN_ANY, Common::kPlatformWindows, ADGF_DEMO | ADGF_DROPPLATFORM, GUIO_TORIN_DEMO }, // Torin's Passage - Multilingual EN/FR/DE w/ English audio Windows CD // Also matches GOG.com English-only release @@ -4856,21 +4884,21 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resmap.000", 0, "bb3b0b22ff08df54fbe2d06263409be6", 9799}, {"ressci.000", 0, "693a259d346c9360f4a0c11fdaae430a", 55973887}, AD_LISTEND}, - Common::EN_ANY, Common::kPlatformWindows, ADGF_TESTING | ADGF_DROPPLATFORM, GUIO_TORIN }, + Common::EN_ANY, Common::kPlatformWindows, ADGF_DROPPLATFORM, GUIO_TORIN }, {"torin", "", { {"resmap.000", 0, "bb3b0b22ff08df54fbe2d06263409be6", 9799}, {"ressci.000", 0, "693a259d346c9360f4a0c11fdaae430a", 55973887}, {"french/msg/0.msg", 0, "cbf314308636380a96f20a76f2a26ce5", 5857}, AD_LISTEND}, - Common::FR_FRA, Common::kPlatformWindows, ADGF_TESTING | ADGF_DROPPLATFORM, GUIO_TORIN }, + Common::FR_FRA, Common::kPlatformWindows, ADGF_DROPPLATFORM, GUIO_TORIN }, {"torin", "", { {"resmap.000", 0, "bb3b0b22ff08df54fbe2d06263409be6", 9799}, {"ressci.000", 0, "693a259d346c9360f4a0c11fdaae430a", 55973887}, {"german/msg/0.msg", 0, "374ce3a7e540e1f4917d132f74f356b8", 5993}, AD_LISTEND}, - Common::DE_DEU, Common::kPlatformWindows, ADGF_TESTING | ADGF_DROPPLATFORM, GUIO_TORIN }, + Common::DE_DEU, Common::kPlatformWindows, ADGF_DROPPLATFORM, GUIO_TORIN }, // from jvprat and m_kiewitz {"torin", "", { @@ -4878,7 +4906,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"ressci.000", 0, "693a259d346c9360f4a0c11fdaae430a", 55973887}, {"spanish/msg/0.msg", 0, "3c468ee0a8595d64d93df68054b116d7", 5681}, AD_LISTEND}, - Common::ES_ESP, Common::kPlatformWindows, ADGF_TESTING | ADGF_DROPPLATFORM, GUIO_TORIN }, + Common::ES_ESP, Common::kPlatformWindows, ADGF_DROPPLATFORM, GUIO_TORIN }, // from glorifindel // TODO: Need to get ahold of italian/msg/0.msg from an Italian release @@ -4887,7 +4915,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { // {"ressci.000", 0, "693a259d346c9360f4a0c11fdaae430a", 55973887}, // // {"italian/msg/0.msg", 0, ?, ?}, // AD_LISTEND}, -// Common::IT_ITA, Common::kPlatformWindows, ADGF_TESTING, GUIO_TORIN }, +// Common::IT_ITA, Common::kPlatformWindows, ADGF_DROPPLATFORM, GUIO_TORIN }, // --- @@ -4898,19 +4926,19 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resmap.000", 0, "e55c3097329b3c53752301e01c6af2fb", 9787}, {"ressci.000", 0, "118f9bec04bfe17c4f87bbb5ddb43c18", 56127540}, AD_LISTEND}, - Common::EN_ANY, Common::kPlatformWindows, ADGF_TESTING | ADGF_DROPPLATFORM, GUIO_TORIN }, + Common::EN_ANY, Common::kPlatformWindows, ADGF_DROPPLATFORM, GUIO_TORIN }, {"torin", "", { {"resmap.000", 0, "e55c3097329b3c53752301e01c6af2fb", 9787}, {"ressci.000", 0, "118f9bec04bfe17c4f87bbb5ddb43c18", 56127540}, AD_LISTEND}, - Common::FR_FRA, Common::kPlatformWindows, ADGF_TESTING | ADGF_DROPPLATFORM, GUIO_TORIN }, + Common::FR_FRA, Common::kPlatformWindows, ADGF_DROPPLATFORM, GUIO_TORIN }, {"torin", "", { {"resmap.000", 0, "e55c3097329b3c53752301e01c6af2fb", 9787}, {"ressci.000", 0, "118f9bec04bfe17c4f87bbb5ddb43c18", 56127540}, AD_LISTEND}, - Common::DE_DEU, Common::kPlatformWindows, ADGF_TESTING | ADGF_DROPPLATFORM, GUIO_TORIN }, + Common::DE_DEU, Common::kPlatformWindows, ADGF_DROPPLATFORM, GUIO_TORIN }, // --- @@ -4922,19 +4950,19 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resmap.000", 0, "66ed46e3e56f487e688d52f05b33d0ba", 9787}, {"ressci.000", 0, "118f9bec04bfe17c4f87bbb5ddb43c18", 56126981}, AD_LISTEND}, - Common::EN_ANY, Common::kPlatformWindows, ADGF_TESTING | ADGF_DROPPLATFORM, GUIO_TORIN }, + Common::EN_ANY, Common::kPlatformWindows, ADGF_DROPPLATFORM, GUIO_TORIN }, {"torin", "", { {"resmap.000", 0, "66ed46e3e56f487e688d52f05b33d0ba", 9787}, {"ressci.000", 0, "118f9bec04bfe17c4f87bbb5ddb43c18", 56126981}, AD_LISTEND}, - Common::FR_FRA, Common::kPlatformWindows, ADGF_TESTING | ADGF_DROPPLATFORM, GUIO_TORIN }, + Common::FR_FRA, Common::kPlatformWindows, ADGF_DROPPLATFORM, GUIO_TORIN }, {"torin", "", { {"resmap.000", 0, "66ed46e3e56f487e688d52f05b33d0ba", 9787}, {"ressci.000", 0, "118f9bec04bfe17c4f87bbb5ddb43c18", 56126981}, AD_LISTEND}, - Common::DE_DEU, Common::kPlatformWindows, ADGF_TESTING | ADGF_DROPPLATFORM, GUIO_TORIN }, + Common::DE_DEU, Common::kPlatformWindows, ADGF_DROPPLATFORM, GUIO_TORIN }, // --- @@ -4946,7 +4974,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { { "ressci.000", 0, "e672da099fb1663b87c78abc6c8ba2a4", 130622695 }, { "resmap.000", 0, "643859f8f2be8e7701611e29b3b65208", 9799 }, AD_LISTEND }, - Common::RU_RUS, Common::kPlatformWindows, ADGF_TESTING | ADGF_DROPPLATFORM, GUIO_TORIN }, + Common::RU_RUS, Common::kPlatformWindows, ADGF_DROPPLATFORM, GUIO_TORIN }, // Torin's Passage - English Macintosh {"torin", "", { diff --git a/engines/sci/graphics/cursor.cpp b/engines/sci/graphics/cursor.cpp index 6b18dce518..9c26d816a1 100644 --- a/engines/sci/graphics/cursor.cpp +++ b/engines/sci/graphics/cursor.cpp @@ -113,7 +113,7 @@ void GfxCursor::kernelSetShape(GuiResourceId resourceId) { byte colorMapping[4]; int16 x, y; byte color; - int16 maskA, maskB; + uint16 maskA, maskB; byte *pOut; int16 heightWidth; diff --git a/engines/sci/resource.cpp b/engines/sci/resource.cpp index af2ff60d59..eb786bce03 100644 --- a/engines/sci/resource.cpp +++ b/engines/sci/resource.cpp @@ -1805,7 +1805,7 @@ int ResourceManager::readResourceMapSCI0(ResourceSource *map) { } } - addResource(resId, source, offset & (((~bMask) << 24) | 0xFFFFFF), 0, map->getLocationName()); + addResource(resId, source, offset & ((((byte)~bMask) << 24) | 0xFFFFFF), 0, map->getLocationName()); } } while (!fileStream->eos()); diff --git a/engines/tinsel/object.h b/engines/tinsel/object.h index 0b6efc3356..097e1872d1 100644 --- a/engines/tinsel/object.h +++ b/engines/tinsel/object.h @@ -34,7 +34,7 @@ struct PALQ; enum { /** the maximum number of objects */ - NUM_OBJECTS = 256, + NUM_OBJECTS = 512, // object flags DMA_WNZ = 0x0001, ///< write non-zero data diff --git a/engines/tsage/core.cpp b/engines/tsage/core.cpp index a3ed3abb5b..247070d59c 100644 --- a/engines/tsage/core.cpp +++ b/engines/tsage/core.cpp @@ -93,7 +93,7 @@ InvObject::InvObject(int strip, int frame) { void InvObject::setCursor() { if (g_vm->getGameID() != GType_Ringworld) { // All other games - _cursorId = (CursorType)BF_GLOBALS._inventory->indexOf(this); + _cursorId = (CursorType)g_globals->_inventory->indexOf(this); g_globals->_events.setCursor(_cursorId); } else { // Ringworld cursor handling diff --git a/engines/tsage/ringworld2/ringworld2_logic.cpp b/engines/tsage/ringworld2/ringworld2_logic.cpp index e8d51109b1..f54efb5a8a 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.cpp +++ b/engines/tsage/ringworld2/ringworld2_logic.cpp @@ -387,9 +387,13 @@ void SceneExt::postInit(SceneObjectList *OwnerList) { int prevScene = R2_GLOBALS._sceneManager._previousScene; int sceneNumber = R2_GLOBALS._sceneManager._sceneNumber; if (g_vm->getFeatures() & GF_DEMO) { - if (((prevScene == -1) && (sceneNumber != 180) && (sceneNumber != 205) && (sceneNumber != 50)) + if (prevScene == 0 && sceneNumber == 180) { + // Very start of the demo, title & intro about to be shown + R2_GLOBALS._uiElements._active = false; + R2_GLOBALS._uiElements.hide(); + } else if (((prevScene == -1) && (sceneNumber != 180) && (sceneNumber != 205) && (sceneNumber != 50)) || (prevScene == 0) || (sceneNumber == 600) - || ((prevScene == 205 || prevScene == 180) && (sceneNumber == 100))) { + || ((prevScene == 205 || prevScene == 180 || prevScene == 50) && (sceneNumber == 100))) { R2_GLOBALS._uiElements._active = true; R2_GLOBALS._uiElements.show(); } else { diff --git a/engines/tsage/ringworld2/ringworld2_scenes0.cpp b/engines/tsage/ringworld2/ringworld2_scenes0.cpp index 16fb870120..a9f879f84b 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes0.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes0.cpp @@ -1659,6 +1659,7 @@ void Scene180::signal() { case 10: loadScene(4002); R2_GLOBALS._scenePalette.loadPalette(0); + R2_GLOBALS._interfaceY = SCREEN_HEIGHT; setSceneDelay(6); break; diff --git a/engines/tsage/saveload.cpp b/engines/tsage/saveload.cpp index 3cb8e52692..03f615db21 100644 --- a/engines/tsage/saveload.cpp +++ b/engines/tsage/saveload.cpp @@ -211,12 +211,14 @@ Common::Error Saver::restore(int slot) { // Note: I don't store pointers to instantiated objects here, because it's not necessary - the mere act // of instantiating a saved object registers it with the saver, and will then be resolved to whatever // object originally had a pointer to it as part of the post-processing step + DynObjects dynObjects; Common::String className; serializer.syncString(className); while (className != "END") { SavedObject *savedObject; if (!_factoryPtr || ((savedObject = _factoryPtr(className)) == NULL)) error("Unknown class name '%s' encountered trying to restore savegame", className.c_str()); + dynObjects.push_back(savedObject); // Populate the contents of the object savedObject->synchronize(serializer); @@ -226,7 +228,12 @@ Common::Error Saver::restore(int slot) { } // Post-process any unresolved pointers to get the correct pointer - resolveLoadPointers(); + resolveLoadPointers(dynObjects); + + // Post-process safety check: if any dynamically created objects didn't get any + // references, then delete them, since they'd never be freed otherwise + for (DynObjects::iterator i = dynObjects.begin(); i != dynObjects.end(); ++i) + delete *i; delete saveFile; @@ -392,7 +399,7 @@ void Saver::listObjects() { /** * Returns the pointer associated with the specified object index */ -void Saver::resolveLoadPointers() { +void Saver::resolveLoadPointers(DynObjects &dynObjects) { if (_unresolvedPtrs.size() == 0) // Nothing to resolve return; @@ -410,6 +417,9 @@ void Saver::resolveLoadPointers() { SavedObject **objPP = r._savedObject; *objPP = pObj; iPtr = _unresolvedPtrs.erase(iPtr); + + // If it's a dynamic object, remove it from the dynamic objects list + dynObjects.remove(pObj); } else { ++iPtr; } diff --git a/engines/tsage/saveload.h b/engines/tsage/saveload.h index be5ff51ffb..04a1e02b28 100644 --- a/engines/tsage/saveload.h +++ b/engines/tsage/saveload.h @@ -201,6 +201,7 @@ public: typedef SavedObject *(*SavedObjectFactory)(const Common::String &className); class Saver { + typedef Common::List<SavedObject *> DynObjects; private: Common::List<SavedObject *> _objList; FunctionList<bool> _saveNotifiers; @@ -213,7 +214,7 @@ private: bool _macroSaveFlag; bool _macroRestoreFlag; - void resolveLoadPointers(); + void resolveLoadPointers(DynObjects &dynObjects); public: Saver(); ~Saver(); diff --git a/engines/tsage/sound.cpp b/engines/tsage/sound.cpp index 0d3fb55dd3..044bd567d4 100644 --- a/engines/tsage/sound.cpp +++ b/engines/tsage/sound.cpp @@ -23,6 +23,7 @@ #include "audio/fmopl.h" #include "audio/decoders/raw.h" #include "common/config-manager.h" +#include "common/timer.h" #include "audio/audiostream.h" #include "tsage/core.h" #include "tsage/globals.h" @@ -70,7 +71,7 @@ SoundManager::~SoundManager() { } sfTerminate(); -// g_system->getTimerManager()->removeTimerProc(_sfUpdateCallback); + g_system->getTimerManager()->removeTimerProc(&sfSoundServer); } // Free any allocated voice type structures @@ -90,12 +91,7 @@ void SoundManager::postInit() { g_saver->addLoadNotifier(&SoundManager::loadNotifier); g_saver->addListener(this); - -// I originally separated the sound manager update method into a separate thread, since -// it handles updates for both music and Fx. However, since Adlib updates also get done in a -// thread, and doesn't get too far ahead, I've left it to the AdlibSoundDriver class to -// call the update method, rather than having it be called separately -// g_system->getTimerManager()->installTimerProc(_sfUpdateCallback, 1000000 / SOUND_FREQUENCY, NULL, "tsageSoundUpdate"); + g_system->getTimerManager()->installTimerProc(&sfSoundServer, 1000000 / CALLBACKS_PER_SECOND, NULL, "tsageSoundUpdate"); _sndmgrReady = true; } } @@ -147,10 +143,6 @@ void SoundManager::syncSounds() { } } -void SoundManager::update() { - sfSoundServer(); -} - Common::List<SoundDriverEntry> &SoundManager::buildDriverList(bool detectFlag) { assert(_sndmgrReady); _availableDrivers.clear(); @@ -382,7 +374,10 @@ void SoundManager::rethinkVoiceTypes() { sfRethinkVoiceTypes(); } -void SoundManager::sfSoundServer() { +void SoundManager::sfSoundServer(void *) { + Common::StackLock slock1(SoundManager::sfManager()._serverDisabledMutex); + Common::StackLock slock2(SoundManager::sfManager()._serverSuspendedMutex); + if (sfManager()._needToRethink) { sfRethinkVoiceTypes(); sfManager()._needToRethink = false; @@ -544,10 +539,6 @@ void SoundManager::sfUpdateVoiceStructs2() { } } -void SoundManager::sfUpdateCallback(void *ref) { - ((SoundManager *)ref)->update(); -} - /*--------------------------------------------------------------------------*/ void SoundManager::saveNotifier(bool postFlag) { @@ -1562,7 +1553,9 @@ void Sound::play(int soundNum) { } void Sound::stop() { - g_globals->_soundManager.removeFromPlayList(this); + if (g_globals) { + g_globals->_soundManager.removeFromPlayList(this); + } _unPrime(); } @@ -2879,13 +2872,13 @@ void AdlibSoundDriver::setPitch(int channel, int pitchBlend) { } void AdlibSoundDriver::write(byte reg, byte value) { + Common::StackLock lock(_queueMutex); _portContents[reg] = value; _queue.push(RegisterValue(reg, value)); } void AdlibSoundDriver::flush() { - Common::StackLock slock(SoundManager::sfManager()._serverDisabledMutex); - + Common::StackLock lock(_queueMutex); while (!_queue.empty()) { RegisterValue v = _queue.pop(); _opl->writeReg(v._regNum, v._value); @@ -3013,10 +3006,6 @@ void AdlibSoundDriver::setFrequency(int channel) { } void AdlibSoundDriver::onTimer() { - Common::StackLock slock1(SoundManager::sfManager()._serverDisabledMutex); - Common::StackLock slock2(SoundManager::sfManager()._serverSuspendedMutex); - - SoundManager::sfUpdateCallback(NULL); flush(); } diff --git a/engines/tsage/sound.h b/engines/tsage/sound.h index da56c8bfa5..6d6b480d58 100644 --- a/engines/tsage/sound.h +++ b/engines/tsage/sound.h @@ -196,7 +196,6 @@ public: virtual void listenerSynchronize(Serializer &s); virtual void postInit(); void syncSounds(); - void update(); static void saveNotifier(bool postFlag); void saveNotifierProc(bool postFlag); @@ -252,11 +251,10 @@ public: static void sfDoAddToPlayList(Sound *sound); static bool sfDoRemoveFromPlayList(Sound *sound); static void sfDoUpdateVolume(Sound *sound); - static void sfSoundServer(); + static void sfSoundServer(void *); static void sfProcessFading(); static void sfUpdateVoiceStructs(); static void sfUpdateVoiceStructs2(); - static void sfUpdateCallback(void *ref); }; class Sound: public EventHandler { @@ -460,6 +458,7 @@ private: byte _portContents[256]; const byte *_patchData; int _masterVolume; + Common::Mutex _queueMutex; Common::Queue<RegisterValue> _queue; bool _channelVoiced[ADLIB_CHANNEL_COUNT]; diff --git a/engines/tsage/user_interface.cpp b/engines/tsage/user_interface.cpp index fffc0dc16c..d5e40cba83 100644 --- a/engines/tsage/user_interface.cpp +++ b/engines/tsage/user_interface.cpp @@ -205,7 +205,7 @@ void UIInventoryScroll::process(Event &event) { toggle(true); // Wait for the mouse to be released - BF_GLOBALS._events.waitForPress(EVENT_BUTTON_UP); + g_globals->_events.waitForPress(EVENT_BUTTON_UP); // Restore unselected version toggle(false); diff --git a/engines/xeen/character.cpp b/engines/xeen/character.cpp index def830e2a1..26794d8080 100644 --- a/engines/xeen/character.cpp +++ b/engines/xeen/character.cpp @@ -1089,7 +1089,7 @@ int Character::getThievery() const { result += itemScan(10); - // If the character doesn't have a thievery skill, then do'nt allow any result + // If the character doesn't have a thievery skill, then don't allow any result if (!_skills[THIEVERY]) result = 0; @@ -1666,20 +1666,15 @@ int Character::makeItem(int p1, int itemIndex, int p3) { rval = vm->getRandomNumber(1, 100); if (rval <= 25) { mult = 0; - } - else if (rval <= 45) { + } else if (rval <= 45) { mult = 1; - } - else if (rval <= 60) { + } else if (rval <= 60) { mult = 2; - } - else if (rval <= 75) { + } else if (rval <= 75) { mult = 3; - } - else if (rval <= 95) { + } else if (rval <= 95) { mult = 4; - } - else { + } else { mult = 5; } diff --git a/engines/xeen/dialogs.cpp b/engines/xeen/dialogs.cpp index 92082b4e0b..a88efd2520 100644 --- a/engines/xeen/dialogs.cpp +++ b/engines/xeen/dialogs.cpp @@ -94,7 +94,7 @@ bool ButtonContainer::checkEvents(XeenEngine *vm) { else if (_buttonValue == Common::KEYCODE_KP_ENTER) _buttonValue = Common::KEYCODE_RETURN; - _buttonValue |= (keyState.flags << 8); + _buttonValue |= keyState.flags << 16; if (_buttonValue) return true; } diff --git a/engines/xeen/dialogs_char_info.cpp b/engines/xeen/dialogs_char_info.cpp index 23f089b93e..619382bb84 100644 --- a/engines/xeen/dialogs_char_info.cpp +++ b/engines/xeen/dialogs_char_info.cpp @@ -93,6 +93,8 @@ void CharacterInfo::execute(int charIndex) { } else { _vm->_mode = MODE_CHARACTER_INFO; } + + intf.highlightChar(_buttonValue); redrawFlag = true; break; diff --git a/engines/xeen/dialogs_items.cpp b/engines/xeen/dialogs_items.cpp index 4adab68b29..3b0b4ffbed 100644 --- a/engines/xeen/dialogs_items.cpp +++ b/engines/xeen/dialogs_items.cpp @@ -66,7 +66,7 @@ Character *ItemsDialog::execute(Character *c, ItemsMode mode) { if (redrawFlag == REDRAW_FULL) { if ((mode != ITEMMODE_CHAR_INFO || category != CATEGORY_MISC) && mode != ITEMMODE_ENCHANT && mode != ITEMMODE_RECHARGE && mode != ITEMMODE_TO_GOLD) { - _buttons[8]._bounds.moveTo(148, _buttons[8]._bounds.top); + _buttons[4]._bounds.moveTo(148, _buttons[4]._bounds.top); _buttons[9]._draw = false; } else if (mode == ITEMMODE_RECHARGE) { _buttons[4]._value = Common::KEYCODE_r; @@ -75,7 +75,7 @@ Character *ItemsDialog::execute(Character *c, ItemsMode mode) { } else if (mode == ITEMMODE_TO_GOLD) { _buttons[4]._value = Common::KEYCODE_g; } else { - _buttons[8]._bounds.moveTo(0, _buttons[8]._bounds.top); + _buttons[4]._bounds.moveTo(0, _buttons[4]._bounds.top); _buttons[9]._draw = true; _buttons[9]._value = Common::KEYCODE_u; } @@ -85,7 +85,7 @@ Character *ItemsDialog::execute(Character *c, ItemsMode mode) { if (mode != ITEMMODE_CHAR_INFO && mode != ITEMMODE_8 && mode != ITEMMODE_ENCHANT && mode != ITEMMODE_RECHARGE && mode != ITEMMODE_TO_GOLD) { msg = Common::String::format(Res.ITEMS_DIALOG_TEXT1, - Res.BTN_SELL, Res.BTN_IDENTIFY, Res.BTN_FIX); + Res.BTN_BUY, Res.BTN_SELL, Res.BTN_IDENTIFY, Res.BTN_FIX); } else if (mode != ITEMMODE_ENCHANT && mode != ITEMMODE_RECHARGE && mode != ITEMMODE_TO_GOLD) { msg = Common::String::format(Res.ITEMS_DIALOG_TEXT1, category == 3 ? Res.BTN_USE : Res.BTN_EQUIP, @@ -134,8 +134,9 @@ Character *ItemsDialog::execute(Character *c, ItemsMode mode) { break; } - for (int idx = 0; idx < 9; ++idx) { - _itemsDrawList[idx]._y = 10 + idx * 9; + for (int idx = 0; idx < INV_ITEMS_TOTAL; ++idx) { + _itemsDrawList[idx]._x = 8; + _itemsDrawList[idx]._y = 18 + idx * 9; switch (category) { case CATEGORY_WEAPON: diff --git a/engines/xeen/events.cpp b/engines/xeen/events.cpp index 55ff24491d..9299eee040 100644 --- a/engines/xeen/events.cpp +++ b/engines/xeen/events.cpp @@ -33,9 +33,9 @@ namespace Xeen { EventsManager::EventsManager(XeenEngine *vm) : _vm(vm), _frameCounter(0), _priorFrameCounterTime(0), _gameCounter(0), - _leftButton(false), _rightButton(false), _sprites("mouse.icn"), - _keyCode(Common::KEYCODE_INVALID) { + _leftButton(false), _rightButton(false), _sprites("mouse.icn") { Common::fill(&_gameCounters[0], &_gameCounters[6], 0); + _key.keycode = Common::KEYCODE_INVALID; } EventsManager::~EventsManager() { @@ -81,7 +81,7 @@ void EventsManager::pollEvents() { _vm->_debugger->attach(); _vm->_debugger->onFrame(); } else { - _keyCode = event.kbd.keycode; + _key = event.kbd; } break; case Common::EVENT_MOUSEMOVE: @@ -111,7 +111,7 @@ void EventsManager::pollEventsAndWait() { } void EventsManager::clearEvents() { - _keyCode = Common::KEYCODE_INVALID; + _key.keycode = Common::KEYCODE_INVALID; _leftButton = _rightButton = false; } @@ -122,17 +122,17 @@ void EventsManager::debounceMouse() { } } bool EventsManager::getKey(Common::KeyState &key) { - if (_keyCode == Common::KEYCODE_INVALID) { + if (_key.keycode == Common::KEYCODE_INVALID) { return false; } else { - key = _keyCode; - _keyCode = Common::KEYCODE_INVALID; + key = _key; + _key.keycode = Common::KEYCODE_INVALID; return true; } } bool EventsManager::isKeyPending() const { - return _keyCode != Common::KEYCODE_INVALID; + return _key.keycode != Common::KEYCODE_INVALID; } bool EventsManager::isKeyMousePressed() { diff --git a/engines/xeen/events.h b/engines/xeen/events.h index 36ef939004..4ebc36d3f7 100644 --- a/engines/xeen/events.h +++ b/engines/xeen/events.h @@ -40,7 +40,7 @@ private: uint32 _priorFrameCounterTime; uint32 _gameCounter; uint32 _gameCounters[6]; - Common::KeyCode _keyCode; + Common::KeyState _key; SpriteResource _sprites; /** diff --git a/engines/xeen/interface.cpp b/engines/xeen/interface.cpp index 959252d65e..d3face1986 100644 --- a/engines/xeen/interface.cpp +++ b/engines/xeen/interface.cpp @@ -43,7 +43,7 @@ PartyDrawer::PartyDrawer(XeenEngine *vm): _vm(vm) { _restoreSprites.load("restorex.icn"); _hpSprites.load("hpbars.icn"); _dseFace.load("dse.fac"); - _hiliteChar = -1; + _hiliteChar = HILIGHT_CHAR_NONE; } void PartyDrawer::drawParty(bool updateFlag) { @@ -88,7 +88,7 @@ void PartyDrawer::drawParty(bool updateFlag) { _hpSprites.draw(screen, frame, Common::Point(Res.HP_BARS_X[idx], 182)); } - if (_hiliteChar != -1) + if (_hiliteChar != HILIGHT_CHAR_NONE) res._globalSprites.draw(screen, 8, Common::Point(Res.CHAR_FACES_X[_hiliteChar] - 1, 149)); if (updateFlag) @@ -101,7 +101,7 @@ void PartyDrawer::highlightChar(int charId) { if (charId != _hiliteChar && _hiliteChar != HILIGHT_CHAR_DISABLED) { // Handle deselecting any previusly selected char - if (_hiliteChar != -1) { + if (_hiliteChar != HILIGHT_CHAR_NONE) { res._globalSprites.draw(screen, 9 + _hiliteChar, Common::Point(Res.CHAR_FACES_X[_hiliteChar] - 1, 149)); } @@ -117,16 +117,16 @@ void PartyDrawer::unhighlightChar() { Resources &res = *_vm->_resources; Screen &screen = *_vm->_screen; - if (_hiliteChar != -1) { + if (_hiliteChar != HILIGHT_CHAR_NONE) { res._globalSprites.draw(screen, _hiliteChar + 9, Common::Point(Res.CHAR_FACES_X[_hiliteChar] - 1, 149)); - _hiliteChar = -1; + _hiliteChar = HILIGHT_CHAR_NONE; screen._windows[33].update(); } } void PartyDrawer::resetHighlight() { - _hiliteChar = -1; + _hiliteChar = HILIGHT_CHAR_NONE; } /*------------------------------------------------------------------------*/ diff --git a/engines/xeen/interface.h b/engines/xeen/interface.h index 074d7fdafb..ce887d2ae9 100644 --- a/engines/xeen/interface.h +++ b/engines/xeen/interface.h @@ -35,6 +35,7 @@ class XeenEngine; #define MINIMAP_SIZE 7 #define HILIGHT_CHAR_DISABLED -2 +#define HILIGHT_CHAR_NONE -1 /** * Class responsible for drawing the images of the characters in the party diff --git a/engines/xeen/map.cpp b/engines/xeen/map.cpp index 028ca4b6c4..9916c86130 100644 --- a/engines/xeen/map.cpp +++ b/engines/xeen/map.cpp @@ -38,6 +38,24 @@ const int MAP_GRID_PRIOR_INDEX2[] = { 0, 0, 0, 0, 2, 3, 4, 1, 0 }; const int MAP_GRID_PRIOR_DIRECTION2[] = { 0, 1, 2, 3, 0, 1, 2, 3, 0 }; +const char *const MUSIC_FILES1[5] = { + "outdoors.m", "town.m", "cavern.m", "dungeon.m", "castle.m" +}; + +const char *const MUSIC_FILES2[6][7] = { + { "outday1.m", "outday2.m", "outday4.m", "outnght1.m", + "outnght2.m", "outnght4.m", "daydesrt.m" }, + { "townday1.m", "twnwlk.m", "newbrigh.m", "twnnitea.m", + "twnniteb.m", "twnwlk.m", "townday1.m" }, + { "cavern1.m", "cavern2.m", "cavern3a.m", "cavern1.m", + "cavern2.m", "cavern3a.m", "cavern1.m" }, + { "dngon1.m", "dngon2.m", "dngon3.m", "dngon1.m", + "dngon2.m", "dngon3.m", "dngon1.m" }, + { "cstl1rev.m", "cstl2rev.m", "cstl3rev.m", "cstl1rev.m", + "cstl2rev.m", "cstl3rev.m", "cstl1rev.m" }, + { "sf05.m", "sf05.m", "sf05.m", "sf05.m", "sf05.m", "sf05.m", "sf05.m" } +}; + MonsterStruct::MonsterStruct() { _experience = 0; _hp = 0; @@ -890,6 +908,7 @@ Map::Map(XeenEngine *vm) : _vm(vm), _mobData(vm) { void Map::load(int mapId) { Interface &intf = *_vm->_interface; Screen &screen = *_vm->_screen; + Sound &sound = *_vm->_sound; IndoorDrawList &indoorList = _vm->_interface->_indoorList; OutdoorDrawList &outdoorList = _vm->_interface->_outdoorList; @@ -1098,8 +1117,19 @@ void Map::load(int mapId) { // Handle loading miscellaneous sprites for the map if (_isOutdoors) { - warning("TODO"); // Sound loading + // Start playing relevant music + Common::String musName; + + if (_vm->_files->_isDarkCc) { + int randIndex = _vm->getRandomNumber(6); + musName = MUSIC_FILES2[_mazeData->_wallKind][randIndex]; + } else { + musName = "outdoors.m"; + } + if (musName != sound._currentMusic) + sound.playSong(musName, 207); + // Load sprite sets needed for scene rendering _groundSprites.load("water.out"); _tileSprites.load("outdoor.til"); outdoorList._sky1._sprites = &_skySprites[0]; @@ -1119,8 +1149,20 @@ void Map::load(int mapId) { _surfaceSprites[i].load(Res.SURFACE_NAMES[_mazeData[0]._surfaceTypes[i]]); } } else { - warning("TODO"); // Sound loading + // Start playing relevant music + const int MUS_INDEXES[] = { 1, 2, 3, 4, 3, 5 }; + Common::String musName; + + if (_vm->_files->_isDarkCc) { + int randIndex = _vm->getRandomNumber(6); + musName = MUSIC_FILES2[MUS_INDEXES[_mazeData->_wallKind]][randIndex]; + } else { + musName = MUSIC_FILES1[MUS_INDEXES[_mazeData->_wallKind]]; + } + if (musName != sound._currentMusic) + sound.playSong(musName, 207); + // Load sprite sets needed for scene rendering _skySprites[1].load(Common::String::format("%s.sky", Res.TERRAIN_TYPES[_mazeData[0]._wallKind])); _groundSprites.load(Common::String::format("%s.gnd", diff --git a/engines/xeen/music.cpp b/engines/xeen/music.cpp index ab22afd6c1..fbbaadb374 100644 --- a/engines/xeen/music.cpp +++ b/engines/xeen/music.cpp @@ -200,7 +200,6 @@ bool MusicDriver::fxEndSubroutine(const byte *&srcP, byte param) { void MusicDriver::playFX(uint effectId, const byte *data) { if (!_fxPlaying || effectId < 7 || effectId >= 11) { - _musStartPtr = nullptr; _fxDataPtr = _fxStartPtr = data; _fxCountdownTimer = 0; _channels[7]._changeFrequency = _channels[8]._changeFrequency = false; @@ -736,6 +735,9 @@ void Music::playSong(Common::SeekableReadStream &stream) { } void Music::playSong(const Common::String &name, int param) { + _priorMusic = _currentMusic; + _currentMusic = name; + File f(name); playSong(f); } diff --git a/engines/xeen/music.h b/engines/xeen/music.h index 207ec991a3..a3d0121665 100644 --- a/engines/xeen/music.h +++ b/engines/xeen/music.h @@ -318,6 +318,7 @@ private: void update(); public: bool _musicOn; + Common::String _currentMusic, _priorMusic; public: Music(); ~Music(); diff --git a/engines/xeen/party.cpp b/engines/xeen/party.cpp index 15e7b5fda6..45b85f20f8 100644 --- a/engines/xeen/party.cpp +++ b/engines/xeen/party.cpp @@ -1436,11 +1436,11 @@ void Party::resetBlacksmithWares() { for (int idx2 = 0; idx2 < 4; ++idx2) { for (int idx3 = 0; idx3 < BLACKSMITH_DATA1[idx2][idx1]; ++idx3) { - int itemCat = c.makeItem(idx2, 0, 0); + int itemCat = c.makeItem(idx2 + 1, 0, 0); if (catCount[itemCat] < 8) { switch (itemCat) { case 0: { - XeenItem &item = _blacksmithWeapons[0][idx2 * 4 + catCount[itemCat]]; + XeenItem &item = _blacksmithWeapons[0][catCount[itemCat] * 4 + idx1]; item._id = c._weapons[0]._id; item._material = c._weapons[0]._material; item._bonusFlags = c._weapons[0]._bonusFlags; @@ -1448,7 +1448,7 @@ void Party::resetBlacksmithWares() { } case 1: { - XeenItem &item = _blacksmithArmor[0][idx2 * 4 + catCount[itemCat]]; + XeenItem &item = _blacksmithArmor[0][catCount[itemCat] * 4 + idx1]; item._id = c._weapons[0]._id; item._material = c._weapons[0]._material; item._bonusFlags = c._weapons[0]._bonusFlags; @@ -1456,7 +1456,7 @@ void Party::resetBlacksmithWares() { } case 2: { - XeenItem &item = _blacksmithAccessories[0][idx2 * 4 + catCount[itemCat]]; + XeenItem &item = _blacksmithAccessories[0][catCount[itemCat] * 4 + idx1]; item._id = c._weapons[0]._id; item._material = c._weapons[0]._material; item._bonusFlags = c._weapons[0]._bonusFlags; @@ -1464,7 +1464,7 @@ void Party::resetBlacksmithWares() { } case 3: { - XeenItem &item = _blacksmithMisc[0][idx2 * 4 + catCount[itemCat]]; + XeenItem &item = _blacksmithMisc[0][catCount[itemCat] * 4 + idx1]; item._id = c._weapons[0]._id; item._material = c._weapons[0]._material; item._bonusFlags = c._weapons[0]._bonusFlags; @@ -1490,7 +1490,7 @@ void Party::resetBlacksmithWares() { if (catCount[itemCat] < 8) { switch (itemCat) { case 0: { - XeenItem &item = _blacksmithWeapons[1][idx2 * 4 + catCount[itemCat]]; + XeenItem &item = _blacksmithWeapons[1][catCount[itemCat] * 4 + idx1]; item._id = c._weapons[0]._id; item._material = c._weapons[0]._material; item._bonusFlags = c._weapons[0]._bonusFlags; @@ -1498,7 +1498,7 @@ void Party::resetBlacksmithWares() { } case 1: { - XeenItem &item = _blacksmithArmor[1][idx2 * 4 + catCount[itemCat]]; + XeenItem &item = _blacksmithArmor[1][catCount[itemCat] * 4 + idx1]; item._id = c._weapons[0]._id; item._material = c._weapons[0]._material; item._bonusFlags = c._weapons[0]._bonusFlags; @@ -1506,7 +1506,7 @@ void Party::resetBlacksmithWares() { } case 2: { - XeenItem &item = _blacksmithAccessories[1][idx2 * 4 + catCount[itemCat]]; + XeenItem &item = _blacksmithAccessories[1][catCount[itemCat] * 4 + idx1]; item._id = c._weapons[0]._id; item._material = c._weapons[0]._material; item._bonusFlags = c._weapons[0]._bonusFlags; @@ -1514,7 +1514,7 @@ void Party::resetBlacksmithWares() { } case 3: { - XeenItem &item = _blacksmithMisc[1][idx2 * 4 + catCount[itemCat]]; + XeenItem &item = _blacksmithMisc[1][catCount[itemCat] * 4 + idx1]; item._id = c._weapons[0]._id; item._material = c._weapons[0]._material; item._bonusFlags = c._weapons[0]._bonusFlags; diff --git a/engines/xeen/resources.cpp b/engines/xeen/resources.cpp index 082f9b881e..b48f4ac5c9 100644 --- a/engines/xeen/resources.cpp +++ b/engines/xeen/resources.cpp @@ -691,14 +691,15 @@ const int Resources::TOWN_MAXES[2][11] = { { 26, 19, 48, 27, 26, 37, 16, 16, 16, 16, 16 } }; -const char *const Resources::TOWN_ACTION_MUSIC[14] = { - "bank.m", "smith.m", "guild.m", "tavern.m", "temple.m", - "grounds.m", "endgame.m", "bank.m", "sf09.m", "guild.m", - "tavern.m", "temple.m", "smith.m", "endgame.m" +const char *const Resources::TOWN_ACTION_MUSIC[2][7] = { + { "bank.m", "smith.m", "guild.m", "tavern.m", + "temple.m", "grounds.m", "endgame.m" }, + { "bank.m", "sf09.m", "guild.m", "tavern.m", + "temple.m", "smith.m", "endgame.m" } }; -const char *const Resources::TOWN_ACTION_SHAPES[4] = { - "bankr", "blck", "gild", "tvrn" +const char *const Resources::TOWN_ACTION_SHAPES[7] = { + "bankr", "blck", "gild", "tvrn", "tmpl", "trng", "eface08" }; const int Resources::TOWN_ACTION_FILES[2][7] = { diff --git a/engines/xeen/resources.h b/engines/xeen/resources.h index 000e332ad4..aa19baadcb 100644 --- a/engines/xeen/resources.h +++ b/engines/xeen/resources.h @@ -124,8 +124,8 @@ public: static const int MAKE_ITEM_ARR5[8][2]; static const int OUTDOOR_DRAWSTRCT_INDEXES[44]; static const int TOWN_MAXES[2][11]; - static const char *const TOWN_ACTION_MUSIC[14]; - static const char *const TOWN_ACTION_SHAPES[4]; + static const char *const TOWN_ACTION_MUSIC[2][7]; + static const char *const TOWN_ACTION_SHAPES[7]; static const int TOWN_ACTION_FILES[2][7]; static const char *const BANK_TEXT; static const char *const BLACKSMITH_TEXT; diff --git a/engines/xeen/scripts.cpp b/engines/xeen/scripts.cpp index 2198689f32..cb49586d54 100644 --- a/engines/xeen/scripts.cpp +++ b/engines/xeen/scripts.cpp @@ -31,6 +31,28 @@ namespace Xeen { +byte EventParameters::Iterator::readByte() { + byte result = (_index >= _data.size()) ? 0 : _data[_index]; + ++_index; + return result; +} + +uint16 EventParameters::Iterator::readUint16LE() { + uint16 result = ((_index + 1) >= _data.size()) ? 0 : + READ_LE_UINT16(&_data[_index]); + _index += 2; + return result; +} + +uint32 EventParameters::Iterator::readUint32LE() { + uint16 result = ((_index + 3) >= _data.size()) ? 0 : + READ_LE_UINT32(&_data[_index]); + _index += 4; + return result; +} + +/*------------------------------------------------------------------------*/ + MazeEvent::MazeEvent() : _direction(DIR_ALL), _line(-1), _opcode(OP_None) { } @@ -317,41 +339,57 @@ void Scripts::openGrate(int wallVal, int action) { } } -typedef void(Scripts::*ScriptMethodPtr)(Common::Array<byte> &); - -void Scripts::doOpcode(MazeEvent &event) { +bool Scripts::doOpcode(MazeEvent &event) { + Map &map = *_vm->_map; + typedef bool(Scripts::*ScriptMethodPtr)(ParamsIterator &); static const ScriptMethodPtr COMMAND_LIST[] = { - &Scripts::cmdNoAction, &Scripts::cmdDisplay1, &Scripts::cmdDoorTextSml, + &Scripts::cmdDoNothing, &Scripts::cmdDisplay1, &Scripts::cmdDoorTextSml, &Scripts::cmdDoorTextLrg, &Scripts::cmdSignText, &Scripts::cmdNPC, &Scripts::cmdPlayFX, &Scripts::cmdTeleport, &Scripts::cmdIf, &Scripts::cmdIf, &Scripts::cmdIf, - &Scripts::cmdMoveObj, &Scripts::cmdTakeOrGive, &Scripts::cmdNoAction, + &Scripts::cmdMoveObj, &Scripts::cmdTakeOrGive, &Scripts::cmdDoNothing, &Scripts::cmdRemove, &Scripts::cmdSetChar, &Scripts::cmdSpawn, &Scripts::cmdDoTownEvent, &Scripts::cmdExit, &Scripts::cmdAlterMap, - &Scripts::cmdGiveExtended, &Scripts::cmdConfirmWord, &Scripts::cmdDamage, + &Scripts::cmdGiveExtended, &Scripts::cmdConfirmEnding, &Scripts::cmdDamage, &Scripts::cmdJumpRnd, &Scripts::cmdAlterEvent, &Scripts::cmdCallEvent, &Scripts::cmdReturn, &Scripts::cmdSetVar, &Scripts::cmdTakeOrGive, &Scripts::cmdTakeOrGive, &Scripts::cmdCutsceneEndClouds, &Scripts::cmdTeleport, &Scripts::cmdWhoWill, &Scripts::cmdRndDamage, &Scripts::cmdMoveWallObj, &Scripts::cmdAlterCellFlag, &Scripts::cmdAlterHed, &Scripts::cmdDisplayStat, &Scripts::cmdTakeOrGive, - &Scripts::cmdSeatTextSml, &Scripts::cmdPlayEventVoc, &Scripts::cmdDisplayBottom, - &Scripts::cmdIfMapFlag, &Scripts::cmdSelRndChar, &Scripts::cmdGiveEnchanted, + &Scripts::cmdSignTextSml, &Scripts::cmdPlayEventVoc, &Scripts::cmdDisplayBottom, + &Scripts::cmdIfMapFlag, &Scripts::cmdSelectRandomChar, &Scripts::cmdGiveEnchanted, &Scripts::cmdItemType, &Scripts::cmdMakeNothingHere, &Scripts::cmdCheckProtection, &Scripts::cmdChooseNumeric, &Scripts::cmdDisplayBottomTwoLines, &Scripts::cmdDisplayLarge, &Scripts::cmdExchObj, &Scripts::cmdFallToMap, - &Scripts::cmdDisplayMain, &Scripts::cmdGoto, &Scripts::cmdConfirmWord, + &Scripts::cmdDisplayMain, &Scripts::cmdGoto, &Scripts::cmdConfirmEnding, &Scripts::cmdGotoRandom, &Scripts::cmdCutsceneEndDarkside, - &Scripts::cmdCutsceneEdWorld, &Scripts::cmdFlipWorld, &Scripts::cmdPlayCD + &Scripts::cmdCutsceneEndWorld, &Scripts::cmdFlipWorld, &Scripts::cmdPlayCD }; _event = &event; - (this->*COMMAND_LIST[event._opcode])(event._parameters); + + // Some opcodes use the first parameter as a message + int msgId = event._parameters.empty() ? 0 : event._parameters[0]; + _message = msgId >= map._events._text.size() ? "" : map._events._text[msgId]; + + // Execute the opcode + ParamsIterator params = event._parameters.getIterator(); + bool result = (this->*COMMAND_LIST[event._opcode])(params); + if (result) + // Move to next line + _lineNum = _vm->_party->_partyDead ? -1 : _lineNum + 1; + + return result; +} + +bool Scripts::cmdDoNothing(ParamsIterator ¶ms) { + return true; } -void Scripts::cmdDisplay1(Common::Array<byte> ¶ms) { +bool Scripts::cmdDisplay1(ParamsIterator ¶ms) { Screen &screen = *_vm->_screen; - Common::String paramText = _vm->_map->_events._text[_event->_parameters[0]]; + Common::String paramText = _vm->_map->_events._text[params.readByte()]; Common::String msg = Common::String::format("\r\x03""c%s", paramText.c_str()); screen._windows[12].close(); @@ -360,62 +398,70 @@ void Scripts::cmdDisplay1(Common::Array<byte> ¶ms) { screen._windows[38].writeString(msg); screen._windows[38].update(); - cmdNoAction(params); + return true; } -void Scripts::cmdDoorTextSml(Common::Array<byte> ¶ms) { +bool Scripts::cmdDoorTextSml(ParamsIterator ¶ms) { Interface &intf = *_vm->_interface; - Common::String paramText = _vm->_map->_events._text[_event->_parameters[0]]; + Common::String paramText = _vm->_map->_events._text[params.readByte()]; intf._screenText = Common::String::format("\x02\f""08\x03""c\t116\v025%s\x03""l\fd""\x01", paramText.c_str()); intf._upDoorText = true; intf.draw3d(true); - cmdNoAction(params); + return true; } -void Scripts::cmdDoorTextLrg(Common::Array<byte> ¶ms) { +bool Scripts::cmdDoorTextLrg(ParamsIterator ¶ms) { Interface &intf = *_vm->_interface; - Common::String paramText = _vm->_map->_events._text[_event->_parameters[0]]; + Common::String paramText = _vm->_map->_events._text[params.readByte()]; intf._screenText = Common::String::format("\f04\x03""c\t116\v030%s\x03""l\fd", paramText.c_str()); intf._upDoorText = true; intf.draw3d(true); - cmdNoAction(params); + return true; } -void Scripts::cmdSignText(Common::Array<byte> ¶ms) { +bool Scripts::cmdSignText(ParamsIterator ¶ms) { Interface &intf = *_vm->_interface; - Common::String paramText = _vm->_map->_events._text[_event->_parameters[0]]; + Common::String paramText = _vm->_map->_events._text[params.readByte()]; intf._screenText = Common::String::format("\f08\x03""c\t120\v088%s\x03""l\fd", paramText.c_str()); intf._upDoorText = true; intf.draw3d(true); - cmdNoAction(params); + return true; } -void Scripts::cmdNPC(Common::Array<byte> ¶ms) { +bool Scripts::cmdNPC(ParamsIterator ¶ms) { Map &map = *_vm->_map; - if (TownMessage::show(_vm, params[2], _message, map._events._text[params[1]], - params[3])) - _lineNum = params[4] - 1; + params.readByte(); + int textNum = params.readByte(); + int portrait = params.readByte(); + int confirm = params.readByte(); + int lineNum = params.readByte(); + + if (TownMessage::show(_vm, portrait, _message, map._events._text[textNum], + confirm)) { + _lineNum = lineNum; + return false; + } - cmdNoAction(params); + return true; } -void Scripts::cmdPlayFX(Common::Array<byte> ¶ms) { - _vm->_sound->playFX(params[0]); +bool Scripts::cmdPlayFX(ParamsIterator ¶ms) { + _vm->_sound->playFX(params.readByte()); - cmdNoAction(params); + return true; } -void Scripts::cmdTeleport(Common::Array<byte> ¶ms) { +bool Scripts::cmdTeleport(ParamsIterator ¶ms) { EventsManager &events = *_vm->_events; Interface &intf = *_vm->_interface; Map &map = *_vm->_map; @@ -425,12 +471,12 @@ void Scripts::cmdTeleport(Common::Array<byte> ¶ms) { screen.closeWindows(); - int mapId; + int mapId = params.readByte(); Common::Point pt; - if (params[0]) { - mapId = params[0]; - pt = Common::Point((int8)params[1], (int8)params[2]); + if (mapId) { + pt.x = params.readShort(); + pt.y = params.readShort(); } else { assert(_mirrorId > 0); MirrorEntry &me = _mirror[_mirrorId - 1]; @@ -476,130 +522,128 @@ void Scripts::cmdTeleport(Common::Array<byte> ¶ms) { if (_event->_opcode == OP_TeleportAndContinue) { intf.draw3d(true); _lineNum = 0; + return true; } else { - cmdExit(params); + return cmdExit(params); } } -void Scripts::cmdIf(Common::Array<byte> ¶ms) { +bool Scripts::cmdIf(ParamsIterator ¶ms) { Party &party = *_vm->_party; - uint32 mask; + uint32 val; int newLineNum; - switch (params[0]) { + int mode = params.readByte(); + switch (mode) { case 16: case 34: case 100: - mask = (params[4] << 24) | (params[3] << 16) | (params[2] << 8) | params[1]; - newLineNum = params[5]; + val = params.readUint32LE(); break; case 25: case 35: case 101: case 106: - mask = (params[2] << 8) | params[1]; - newLineNum = params[3]; + val = params.readUint16LE(); break; default: - mask = params[1]; - newLineNum = params[2]; + val = params.readByte(); break; } + newLineNum = params.readByte(); bool result; - if ((_charIndex != 0 && _charIndex != 8) || params[0] == 44) { - result = ifProc(params[0], mask, _event->_opcode - 8, _charIndex - 1); + if ((_charIndex != 0 && _charIndex != 8) || mode == 44) { + result = ifProc(mode, val, _event->_opcode - 8, _charIndex - 1); } else { result = false; for (int idx = 0; idx < (int)party._activeParty.size() && !result; ++idx) { if (_charIndex == 0 || (_charIndex == 8 && (int)idx != _v2)) { - result = ifProc(params[0], mask, _event->_opcode - 8, idx); + result = ifProc(mode, val, _event->_opcode - 8, idx); } } } - if (result) - _lineNum = newLineNum - 1; + if (result) { + _lineNum = newLineNum; + return false; + } - cmdNoAction(params); + return true; } -void Scripts::cmdMoveObj(Common::Array<byte> ¶ms) { - MazeObject &mazeObj = _vm->_map->_mobData._objects[params[0]]; +bool Scripts::cmdMoveObj(ParamsIterator ¶ms) { + MazeObject &mazeObj = _vm->_map->_mobData._objects[params.readByte()]; + int x = params.readShort(), y = params.readShort(); - if (mazeObj._position.x == params[1] && mazeObj._position.y == params[2]) { + if (mazeObj._position.x == x && mazeObj._position.y == y) { // Already in position, so simply flip it mazeObj._flipped = !mazeObj._flipped; } else { - mazeObj._position.x = params[1]; - mazeObj._position.y = params[2]; + mazeObj._position.x = x; + mazeObj._position.y = y; } + + return true; } -void Scripts::cmdTakeOrGive(Common::Array<byte> ¶ms) { +bool Scripts::cmdTakeOrGive(ParamsIterator ¶ms) { Party &party = *_vm->_party; Screen &screen = *_vm->_screen; int mode1, mode2, mode3, param2; - uint32 mask1, mask2, mask3; - byte *extraP; + uint32 val1, val2, val3; - mode1 = params[0]; + mode1 = params.readByte(); switch (mode1) { case 16: case 34: case 100: - mask1 = (params[4] << 24) | (params[3] << 16) | (params[2] << 8) | params[1]; - extraP = ¶ms[5]; + val1 = params.readUint32LE(); break; case 25: case 35: case 101: case 106: - mask1 = (params[2] << 8) | params[1]; - extraP = ¶ms[3]; + val1 = params.readUint16LE(); break; default: - mask1 = params[1]; - extraP = ¶ms[9]; + val1 = params.readByte(); break; } - param2 = mode2 = *extraP++; + param2 = mode2 = params.readByte(); switch (mode2) { case 16: case 34: case 100: - mask2 = (extraP[3] << 24) | (extraP[2] << 16) | (extraP[1] << 8) | extraP[0]; - extraP += 4; + val2 = params.readUint32LE(); break; case 25: case 35: case 101: case 106: - mask2 = (extraP[1] << 8) | extraP[0]; - extraP += 2; + val2 = params.readUint16LE(); break; default: - mask2 = extraP[0]; - extraP++; + val2 = params.readByte(); break; } - mode3 = *extraP++; + mode3 = params.readByte(); switch (mode3) { case 16: case 34: case 100: - mask3 = (extraP[3] << 24) | (extraP[2] << 16) | (extraP[1] << 8) | extraP[0]; + val3 = params.readUint32LE(); break; case 25: case 35: case 101: case 106: - mask3 = (extraP[1] << 8) | extraP[0]; + val3 = params.readUint16LE(); break; default: - mask3 = extraP[0]; + val3 = params.readByte(); break; } @@ -611,15 +655,15 @@ void Scripts::cmdTakeOrGive(Common::Array<byte> ¶ms) { if (_charIndex == 0 || _charIndex == 8) { for (uint idx = 0; idx < party._activeParty.size(); ++idx) { if (_charIndex == 0 || (_charIndex == 8 && (int)idx != _v2)) { - if (ifProc(params[0], mask1, _event->_opcode == OP_TakeOrGive_4 ? 2 : 1, idx)) { - party.giveTake(0, 0, mode2, mask2, idx); + if (ifProc(mode1, val1, _event->_opcode == OP_TakeOrGive_4 ? 2 : 1, idx)) { + party.giveTake(0, 0, mode2, val2, idx); if (mode2 == 82) break; } } } - } else if (ifProc(params[0], mask1, _event->_opcode == OP_TakeOrGive_4 ? 2 : 1, _charIndex - 1)) { - party.giveTake(0, 0, mode2, mask2, _charIndex - 1); + } else if (ifProc(mode1, val1, _event->_opcode == OP_TakeOrGive_4 ? 2 : 1, _charIndex - 1)) { + party.giveTake(0, 0, mode2, val2, _charIndex - 1); } break; @@ -627,16 +671,16 @@ void Scripts::cmdTakeOrGive(Common::Array<byte> ¶ms) { if (_charIndex == 0 || _charIndex == 8) { for (uint idx = 0; idx < party._activeParty.size(); ++idx) { if (_charIndex == 0 || (_charIndex == 8 && (int)idx != _v2)) { - if (ifProc(params[0], mask1, 1, idx) && ifProc(mode2, mask2, 1, idx)) { - party.giveTake(0, 0, mode2, mask3, idx); + if (ifProc(mode1, val1, 1, idx) && ifProc(mode2, val2, 1, idx)) { + party.giveTake(0, 0, mode2, val3, idx); if (mode2 == 82) break; } } } - } else if (ifProc(params[0], mask1, 1, _charIndex - 1) && - ifProc(mode2, mask2, 1, _charIndex - 1)) { - party.giveTake(0, 0, mode2, mask3, _charIndex - 1); + } else if (ifProc(mode1, val1, 1, _charIndex - 1) && + ifProc(mode2, val2, 1, _charIndex - 1)) { + party.giveTake(0, 0, mode2, val3, _charIndex - 1); } break; @@ -644,15 +688,15 @@ void Scripts::cmdTakeOrGive(Common::Array<byte> ¶ms) { if (_charIndex == 0 || _charIndex == 8) { for (uint idx = 0; idx < party._activeParty.size(); ++idx) { if (_charIndex == 0 || (_charIndex == 8 && (int)idx != _v2)) { - if (ifProc(params[0], mask1, _event->_opcode == OP_TakeOrGive_4 ? 2 : 1, idx)) { - party.giveTake(0, 0, mode2, mask2, idx); + if (ifProc(mode1, val1, _event->_opcode == OP_TakeOrGive_4 ? 2 : 1, idx)) { + party.giveTake(0, 0, mode2, val2, idx); if (mode2 == 82) break; } } } - } else if (ifProc(params[0], mask1, 1, _charIndex - 1)) { - party.giveTake(0, 0, mode2, mask2, _charIndex - 1); + } else if (ifProc(mode1, val1, 1, _charIndex - 1)) { + party.giveTake(0, 0, mode2, val2, _charIndex - 1); } break; @@ -660,7 +704,7 @@ void Scripts::cmdTakeOrGive(Common::Array<byte> ¶ms) { if (_charIndex == 0 || _charIndex == 8) { for (uint idx = 0; idx < party._activeParty.size(); ++idx) { if (_charIndex == 0 || (_charIndex == 8 && (int)idx != _v2)) { - party.giveTake(mode1, mask1, mode1, mask2, idx); + party.giveTake(mode1, val1, mode2, val2, idx); switch (mode1) { case 8: @@ -699,7 +743,7 @@ void Scripts::cmdTakeOrGive(Common::Array<byte> ¶ms) { case 106: if (param2) { _lineNum = -1; - return; + return false; } // Break out of character loop @@ -731,7 +775,7 @@ void Scripts::cmdTakeOrGive(Common::Array<byte> ¶ms) { } } } else { - if (!party.giveTake(mode1, mask1, mode2, mask2, _charIndex - 1)) { + if (!party.giveTake(mode1, val1, mode2, val2, _charIndex - 1)) { if (mode2 == 79) screen.closeWindows(); } @@ -739,15 +783,10 @@ void Scripts::cmdTakeOrGive(Common::Array<byte> ¶ms) { break; } - cmdNoAction(params); -} - -void Scripts::cmdNoAction(Common::Array<byte> ¶ms) { - // Move to next line - _lineNum = _vm->_party->_partyDead ? -1 : _lineNum + 1; + return true; } -void Scripts::cmdRemove(Common::Array<byte> ¶ms) { +bool Scripts::cmdRemove(ParamsIterator ¶ms) { Interface &intf = *_vm->_interface; Map &map = *_vm->_map; @@ -758,125 +797,144 @@ void Scripts::cmdRemove(Common::Array<byte> ¶ms) { } cmdMakeNothingHere(params); + return true; } -void Scripts::cmdSetChar(Common::Array<byte> ¶ms) { - if (params[0] != 7) { - _charIndex = WhoWill::show(_vm, 22, 3, false); - if (_charIndex == 0) { - cmdExit(params); - return; - } - } else { +bool Scripts::cmdSetChar(ParamsIterator ¶ms) { + int charId = params.readByte(); + + if (charId == 0) { + _charIndex = 0; + _v2 = 0; + } else if (charId < 7) { + _v2 = charId; + } else if (charId == 7) { _charIndex = _vm->getRandomNumber(1, _vm->_party->_activeParty.size()); + _v2 = 1; + } else { + _charIndex = WhoWill::show(_vm, 22, 3, false); + if (_charIndex == 0) + return cmdExit(params); } - _v2 = 1; - cmdNoAction(params); + return true; } -void Scripts::cmdSpawn(Common::Array<byte> ¶ms) { +bool Scripts::cmdSpawn(ParamsIterator ¶ms) { Map &map = *_vm->_map; - if (params[0] >= map._mobData._monsters.size()) - map._mobData._monsters.resize(params[0] + 1); + uint index = params.readByte(); - MazeMonster &monster = _vm->_map->_mobData._monsters[params[0]]; + if (index >= map._mobData._monsters.size()) + map._mobData._monsters.resize(index + 1); + + MazeMonster &monster = _vm->_map->_mobData._monsters[index]; MonsterStruct &monsterData = _vm->_map->_monsterData[monster._spriteId]; monster._monsterData = &monsterData; - monster._position.x = params[1]; - monster._position.y = params[2]; + monster._position.x = params.readShort(); + monster._position.y = params.readShort(); monster._frame = _vm->getRandomNumber(7); - monster._damageType = 0; - monster._isAttacking = params[1] != 0; + monster._damageType = DT_PHYSICAL; + monster._isAttacking = false; monster._hp = monsterData._hp; - cmdNoAction(params); + return true; } -void Scripts::cmdDoTownEvent(Common::Array<byte> ¶ms) { - _scriptResult = _vm->_town->townAction(params[0]); +bool Scripts::cmdDoTownEvent(ParamsIterator ¶ms) { + _scriptResult = _vm->_town->townAction((TownAction)params.readByte()); _vm->_party->_stepped = true; _refreshIcons = true; - cmdExit(params); + return cmdExit(params); } -void Scripts::cmdExit(Common::Array<byte> ¶ms) { +bool Scripts::cmdExit(ParamsIterator ¶ms) { _lineNum = -1; + return false; } -void Scripts::cmdAlterMap(Common::Array<byte> ¶ms) { +bool Scripts::cmdAlterMap(ParamsIterator ¶ms) { Map &map = *_vm->_map; - - if (params[2] == DIR_ALL) { - for (int dir = DIR_NORTH; dir <= DIR_WEST; ++dir) - map.setWall(Common::Point(params[0], params[1]), (Direction)dir, params[3]); + int x = params.readShort(); + int y = params.readShort(); + Direction dir = (Direction)params.readByte(); + int val = params.readByte(); + + if (dir == DIR_ALL) { + for (dir = DIR_NORTH; dir <= DIR_WEST; dir = (Direction)((int)dir + 1)) + map.setWall(Common::Point(x, y), dir, val); } else { - map.setWall(Common::Point(params[0], params[1]), (Direction)params[2], params[3]); + map.setWall(Common::Point(x, y), dir, val); } - cmdNoAction(params); + return true; } -void Scripts::cmdGiveExtended(Common::Array<byte> ¶ms) { +bool Scripts::cmdGiveExtended(ParamsIterator ¶ms) { Party &party = *_vm->_party; - uint32 mask; + uint32 val; int newLineNum; bool result; - switch (params[0]) { + int mode = params.readByte(); + switch (mode) { case 16: case 34: case 100: - mask = (params[4] << 24) | params[3] | (params[2] << 8) | (params[1] << 16); - newLineNum = params[5]; + val = params.readUint32LE(); break; case 25: case 35: case 101: case 106: - mask = (params[2] << 8) | params[1]; - newLineNum = params[3]; + val = params.readUint16LE(); break; default: - mask = params[1]; - newLineNum = params[2]; + val = params.readByte(); break; } + newLineNum = params.readByte(); - if ((_charIndex != 0 && _charIndex != 8) || params[0] == 44) { - result = ifProc(params[0], mask, _event->_opcode - OP_If1, _charIndex - 1); + if ((_charIndex != 0 && _charIndex != 8) || mode == 44) { + result = ifProc(mode, val, _event->_opcode - OP_If1, _charIndex - 1); } else { result = false; for (int idx = 0; idx < (int)party._activeParty.size() && !result; ++idx) { if (_charIndex == 0 || (_charIndex == 8 && _v2 != idx)) { - result = ifProc(params[0], mask, _event->_opcode - OP_If1, idx); + result = ifProc(mode, val, _event->_opcode - OP_If1, idx); } } } - if (result) - _lineNum = newLineNum - 1; + if (result) { + _lineNum = newLineNum; + return false; + } - cmdNoAction(params); + return true; } -void Scripts::cmdConfirmWord(Common::Array<byte> ¶ms) { +bool Scripts::cmdConfirmEnding(ParamsIterator ¶ms) { Map &map = *_vm->_map; Party &party = *_vm->_party; - Common::String msg1 = params[2] ? map._events._text[params[2]] : + int inputType = params.readByte(); + int lineNum = params.readByte(); + int param2 = params.readByte(); + int param3 = params.readByte(); + + Common::String msg1 = param2 ? map._events._text[param2] : _vm->_interface->_interfaceText; Common::String msg2; if (_event->_opcode == OP_ConfirmWord_2) { - msg2 = map._events._text[params[3]]; - } else if (params[3]) { + msg2 = map._events._text[param3]; + } else if (param3) { msg2 = ""; } else { msg2 = Res.WHATS_THE_PASSWORD; } - int result = StringInput::show(_vm, params[0], msg1, msg2,_event->_opcode); + int result = StringInput::show(_vm, inputType, msg1, msg2,_event->_opcode); if (result) { if (result == 33 && _vm->_files->_isDarkCc) { doEndGame2(); @@ -889,8 +947,7 @@ void Scripts::cmdConfirmWord(Common::Array<byte> ¶ms) { doEndGame(); } else if (result == 60 && !_vm->_files->_isDarkCc) { doEndGame2(); - } - else if (result == 61 && !_vm->_files->_isDarkCc) { + } else if (result == 61 && !_vm->_files->_isDarkCc) { doWorldEnd(); } else { if (result == 59 && !_vm->_files->_isDarkCc) { @@ -902,22 +959,19 @@ void Scripts::cmdConfirmWord(Common::Array<byte> ¶ms) { item._bonusFlags = 0; party._treasure._hasItems = true; - cmdExit(params); - return; + return cmdExit(params); } } } - _lineNum = result == -1 ? params[3] : params[1]; - - return; + _lineNum = result == -1 ? param3 : lineNum; } } - cmdNoAction(params); + return true; } -void Scripts::cmdDamage(Common::Array<byte> ¶ms) { +bool Scripts::cmdDamage(ParamsIterator ¶ms) { Combat &combat = *_vm->_combat; Interface &intf = *_vm->_interface; @@ -926,100 +980,109 @@ void Scripts::cmdDamage(Common::Array<byte> ¶ms) { _redrawDone = true; } - int damage = (params[1] << 8) | params[0]; - combat.giveCharDamage(damage, (DamageType)params[2], _charIndex); + int damage = params.readUint16LE(); + DamageType damageType = (DamageType)params.readByte(); + combat.giveCharDamage(damage, damageType, _charIndex); - cmdNoAction(params); + return true; } -void Scripts::cmdJumpRnd(Common::Array<byte> ¶ms) { - int v = _vm->getRandomNumber(1, params[0]); - if (v == params[1]) - _lineNum = params[2] - 1; +bool Scripts::cmdJumpRnd(ParamsIterator ¶ms) { + int v = _vm->getRandomNumber(1, params.readByte()); + if (v == params.readByte()) { + _lineNum = params.readByte(); + return false; + } - cmdNoAction(params); + return true; } -void Scripts::cmdAlterEvent(Common::Array<byte> ¶ms) { +bool Scripts::cmdAlterEvent(ParamsIterator ¶ms) { Map &map = *_vm->_map; Party &party = *_vm->_party; + int lineNum = params.readByte(); + Opcode opcode = (Opcode)params.readByte(); for (uint idx = 0; idx < map._events.size(); ++idx) { MazeEvent &evt = map._events[idx]; if (evt._position == party._mazePosition && (evt._direction == DIR_ALL || evt._direction == party._mazeDirection) && - evt._line == params[0]) { - evt._opcode = (Opcode)params[1]; + evt._line == lineNum) { + evt._opcode = opcode; } } - cmdNoAction(params); + return true; } -void Scripts::cmdCallEvent(Common::Array<byte> ¶ms) { +bool Scripts::cmdCallEvent(ParamsIterator ¶ms) { _stack.push(StackEntry(_currentPos, _lineNum)); - _currentPos = Common::Point(params[0], params[1]); - _lineNum = params[2] - 1; + _currentPos.x = params.readShort(); + _currentPos.y = params.readShort(); + _lineNum = params.readByte(); - cmdNoAction(params); + return false; } -void Scripts::cmdReturn(Common::Array<byte> ¶ms) { +bool Scripts::cmdReturn(ParamsIterator ¶ms) { StackEntry &se = _stack.top(); _currentPos = se; _lineNum = se.line; - cmdNoAction(params); + return true; } -void Scripts::cmdSetVar(Common::Array<byte> ¶ms) { +bool Scripts::cmdSetVar(ParamsIterator ¶ms) { Party &party = *_vm->_party; uint val; _refreshIcons = true; - switch (params[0]) { + int mode = params.readByte(); + switch (mode) { case 25: case 35: case 101: case 106: - val = (params[2] << 8) | params[1]; + val = params.readUint16LE(); break; case 16: case 34: case 100: - val = (params[4] << 24) | (params[3] << 16) | (params[2] << 8) | params[3]; + val = params.readUint32LE(); break; default: - val = params[1]; + val = params.readByte(); break; } if (_charIndex != 0 && _charIndex != 8) { - party._activeParty[_charIndex - 1].setValue(params[0], val); + party._activeParty[_charIndex - 1].setValue(mode, val); } else { // Set value for entire party for (int idx = 0; idx < (int)party._activeParty.size(); ++idx) { if (_charIndex == 0 || (_charIndex == 8 && _v2 != idx)) { - party._activeParty[idx].setValue(params[0], val); + party._activeParty[idx].setValue(mode, val); } } } - cmdNoAction(params); + return true; } -void Scripts::cmdCutsceneEndClouds(Common::Array<byte> ¶ms) { error("TODO"); } +bool Scripts::cmdCutsceneEndClouds(ParamsIterator ¶ms) { error("TODO"); } -void Scripts::cmdWhoWill(Common::Array<byte> ¶ms) { - _charIndex = WhoWill::show(_vm, params[0], params[1], true); +bool Scripts::cmdWhoWill(ParamsIterator ¶ms) { + int msg = params.readByte(); + int action = params.readByte(); + _charIndex = WhoWill::show(_vm, msg, action, true); if (_charIndex == 0) - cmdExit(params); + return cmdExit(params); else - cmdNoAction(params); + return true; } -void Scripts::cmdRndDamage(Common::Array<byte> ¶ms) { +bool Scripts::cmdRndDamage(ParamsIterator ¶ms) { Combat &combat = *_vm->_combat; Interface &intf = *_vm->_interface; @@ -1028,47 +1091,56 @@ void Scripts::cmdRndDamage(Common::Array<byte> ¶ms) { _redrawDone = true; } - combat.giveCharDamage(_vm->getRandomNumber(1, params[1]), (DamageType)params[0], _charIndex); - cmdNoAction(params); + DamageType dmgType = (DamageType)params.readByte(); + int max = params.readByte(); + combat.giveCharDamage(_vm->getRandomNumber(1, max), dmgType, _charIndex); + return true; } -void Scripts::cmdMoveWallObj(Common::Array<byte> ¶ms) { +bool Scripts::cmdMoveWallObj(ParamsIterator ¶ms) { Map &map = *_vm->_map; + int itemNum = params.readByte(); + int x = params.readShort(); + int y = params.readShort(); - map._mobData._wallItems[params[0]]._position = Common::Point(params[1], params[2]); - cmdNoAction(params); + map._mobData._wallItems[itemNum]._position = Common::Point(x, y); + return true; } -void Scripts::cmdAlterCellFlag(Common::Array<byte> ¶ms) { +bool Scripts::cmdAlterCellFlag(ParamsIterator ¶ms) { Map &map = *_vm->_map; - Common::Point pt(params[0], params[1]); + Common::Point pt; + pt.x = params.readShort(); + pt.y = params.readShort(); + int surfaceId = params.readByte(); + map.cellFlagLookup(pt); if (map._isOutdoors) { MazeWallLayers &wallData = map.mazeDataCurrent()._wallData[pt.y][pt.x]; - wallData._data = (wallData._data & 0xFFF0) | params[2]; + wallData._data = (wallData._data & 0xFFF0) | surfaceId; } else { pt.x &= 0xF; pt.y &= 0xF; MazeCell &cell = map.mazeDataCurrent()._cells[pt.y][pt.x]; - cell._surfaceId = params[2]; + cell._surfaceId = surfaceId; } - cmdNoAction(params); + return true; } -void Scripts::cmdAlterHed(Common::Array<byte> ¶ms) { +bool Scripts::cmdAlterHed(ParamsIterator ¶ms) { Map &map = *_vm->_map; Party &party = *_vm->_party; HeadData::HeadEntry &he = map._headData[party._mazePosition.y][party._mazePosition.x]; - he._left = params[0]; - he._right = params[1]; + he._left = params.readByte(); + he._right = params.readByte(); - cmdNoAction(params); + return true; } -void Scripts::cmdDisplayStat(Common::Array<byte> ¶ms) { +bool Scripts::cmdDisplayStat(ParamsIterator ¶ms) { Party &party = *_vm->_party; Window &w = _vm->_screen->_windows[12]; Character &c = party._activeParty[_charIndex - 1]; @@ -1078,10 +1150,10 @@ void Scripts::cmdDisplayStat(Common::Array<byte> ¶ms) { w.writeString(Common::String::format(_message.c_str(), c._name.c_str())); w.update(); - cmdNoAction(params); + return true; } -void Scripts::cmdSeatTextSml(Common::Array<byte> ¶ms) { +bool Scripts::cmdSignTextSml(ParamsIterator ¶ms) { Interface &intf = *_vm->_interface; intf._screenText = Common::String::format("\x2\f08\x3""c\t116\v090%s\x3l\fd\x1", @@ -1089,86 +1161,88 @@ void Scripts::cmdSeatTextSml(Common::Array<byte> ¶ms) { intf._upDoorText = true; intf.draw3d(true); - cmdNoAction(params); + return true; } -void Scripts::cmdPlayEventVoc(Common::Array<byte> ¶ms) { +bool Scripts::cmdPlayEventVoc(ParamsIterator ¶ms) { Sound &sound = *_vm->_sound; sound.stopSound(); - sound.playSound(Res.EVENT_SAMPLES[params[0]], 1); + sound.playSound(Res.EVENT_SAMPLES[params.readByte()], 1); - cmdNoAction(params); + return true; } -void Scripts::cmdDisplayBottom(Common::Array<byte> ¶ms) { +bool Scripts::cmdDisplayBottom(ParamsIterator ¶ms) { _windowIndex = 12; display(false, 0); - cmdNoAction(params); + return true; } -void Scripts::cmdIfMapFlag(Common::Array<byte> ¶ms) { +bool Scripts::cmdIfMapFlag(ParamsIterator ¶ms) { Map &map = *_vm->_map; - MazeMonster &monster = map._mobData._monsters[params[0]]; + MazeMonster &monster = map._mobData._monsters[params.readByte()]; if (monster._position.x >= 32 || monster._position.y >= 32) { - _lineNum = params[1] - 1; + _lineNum = params.readByte(); + return false; } - cmdNoAction(params); + return true; } -void Scripts::cmdSelRndChar(Common::Array<byte> ¶ms) { +bool Scripts::cmdSelectRandomChar(ParamsIterator ¶ms) { _charIndex = _vm->getRandomNumber(1, _vm->_party->_activeParty.size()); - cmdNoAction(params); + return true; } -void Scripts::cmdGiveEnchanted(Common::Array<byte> ¶ms) { +bool Scripts::cmdGiveEnchanted(ParamsIterator ¶ms) { Party &party = *_vm->_party; - if (params[0] >= 35) { - if (params[0] < 49) { + int id = params.readByte(); + int material = params.readByte(); + int flags = params.readByte(); + + if (id >= 35) { + if (id < 49) { for (int idx = 0; idx < MAX_TREASURE_ITEMS; ++idx) { XeenItem &item = party._treasure._armor[idx]; if (!item.empty()) { - item._id = params[0] - 35; - item._material = params[1]; - item._bonusFlags = params[2]; + item._id = id - 35; + item._material = material; + item._bonusFlags = flags; party._treasure._hasItems = true; break; } } - cmdNoAction(params); - return; - } else if (params[0] < 60) { + return true; + } else if (id < 60) { for (int idx = 0; idx < MAX_TREASURE_ITEMS; ++idx) { XeenItem &item = party._treasure._accessories[idx]; if (!item.empty()) { - item._id = params[0] - 49; - item._material = params[1]; - item._bonusFlags = params[2]; + item._id = id - 49; + item._material = material; + item._bonusFlags = flags; party._treasure._hasItems = true; break; } } - cmdNoAction(params); - return; - } else if (params[0] < 82) { + return true; + } else if (id < 82) { for (int idx = 0; idx < MAX_TREASURE_ITEMS; ++idx) { XeenItem &item = party._treasure._misc[idx]; if (!item.empty()) { - item._id = params[0]; - item._material = params[1]; - item._bonusFlags = params[2]; + item._id = id; + item._material = material; + item._bonusFlags = flags; party._treasure._hasItems = true; break; } } - cmdNoAction(params); - return; + return true; } else { error("Invalid id"); } @@ -1177,22 +1251,24 @@ void Scripts::cmdGiveEnchanted(Common::Array<byte> ¶ms) { for (int idx = 0; idx < MAX_TREASURE_ITEMS; ++idx) { XeenItem &item = party._treasure._weapons[idx]; if (!item.empty()) { - item._id = params[0]; - item._material = params[1]; - item._bonusFlags = params[2]; + item._id = id; + item._material = material; + item._bonusFlags = flags; party._treasure._hasItems = true; break; } } + + return true; } -void Scripts::cmdItemType(Common::Array<byte> ¶ms) { - _itemType = params[0]; +bool Scripts::cmdItemType(ParamsIterator ¶ms) { + _itemType = params.readByte(); - cmdNoAction(params); + return true; } -void Scripts::cmdMakeNothingHere(Common::Array<byte> ¶ms) { +bool Scripts::cmdMakeNothingHere(ParamsIterator ¶ms) { Map &map = *_vm->_map; Party &party = *_vm->_party; @@ -1204,33 +1280,36 @@ void Scripts::cmdMakeNothingHere(Common::Array<byte> ¶ms) { evt._opcode = OP_None; } - cmdExit(params); + return cmdExit(params); } -void Scripts::cmdCheckProtection(Common::Array<byte> ¶ms) { +bool Scripts::cmdCheckProtection(ParamsIterator ¶ms) { if (copyProtectionCheck()) - cmdNoAction(params); + return true; else - cmdExit(params); + return cmdExit(params); } -void Scripts::cmdChooseNumeric(Common::Array<byte> ¶ms) { - int choice = Choose123::show(_vm, params[0]); +bool Scripts::cmdChooseNumeric(ParamsIterator ¶ms) { + int choice = Choose123::show(_vm, params.readByte()); if (choice) { - _lineNum = params[choice] - 1; + _lineNum = _event->_parameters[choice]; + return false; } - cmdNoAction(params); + return true; } -void Scripts::cmdDisplayBottomTwoLines(Common::Array<byte> ¶ms) { +bool Scripts::cmdDisplayBottomTwoLines(ParamsIterator ¶ms) { Map &map = *_vm->_map; Window &w = _vm->_screen->_windows[12]; - warning("TODO: cmdDisplayBottomTwoLines"); + params.readByte(); + int textId = params.readByte(); + Common::String msg = Common::String::format("\r\x03c\t000\v007%s\n\n%s", "", - map._events._text[params[1]].c_str()); + map._events._text[textId].c_str()); w.close(); w.open(); w.writeString(msg); @@ -1238,57 +1317,64 @@ void Scripts::cmdDisplayBottomTwoLines(Common::Array<byte> ¶ms) { YesNo::show(_vm, true); _lineNum = -1; + return false; } -void Scripts::cmdDisplayLarge(Common::Array<byte> ¶ms) { +bool Scripts::cmdDisplayLarge(ParamsIterator ¶ms) { error("TODO: Implement event text loading"); display(true, 0); - cmdNoAction(params); + return true; } -void Scripts::cmdExchObj(Common::Array<byte> ¶ms) { - MazeObject &obj1 = _vm->_map->_mobData._objects[params[0]]; - MazeObject &obj2 = _vm->_map->_mobData._objects[params[1]]; +bool Scripts::cmdExchObj(ParamsIterator ¶ms) { + int id1 = params.readByte(), id2 = params.readByte(); + + MazeObject &obj1 = _vm->_map->_mobData._objects[id1]; + MazeObject &obj2 = _vm->_map->_mobData._objects[id2]; Common::Point pt = obj1._position; obj1._position = obj2._position; obj2._position = pt; - cmdNoAction(params); + return true; } -void Scripts::cmdFallToMap(Common::Array<byte> ¶ms) { +bool Scripts::cmdFallToMap(ParamsIterator ¶ms) { Interface &intf = *_vm->_interface; Party &party = *_vm->_party; - party._fallMaze = params[0]; - party._fallPosition = Common::Point(params[1], params[2]); - party._fallDamage = params[3]; + party._fallMaze = params.readByte(); + party._fallPosition.x = params.readShort(); + party._fallPosition.y = params.readShort(); + party._fallDamage = params.readByte(); intf.startFalling(true); _lineNum = -1; + return false; } -void Scripts::cmdDisplayMain(Common::Array<byte> ¶ms) { +bool Scripts::cmdDisplayMain(ParamsIterator ¶ms) { display(false, 0); - cmdNoAction(params); + return true; } -void Scripts::cmdGoto(Common::Array<byte> ¶ms) { +bool Scripts::cmdGoto(ParamsIterator ¶ms) { Map &map = *_vm->_map; map.getCell(1); - if (params[0] == map._currentSurfaceId) - _lineNum = params[1] - 1; + if (map._currentSurfaceId == params.readByte()) { + _lineNum = params.readByte(); + return false; + } - cmdNoAction(params); + return true; } -void Scripts::cmdGotoRandom(Common::Array<byte> ¶ms) { - _lineNum = params[_vm->getRandomNumber(1, params[0])] - 1; - cmdNoAction(params); +bool Scripts::cmdGotoRandom(ParamsIterator ¶ms) { + _lineNum = _event->_parameters[_vm->getRandomNumber(1, params.readByte())]; + return false; } -void Scripts::cmdCutsceneEndDarkside(Common::Array<byte> ¶ms) { +bool Scripts::cmdCutsceneEndDarkside(ParamsIterator ¶ms) { Party &party = *_vm->_party; _vm->_saves->_wonDarkSide = true; party._questItems[53] = 1; @@ -1298,19 +1384,23 @@ void Scripts::cmdCutsceneEndDarkside(Common::Array<byte> ¶ms) { party._mazePosition = Common::Point(25, 21); doEndGame2(); + return false; } -void Scripts::cmdCutsceneEdWorld(Common::Array<byte> ¶ms) { +bool Scripts::cmdCutsceneEndWorld(ParamsIterator ¶ms) { _vm->_saves->_wonWorld = true; _vm->_party->_worldEnd = true; + doWorldEnd(); + return false; } -void Scripts::cmdFlipWorld(Common::Array<byte> ¶ms) { - _vm->_map->_loadDarkSide = params[0] != 0; +bool Scripts::cmdFlipWorld(ParamsIterator ¶ms) { + _vm->_map->_loadDarkSide = params.readByte() != 0; + return true; } -void Scripts::cmdPlayCD(Common::Array<byte> ¶ms) { error("TODO"); } +bool Scripts::cmdPlayCD(ParamsIterator ¶ms) { error("TODO"); } void Scripts::doEndGame() { doEnding("ENDGAME", 0); @@ -1336,16 +1426,16 @@ void Scripts::doEndGame2() { } void Scripts::doWorldEnd() { - + error("TODO: doWorldEnd"); } void Scripts::doEnding(const Common::String &endStr, int v2) { _vm->_saves->saveChars(); - warning("TODO: doEnding"); + error("TODO: doEnding"); } -bool Scripts::ifProc(int action, uint32 mask, int mode, int charIndex) { +bool Scripts::ifProc(int action, uint32 val, int mode, int charIndex) { Party &party = *_vm->_party; Character &ps = party._activeParty[charIndex]; uint v = 0; @@ -1384,15 +1474,15 @@ bool Scripts::ifProc(int action, uint32 mask, int mode, int charIndex) { v = ps.getAge(false); break; case 13: - assert(mask < 18); - if (ps._skills[mask]) - v = mask; + assert(val < 18); + if (ps._skills[val]) + v = val; break; case 15: // Award - assert(mask < 128); - if (ps.hasAward(mask)) - v = mask; + assert(val < 128); + if (ps.hasAward(val)) + v = val; break; case 16: // Experience @@ -1404,9 +1494,9 @@ bool Scripts::ifProc(int action, uint32 mask, int mode, int charIndex) { break; case 18: // Condition - assert(mask < 16); - if (!ps._conditions[mask] && !(mask & 0x10)) - v = mask; + assert(val < 16); + if (!ps._conditions[val] && !(val & 0x10)) + v = val; break; case 19: { // Can player cast a given spell @@ -1433,10 +1523,10 @@ bool Scripts::ifProc(int action, uint32 mask, int mode, int charIndex) { // Check if the character class can cast the particular spell for (int idx = 0; idx < 39; ++idx) { - if (Res.SPELLS_ALLOWED[category][idx] == mask) { + if (Res.SPELLS_ALLOWED[category][idx] == val) { // Can cast it. Check if the player has it in their spellbook if (ps._spells[idx]) - v = mask; + v = val; break; } } @@ -1444,33 +1534,33 @@ bool Scripts::ifProc(int action, uint32 mask, int mode, int charIndex) { } case 20: if (_vm->_files->_isDarkCc) - mask += 256; - assert(mask < 512); - v = party._gameFlags[mask / 256][mask % 256] ? mask : 0xffffffff; + val += 256; + assert(val < 512); + v = party._gameFlags[val / 256][val % 256] ? val : 0xffffffff; break; case 21: // Scans inventories for given item number v = 0xFFFFFFFF; - if (mask < 82) { + if (val < 82) { for (int idx = 0; idx < 9; ++idx) { - if (mask == 35) { - if (ps._weapons[idx]._id == mask) { - v = mask; + if (val == 35) { + if (ps._weapons[idx]._id == val) { + v = val; break; } - } else if (mask < 49) { - if (ps._armor[idx]._id == (mask - 35)) { - v = mask; + } else if (val < 49) { + if (ps._armor[idx]._id == (val - 35)) { + v = val; break; } - } else if (mask < 60) { - if (ps._accessories[idx]._id == (mask - 49)) { - v = mask; + } else if (val < 60) { + if (ps._accessories[idx]._id == (val - 49)) { + v = val; break; } } else { - if (ps._misc[idx]._id == (mask - 60)) { - v = mask; + if (ps._misc[idx]._id == (val - 60)) { + v = val; break; } } @@ -1520,8 +1610,8 @@ bool Scripts::ifProc(int action, uint32 mask, int mode, int charIndex) { v = ps._luck._temporary; break; case 44: - v = YesNo::show(_vm, mask); - v = (!v && !mask) ? 2 : mask; + v = YesNo::show(_vm, val); + v = (!v && !val) ? 2 : val; break; case 45: // Might base (before bonus) @@ -1674,7 +1764,7 @@ bool Scripts::ifProc(int action, uint32 mask, int mode, int charIndex) { break; case 99: // Party skills check - v = party.checkSkill((Skill)mask) ? mask : 0xffffffff; + v = party.checkSkill((Skill)val) ? val : 0xffffffff; break; case 102: // Thievery skill @@ -1682,11 +1772,11 @@ bool Scripts::ifProc(int action, uint32 mask, int mode, int charIndex) { break; case 103: // Get value of world flag - v = party._worldFlags[mask] ? mask : 0xffffffff; + v = party._worldFlags[val] ? val : 0xffffffff; break; case 104: // Get value of quest flag - v = party._questFlags[_vm->_files->_isDarkCc][mask] ? mask : 0xffffffff; + v = party._questFlags[_vm->_files->_isDarkCc][val] ? val : 0xffffffff; break; case 105: // Test number of Megacredits in party. Only used by King's Engineer in Castle Burlock @@ -1702,11 +1792,11 @@ bool Scripts::ifProc(int action, uint32 mask, int mode, int charIndex) { switch (mode) { case 0: - return v >= mask; + return v >= val; case 1: - return v == mask; + return v == val; case 2: - return v <= mask; + return v <= val; default: return false; } diff --git a/engines/xeen/scripts.h b/engines/xeen/scripts.h index f2ffc90b5f..97029c7973 100644 --- a/engines/xeen/scripts.h +++ b/engines/xeen/scripts.h @@ -77,7 +77,7 @@ enum Opcode { OP_PlayEventVoc = 0x28, OP_DisplayBottom = 0x29, OP_IfMapFlag = 0x2A, - OP_SelRndChar = 0x2B, + OP_SelectRandomChar = 0x2B, OP_GiveEnchanted= 0x2C, OP_ItemType = 0x2D, OP_MakeNothingHere = 0x2E, @@ -99,13 +99,52 @@ enum Opcode { class XeenEngine; +class EventParameters : public Common::Array<byte> { +public: + class Iterator { + private: + uint _index; + const EventParameters &_data; + public: + Iterator(const EventParameters &owner) : _data(owner), _index(0) {} + Iterator(const Iterator &it) : _data(it._data), _index(0) {} + + /** + * Return a byte + */ + byte readByte(); + + /** + * Return a signed byte + */ + int8 readShort() { return (int8)readByte(); } + + /** + * Return a word + */ + uint16 readUint16LE(); + + /** + * Return a 32-bit dword + */ + uint32 readUint32LE(); + }; +public: + /** + * Return an iterator for getting parameters + */ + Iterator getIterator() const { + return Iterator(*this); + } +}; + class MazeEvent { public: Common::Point _position; int _direction; int _line; Opcode _opcode; - Common::Array<byte> _parameters; + EventParameters _parameters; public: MazeEvent(); @@ -155,152 +194,289 @@ private: Common::String _message; Common::String _displayMessage; + typedef EventParameters::Iterator ParamsIterator; + /** * Handles executing a given script command */ - void doOpcode(MazeEvent &event); + bool doOpcode(MazeEvent &event); + + /** + * Do nothing + */ + bool cmdDoNothing(ParamsIterator ¶ms); /** * Display a msesage on-screen */ - void cmdDisplay1(Common::Array<byte> ¶ms); + bool cmdDisplay1(ParamsIterator ¶ms); /** * Displays a door text message using the small font */ - void cmdDoorTextSml(Common::Array<byte> ¶ms); + bool cmdDoorTextSml(ParamsIterator ¶ms); /** * Displays a door text message using the large font */ - void cmdDoorTextLrg(Common::Array<byte> ¶ms); + bool cmdDoorTextLrg(ParamsIterator ¶ms); /** * Show a sign text on-screen */ - void cmdSignText(Common::Array<byte> ¶ms); - void cmdNPC(Common::Array<byte> ¶ms); + bool cmdSignText(ParamsIterator ¶ms); + + /** + * Show an NPC interaction message + */ + bool cmdNPC(ParamsIterator ¶ms); /** * Play a sound FX */ - void cmdPlayFX(Common::Array<byte> ¶ms); - void cmdTeleport(Common::Array<byte> ¶ms); + bool cmdPlayFX(ParamsIterator ¶ms); + + /** + * Handles teleportation + */ + bool cmdTeleport(ParamsIterator ¶ms); /** * Do a conditional check */ - void cmdIf(Common::Array<byte> ¶ms); + bool cmdIf(ParamsIterator ¶ms); /** * Moves the position of an object */ - void cmdMoveObj(Common::Array<byte> ¶ms); - void cmdTakeOrGive(Common::Array<byte> ¶ms); + bool cmdMoveObj(ParamsIterator ¶ms); + + /** + * Take or give amounts from various character or party figures + */ + bool cmdTakeOrGive(ParamsIterator ¶ms); /** - * Move to the next line of the script + * Removes an object from the playfield */ - void cmdNoAction(Common::Array<byte> ¶ms); - void cmdRemove(Common::Array<byte> ¶ms); + bool cmdRemove(ParamsIterator ¶ms); /** * Set the currently active character for other script operations */ - void cmdSetChar(Common::Array<byte> ¶ms); + bool cmdSetChar(ParamsIterator ¶ms); /** * Spawn a monster */ - void cmdSpawn(Common::Array<byte> ¶ms); - void cmdDoTownEvent(Common::Array<byte> ¶ms); + bool cmdSpawn(ParamsIterator ¶ms); + + /** + * Does various things that can be done within towns, like visiting + * banks, guilds, etc. + */ + bool cmdDoTownEvent(ParamsIterator ¶ms); /** * Stop executing the script */ - void cmdExit(Common::Array<byte> ¶ms); + bool cmdExit(ParamsIterator ¶ms); /** * Changes the value for the wall on a given cell */ - void cmdAlterMap(Common::Array<byte> ¶ms); - void cmdGiveExtended(Common::Array<byte> ¶ms); - void cmdConfirmWord(Common::Array<byte> ¶ms); - void cmdDamage(Common::Array<byte> ¶ms); + bool cmdAlterMap(ParamsIterator ¶ms); + + /** + * + */ + bool cmdGiveExtended(ParamsIterator ¶ms); + + /** + * Confirms with the player for initiating the endgame + */ + bool cmdConfirmEnding(ParamsIterator ¶ms); + + /** + * Deals damage to a character + */ + bool cmdDamage(ParamsIterator ¶ms); /** * Jump if a random number matches a given value */ - void cmdJumpRnd(Common::Array<byte> ¶ms); + bool cmdJumpRnd(ParamsIterator ¶ms); /** * Alter an existing event */ - void cmdAlterEvent(Common::Array<byte> ¶ms); + bool cmdAlterEvent(ParamsIterator ¶ms); /** * Stores the current location and line for later resuming, and set up to execute * a script at a given location */ - void cmdCallEvent(Common::Array<byte> ¶ms); + bool cmdCallEvent(ParamsIterator ¶ms); /** * Return from executing a script to the script location that previously * called the script */ - void cmdReturn(Common::Array<byte> ¶ms); - void cmdSetVar(Common::Array<byte> ¶ms); - void cmdCutsceneEndClouds(Common::Array<byte> ¶ms); - void cmdWhoWill(Common::Array<byte> ¶ms); - void cmdRndDamage(Common::Array<byte> ¶ms); - void cmdMoveWallObj(Common::Array<byte> ¶ms); - void cmdAlterCellFlag(Common::Array<byte> ¶ms); - void cmdAlterHed(Common::Array<byte> ¶ms); - void cmdDisplayStat(Common::Array<byte> ¶ms); - void cmdSeatTextSml(Common::Array<byte> ¶ms); - void cmdPlayEventVoc(Common::Array<byte> ¶ms); - void cmdDisplayBottom(Common::Array<byte> ¶ms); - void cmdIfMapFlag(Common::Array<byte> ¶ms); - void cmdSelRndChar(Common::Array<byte> ¶ms); - void cmdGiveEnchanted(Common::Array<byte> ¶ms); - void cmdItemType(Common::Array<byte> ¶ms); + bool cmdReturn(ParamsIterator ¶ms); + + /** + * Sets variables on characters like race, sex, and class + */ + bool cmdSetVar(ParamsIterator ¶ms); + + /** + * Play the Clouds endgame + */ + bool cmdCutsceneEndClouds(ParamsIterator ¶ms); + + /** + * Prompts the user for which character will do an action + */ + bool cmdWhoWill(ParamsIterator ¶ms); + + /** + * Deals a random amount of damage to a character + */ + bool cmdRndDamage(ParamsIterator ¶ms); + + /** + * Moves the wall object to the given coordinates. Doesn't change it's orientation. + * Wall objects are only visible when viewed straight on, and were never intended + * to be anywhere but on squares directly facing walls + */ + bool cmdMoveWallObj(ParamsIterator ¶ms); + + /** + * Sets the cell flag at the specified X/Y coordinate on the current map + */ + bool cmdAlterCellFlag(ParamsIterator ¶ms); + + /** + * Sets the word value at the current X/Y location in the HED file + * in memory to the given two bytes + */ + bool cmdAlterHed(ParamsIterator ¶ms); + + /** + * Displays a text string which includes some stat of the currently selected character + */ + bool cmdDisplayStat(ParamsIterator ¶ms); + + /** + * Displays text in the scene window for various objects + * the user interacts with + */ + bool cmdSignTextSml(ParamsIterator ¶ms); + + /** + * An array of six VOC filenames are hard-coded into the game executable file. + * This function plays the VOC file at the specified index in this array + */ + bool cmdPlayEventVoc(ParamsIterator ¶ms); + + /** + * Displays a large text message across the bottom of the screen + */ + bool cmdDisplayBottom(ParamsIterator ¶ms); + + /** + * Checks if a given map flag/monster has been set, and if so + * jumps to a given line + */ + bool cmdIfMapFlag(ParamsIterator ¶ms); + + /** + * Selects a random character for further other actions + */ + bool cmdSelectRandomChar(ParamsIterator ¶ms); + + /** + * Gives an enchanted item to a character + */ + bool cmdGiveEnchanted(ParamsIterator ¶ms); + + /** + * Sets the item category for used in character operations + */ + bool cmdItemType(ParamsIterator ¶ms); /** * Disable all the scripts at the party's current position */ - void cmdMakeNothingHere(Common::Array<byte> ¶ms); - void cmdCheckProtection(Common::Array<byte> ¶ms); + bool cmdMakeNothingHere(ParamsIterator ¶ms); + + /** + * Does a copy protection check + */ + bool cmdCheckProtection(ParamsIterator ¶ms); /** * Given a number of options, and a list of line numbers associated with * those options, jumps to whichever line for the option the user selects */ - void cmdChooseNumeric(Common::Array<byte> ¶ms); - void cmdDisplayBottomTwoLines(Common::Array<byte> ¶ms); - void cmdDisplayLarge(Common::Array<byte> ¶ms); + bool cmdChooseNumeric(ParamsIterator ¶ms); + + /** + * Displays a two line message at the bottom of the screen + */ + bool cmdDisplayBottomTwoLines(ParamsIterator ¶ms); + + /** + * Displays a message + */ + bool cmdDisplayLarge(ParamsIterator ¶ms); /** * Exchange the positions of two objects in the maze */ - void cmdExchObj(Common::Array<byte> ¶ms); - void cmdFallToMap(Common::Array<byte> ¶ms); - void cmdDisplayMain(Common::Array<byte> ¶ms); + bool cmdExchObj(ParamsIterator ¶ms); + + /** + * Handles making the player fall down to the ground + */ + bool cmdFallToMap(ParamsIterator ¶ms); + + /** + * Displays a message + */ + bool cmdDisplayMain(ParamsIterator ¶ms); /** * Jumps to a given line number if the surface at relative cell position 1 matches * a specified surface. * @remarks This opcode is apparently never actually used */ - void cmdGoto(Common::Array<byte> ¶ms); + bool cmdGoto(ParamsIterator ¶ms); /** * Pick a random value from the parameter list and jump to that line number */ - void cmdGotoRandom(Common::Array<byte> ¶ms); - void cmdCutsceneEndDarkside(Common::Array<byte> ¶ms); - void cmdCutsceneEdWorld(Common::Array<byte> ¶ms); - void cmdFlipWorld(Common::Array<byte> ¶ms); - void cmdPlayCD(Common::Array<byte> ¶ms); + bool cmdGotoRandom(ParamsIterator ¶ms); + + /** + * Plays the Dark Side of Xeen ending + */ + bool cmdCutsceneEndDarkside(ParamsIterator ¶ms); + + /** + * Plays the World of Xeen ending + */ + bool cmdCutsceneEndWorld(ParamsIterator ¶ms); + + /** + * Switches the player between the Clouds and Dark Side + */ + bool cmdFlipWorld(ParamsIterator ¶ms); + + /** + * Plays a CD track + */ + bool cmdPlayCD(ParamsIterator ¶ms); int whoWill(int v1, int v2, int v3); @@ -315,10 +491,16 @@ private: /** * This monstrosity handles doing the various types of If checks on various data */ - bool ifProc(int action, uint32 mask, int mode, int charIndex); + bool ifProc(int action, uint32 val, int mode, int charIndex); + /** + * Prompts the user for a copy protection check + */ bool copyProtectionCheck(); + /** + * Displays a message + */ void display(bool justifyFlag, int var46); public: int _animCounter; diff --git a/engines/xeen/sprites.cpp b/engines/xeen/sprites.cpp index 68382abc67..8070368a30 100644 --- a/engines/xeen/sprites.cpp +++ b/engines/xeen/sprites.cpp @@ -257,7 +257,7 @@ void SpriteResource::drawOffset(XSurface &dest, uint16 offset, const Common::Poi assert(byteCount == lineLength); drawBounds.top = MIN(drawBounds.top, destPos.y); - drawBounds.bottom = MAX(drawBounds.bottom, destPos.y); + drawBounds.bottom = MAX((int)drawBounds.bottom, destPos.y + 1); // Handle drawing out the line byte *destP = (byte *)dest.getBasePtr(destPos.x, destPos.y); @@ -274,7 +274,7 @@ void SpriteResource::drawOffset(XSurface &dest, uint16 offset, const Common::Poi if (*lineP != -1 && xp >= bounds.left && xp < bounds.right && ((!(flags & SPRFLAG_SCENE_CLIPPED) && !enlarge) || (xp >= SCENE_CLIP_LEFT && xp < SCENE_CLIP_RIGHT))) { drawBounds.left = MIN(drawBounds.left, xp); - drawBounds.right = MAX(drawBounds.right, xp); + drawBounds.right = MAX((int)drawBounds.right, xp + 1); *destP = (byte)*lineP; if (enlarge) *(destP + SCREEN_WIDTH) = (byte)*lineP; diff --git a/engines/xeen/town.cpp b/engines/xeen/town.cpp index f15030503b..ac1fc1edbb 100644 --- a/engines/xeen/town.cpp +++ b/engines/xeen/town.cpp @@ -33,7 +33,7 @@ namespace Xeen { Town::Town(XeenEngine *vm) : ButtonContainer(vm) { Common::fill(&_arr1[0], &_arr1[6], 0); _townMaxId = 0; - _townActionId = 0; + _townActionId = BANK; _drawFrameIndex = 0; _currentCharLevel = 0; _v1 = 0; @@ -44,7 +44,7 @@ Town::Town(XeenEngine *vm) : ButtonContainer(vm) { _v10 = _v11 = 0; _v12 = _v13 = 0; _v14 = 0; - _v20 = 0; + _maxLevel = 0; _v21 = 0; _v22 = 0; _v23 = 0; @@ -64,7 +64,7 @@ void Town::loadStrings(const Common::String &name) { f.close(); } -int Town::townAction(int actionId) { +int Town::townAction(TownAction actionId) { Interface &intf = *_vm->_interface; Map &map = *_vm->_map; Party &party = *_vm->_party; @@ -72,7 +72,7 @@ int Town::townAction(int actionId) { Sound &sound = *_vm->_sound; bool isDarkCc = _vm->_files->_isDarkCc; - if (actionId == 12) { + if (actionId == ACTION12) { pyramidEvent(); return 0; } @@ -92,7 +92,7 @@ int Town::townAction(int actionId) { _icons2.clear(); switch (actionId) { - case 0: + case BANK: // Bank _icons1.load("bank.icn"); _icons2.load("bank2.icn"); @@ -105,10 +105,10 @@ int Town::townAction(int actionId) { vocName = isDarkCc ? "bank1.voc" : "banker.voc"; break; - case 1: + case BLACKSMITH: // Blacksmith _icons1.load("esc.icn"); - addButton(Common::Rect(261, 100, 285, 120), Common::KEYCODE_ESCAPE, &_icons1); + addButton(Common::Rect(261, 108, 285, 128), Common::KEYCODE_ESCAPE, &_icons1); addButton(Common::Rect(234, 54, 308, 62), 0); addButton(Common::Rect(234, 64, 308, 72), Common::KEYCODE_b); addButton(Common::Rect(234, 74, 308, 82), 0); @@ -118,11 +118,11 @@ int Town::townAction(int actionId) { vocName = isDarkCc ? "see2.voc" : "whaddayo.voc"; break; - case 2: + case GUILD: // Guild loadStrings("spldesc.bin"); _icons1.load("esc.icn"); - addButton(Common::Rect(261, 100, 285, 120), Common::KEYCODE_ESCAPE, &_icons1); + addButton(Common::Rect(261, 108, 285, 128), Common::KEYCODE_ESCAPE, &_icons1); addButton(Common::Rect(234, 54, 308, 62), 0); addButton(Common::Rect(234, 64, 308, 72), Common::KEYCODE_b); addButton(Common::Rect(234, 74, 308, 82), Common::KEYCODE_s); @@ -133,7 +133,7 @@ int Town::townAction(int actionId) { vocName = isDarkCc ? "parrot1.voc" : "guild10.voc"; break; - case 3: + case TAVERN: // Tavern loadStrings("tavern.bin"); _icons1.load("tavern.icn"); @@ -149,10 +149,10 @@ int Town::townAction(int actionId) { vocName = isDarkCc ? "hello1.voc" : "hello.voc"; break; - case 4: + case TEMPLE: // Temple _icons1.load("esc.icn"); - addButton(Common::Rect(261, 100, 285, 120), Common::KEYCODE_ESCAPE, &_icons1); + addButton(Common::Rect(261, 108, 285, 128), Common::KEYCODE_ESCAPE, &_icons1); addButton(Common::Rect(234, 54, 308, 62), Common::KEYCODE_h); addButton(Common::Rect(234, 64, 308, 72), Common::KEYCODE_d); addButton(Common::Rect(234, 74, 308, 82), Common::KEYCODE_u); @@ -162,40 +162,40 @@ int Town::townAction(int actionId) { vocName = isDarkCc ? "help2.voc" : "maywe2.voc"; break; - case 5: + case TRAINING: // Training Common::fill(&_arr1[0], &_arr1[6], 0); _v2 = 0; _icons1.load("train.icn"); addButton(Common::Rect(281, 108, 305, 128), Common::KEYCODE_ESCAPE, &_icons1); - addButton(Common::Rect(242, 108, 266, 128), Common::KEYCODE_t); + addButton(Common::Rect(242, 108, 266, 128), Common::KEYCODE_t, &_icons1); sound.stopSound(); vocName = isDarkCc ? "training.voc" : "youtrn1.voc"; break; - case 6: + case ARENA: // Arena event arenaEvent(); return false; - case 8: + case REAPER: // Reaper event reaperEvent(); return false; - case 9: + case GOLEM: // Golem event golemEvent(); return false; - case 10: - case 13: + case DWARF1: + case DWARF2: dwarfEvent(); return false; - case 11: + case SPHINX: sphinxEvent(); return false; @@ -203,7 +203,7 @@ int Town::townAction(int actionId) { break; } - sound.playSong(Res.TOWN_ACTION_MUSIC[actionId], 223); + sound.playSong(Res.TOWN_ACTION_MUSIC[_vm->_files->_isDarkCc][actionId], 223); _townSprites.resize(Res.TOWN_ACTION_FILES[isDarkCc][actionId]); for (uint idx = 0; idx < _townSprites.size(); ++idx) { @@ -220,7 +220,7 @@ int Town::townAction(int actionId) { intf._levitateUIFrame = 0; _townSprites[_drawFrameIndex / 8].draw(screen, _drawFrameIndex % 8, _townPos); - if (actionId == 0 && isDarkCc) { + if (actionId == BANK && isDarkCc) { _townSprites[4].draw(screen, _vm->getRandomNumber(13, 18), Common::Point(8, 30)); } @@ -236,7 +236,7 @@ int Town::townAction(int actionId) { intf.highlightChar(0); drawTownAnim(1); - if (actionId == 0) + if (actionId == BANK) intf._overallFrame = 2; sound.playSound(vocName, 1); @@ -244,12 +244,13 @@ int Town::townAction(int actionId) { do { townWait(); charP = doTownOptions(charP); + title = createTownText(*charP); screen._windows[10].writeString(title); drawButtons(&screen); } while (!_vm->shouldQuit() && _buttonValue != Common::KEYCODE_ESCAPE); switch (actionId) { - case 1: + case BLACKSMITH: // Leave blacksmith if (isDarkCc) { sound.stopSound(); @@ -257,14 +258,14 @@ int Town::townAction(int actionId) { } break; - case 3: { + case TAVERN: // Leave Tavern sound.stopSound(); sound.playSound(isDarkCc ? "gdluck1.voc" : "goodbye.voc", 1); map.mazeData()._mazeNumber = party._mazeId; break; - } + default: break; } @@ -334,29 +335,30 @@ Common::String Town::createTownText(Character &ch) { Common::String msg; switch (_townActionId) { - case 0: + case BANK: // Bank return Common::String::format(Res.BANK_TEXT, XeenEngine::printMil(party._bankGold).c_str(), XeenEngine::printMil(party._bankGems).c_str(), XeenEngine::printMil(party._gold).c_str(), XeenEngine::printMil(party._gems).c_str()); - case 1: + + case BLACKSMITH: // Blacksmith return Common::String::format(Res.BLACKSMITH_TEXT, - XeenEngine::printMil(party._gold).c_str()); + ch._name.c_str(), XeenEngine::printMil(party._gold).c_str()); - case 2: + case GUILD: // Guild return !ch.guildMember() ? Res.GUILD_NOT_MEMBER_TEXT : Common::String::format(Res.GUILD_TEXT, ch._name.c_str()); - case 3: + case TAVERN: // Tavern return Common::String::format(Res.TAVERN_TEXT, ch._name.c_str(), Res.FOOD_AND_DRINK, XeenEngine::printMil(party._gold).c_str()); - case 4: + case TEMPLE: // Temple _donation = 0; _uncurseCost = 0; @@ -425,52 +427,55 @@ Common::String Town::createTownText(Character &ch) { _healCost, _donation, XeenEngine::printK(_uncurseCost).c_str(), XeenEngine::printMil(party._gold).c_str()); - case 5: + case TRAINING: // Training if (_vm->_files->_isDarkCc) { switch (party._mazeId) { case 29: - _v20 = 30; + _maxLevel = 30; break; case 31: - _v20 = 50; + _maxLevel = 50; break; case 37: - _v20 = 200; + _maxLevel = 200; break; default: - _v20 = 100; + _maxLevel = 100; break; } } else { switch (party._mazeId) { case 28: - _v20 = 10; + _maxLevel = 10; break; case 30: - _v20 = 15; + _maxLevel = 15; break; default: - _v20 = 20; + _maxLevel = 20; break; } } _experienceToNextLevel = ch.experienceToNextLevel(); - if (_experienceToNextLevel >= 0x10000 && ch._level._permanent < _v20) { + if (_experienceToNextLevel && ch._level._permanent < _maxLevel) { + // Need more experience int nextLevel = ch._level._permanent + 1; - return Common::String::format(Res.EXPERIENCE_FOR_LEVEL, + msg = Common::String::format(Res.EXPERIENCE_FOR_LEVEL, ch._name.c_str(), _experienceToNextLevel, nextLevel); - } else if (ch._level._permanent >= 20) { + } else if (ch._level._permanent >= _maxLevel) { + // At maximum level _experienceToNextLevel = 1; msg = Common::String::format(Res.LEARNED_ALL, ch._name.c_str()); } else { + // Eligble for level increase msg = Common::String::format(Res.ELIGIBLE_FOR_LEVEL, ch._name.c_str(), ch._level._permanent + 1); } - return Common::String::format(Res.TRAINING_TEXT, + return Common::String::format(Res.TRAINING_TEXT, msg.c_str(), XeenEngine::printMil(party._gold).c_str()); default: @@ -480,27 +485,27 @@ Common::String Town::createTownText(Character &ch) { Character *Town::doTownOptions(Character *c) { switch (_townActionId) { - case 0: + case BANK: // Bank c = doBankOptions(c); break; - case 1: + case BLACKSMITH: // Blacksmith c = doBlacksmithOptions(c); break; - case 2: + case GUILD: // Guild c = doGuildOptions(c); break; - case 3: + case TAVERN: // Tavern c = doTavernOptions(c); break; - case 4: + case TEMPLE: // Temple c = doTempleOptions(c); break; - case 5: + case TRAINING: // Training c = doTrainingOptions(c); break; @@ -903,7 +908,7 @@ Character *Town::doTrainingOptions(Character *c) { _drawFrameIndex = 0; Common::String name; - if (c->_level._permanent >= _v20) { + if (c->_level._permanent >= _maxLevel) { name = isDarkCc ? "gtlost.voc" : "trainin1.voc"; } else { name = isDarkCc ? "gtlost.voc" : "trainin0.voc"; @@ -1072,7 +1077,7 @@ void Town::drawTownAnim(bool flag) { } switch (_townActionId) { - case 0: + case BANK: if (sound.isPlaying() || (isDarkCc && intf._overallFrame)) { if (isDarkCc) { if (sound.isPlaying() || intf._overallFrame == 1) { @@ -1090,7 +1095,7 @@ void Town::drawTownAnim(bool flag) { } break; - case 2: + case GUILD: if (sound.isPlaying()) { if (isDarkCc) { if (intf._overallFrame) { @@ -1103,19 +1108,20 @@ void Town::drawTownAnim(bool flag) { } break; - case 3: + case TAVERN: if (sound.isPlaying() && isDarkCc) { _townSprites[4].draw(screen, _vm->getRandomNumber(7), Common::Point(153, 49)); } break; - case 4: + + case TEMPLE: if (sound.isPlaying()) { _townSprites[3].draw(screen, _vm->getRandomNumber(2, 4), Common::Point(8, 8)); } break; - case 5: + case TRAINING: if (sound.isPlaying()) { if (isDarkCc) { _townSprites[_drawFrameIndex / 8].draw(screen, _drawFrameIndex % 8, _townPos); @@ -1128,6 +1134,10 @@ void Town::drawTownAnim(bool flag) { _townSprites[1].draw(screen, _vm->getRandomNumber(8, 12), Common::Point(8, 8)); } } + break; + + default: + break; } if (flag) { @@ -1202,7 +1212,7 @@ bool TownMessage::execute(int portrait, const Common::String &name, const Common Window &w = screen._windows[11]; town._townMaxId = 4; - town._townActionId = 7; + town._townActionId = NO_ACTION; town._drawFrameIndex = 0; town._townPos = Common::Point(23, 22); @@ -1225,7 +1235,7 @@ bool TownMessage::execute(int portrait, const Common::String &name, const Common name.c_str(), msgText.c_str()); // Count the number of words - const char *msgEnd = w.writeString(msg.c_str()); + const char *msgEnd = w.writeString(msg); int wordCount = 0; for (const char *msgP = msg.c_str(); msgP != msgEnd && *msgP; ++msgP) { diff --git a/engines/xeen/town.h b/engines/xeen/town.h index 25faa38c76..618c4c510a 100644 --- a/engines/xeen/town.h +++ b/engines/xeen/town.h @@ -31,6 +31,12 @@ namespace Xeen { +enum TownAction { + BANK = 0, BLACKSMITH = 1, GUILD = 2, TAVERN = 3, TEMPLE = 4, + TRAINING = 5, ARENA = 6, NO_ACTION = 7, REAPER = 8, GOLEM = 9, + DWARF1 = 10, SPHINX = 11, ACTION12 = 12, DWARF2 = 13 +}; + class XeenEngine; class TownMessage; @@ -41,14 +47,14 @@ private: Common::StringArray _textStrings; Common::Array<SpriteResource> _townSprites; int _townMaxId; - int _townActionId; + TownAction _townActionId; int _v1, _v2; int _donation; int _healCost; int _v5, _v6; int _v10, _v11, _v12; int _v13, _v14; - uint _v20; + uint _maxLevel; int _v21; uint _v22; int _v23; @@ -99,7 +105,7 @@ private: public: Town(XeenEngine *vm); - int townAction(int actionId); + int townAction(TownAction actionId); void drawTownAnim(bool flag); diff --git a/gui/credits.h b/gui/credits.h index c0d7b32032..8f3f934024 100644 --- a/gui/credits.h +++ b/gui/credits.h @@ -589,6 +589,9 @@ static const char *credits[] = { "C1""OS/2", "C0""Paul Smedley", "", +"C1""RISC OS", +"C0""Cameron Cawley", +"", "C1""SlackWare", "C0""Robert Kelsen", "", diff --git a/gui/themes/translations.dat b/gui/themes/translations.dat Binary files differindex b06de5eefb..8037a89f07 100644 --- a/gui/themes/translations.dat +++ b/gui/themes/translations.dat diff --git a/po/be_BY.po b/po/be_BY.po index 5c9a7ed894..7ee915d368 100644 --- a/po/be_BY.po +++ b/po/be_BY.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: ScummVM 1.8.0git\n" "Report-Msgid-Bugs-To: scummvm-devel@lists.scummvm.org\n" -"POT-Creation-Date: 2017-11-15 00:50+0100\n" +"POT-Creation-Date: 2017-11-21 22:47+0100\n" "PO-Revision-Date: 2017-07-26 18:23+0000\n" "Last-Translator: Ivan Lukyanov <lid-gr@tut.by>\n" "Language-Team: Belarusian <https://translations.scummvm.org/projects/scummvm/" diff --git a/po/ca_ES.po b/po/ca_ES.po index 6f05175300..26ff0215c1 100644 --- a/po/ca_ES.po +++ b/po/ca_ES.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: ScummVM 1.6.0git\n" "Report-Msgid-Bugs-To: scummvm-devel@lists.scummvm.org\n" -"POT-Creation-Date: 2017-11-15 00:50+0100\n" +"POT-Creation-Date: 2017-11-21 22:47+0100\n" "PO-Revision-Date: 2017-02-20 14:15+0000\n" "Last-Translator: Eugene Sandulenko <sev@scummvm.org>\n" "Language-Team: Catalan <https://translations.scummvm.org/projects/scummvm/" diff --git a/po/cs_CZ.po b/po/cs_CZ.po index 5bf98a8e65..ffcab9dbba 100644 --- a/po/cs_CZ.po +++ b/po/cs_CZ.po @@ -7,11 +7,11 @@ msgid "" msgstr "" "Project-Id-Version: ScummVM 1.7.0git\n" "Report-Msgid-Bugs-To: scummvm-devel@lists.scummvm.org\n" -"POT-Creation-Date: 2017-11-15 00:50+0100\n" +"POT-Creation-Date: 2017-11-21 22:47+0100\n" "PO-Revision-Date: 2017-11-18 10:07+0000\n" "Last-Translator: Zbynìk Schwarz <zbynek.schwarz@gmail.com>\n" -"Language-Team: Czech " -"<https://translations.scummvm.org/projects/scummvm/scummvm/cs/>\n" +"Language-Team: Czech <https://translations.scummvm.org/projects/scummvm/" +"scummvm/cs/>\n" "Language: cs_CZ\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=iso-8859-2\n" @@ -1790,8 +1790,8 @@ msgid "" "Please report the following data to the ScummVM team at %s along with the " "name of the game you tried to add and its version, language, etc.:" msgstr "" -"Hra nacházející se v '%s' pravdìpodobnì vyu¾ívá neznámou variantu jádra %s ." -"\n" +"Hra nacházející se v '%s' pravdìpodobnì vyu¾ívá neznámou variantu jádra " +"%s .\n" "\n" "Prosím pøepo¹lete následující data týmu ScummVM na %s spolu s názvem hry, " "kterou jste chtìli pøidat, a její verzí, jazykem, atd.:" @@ -3311,8 +3311,8 @@ msgid "" "You're missing a Riven executable. The Windows executable is 'riven.exe' or " "'rivendmo.exe'. " msgstr "" -"Schází vám spustitelný soubor Riven. Ve Windows se soubor jmenuje " -"'riven.exe' nebo 'rivendmo.exe'. " +"Schází vám spustitelný soubor Riven. Ve Windows se soubor jmenuje 'riven." +"exe' nebo 'rivendmo.exe'. " #: engines/mohawk/riven.cpp:150 msgid "" diff --git a/po/da_DK.po b/po/da_DK.po index cbee32ed97..73e0b2ec8a 100644 --- a/po/da_DK.po +++ b/po/da_DK.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: ScummVM 1.3.0svn\n" "Report-Msgid-Bugs-To: scummvm-devel@lists.scummvm.org\n" -"POT-Creation-Date: 2017-11-15 00:50+0100\n" +"POT-Creation-Date: 2017-11-21 22:47+0100\n" "PO-Revision-Date: 2016-12-29 07:29+0000\n" "Last-Translator: poulsen93 <poulsen93@gmail.com>\n" "Language-Team: Danish <https://translations.scummvm.org/projects/scummvm/" diff --git a/po/de_DE.po b/po/de_DE.po index 0808837e18..7638919cbd 100644 --- a/po/de_DE.po +++ b/po/de_DE.po @@ -7,11 +7,11 @@ msgid "" msgstr "" "Project-Id-Version: ScummVM 1.10.0git\n" "Report-Msgid-Bugs-To: scummvm-devel@lists.scummvm.org\n" -"POT-Creation-Date: 2017-11-15 00:50+0100\n" +"POT-Creation-Date: 2017-11-21 22:47+0100\n" "PO-Revision-Date: 2017-11-15 09:26+0000\n" "Last-Translator: Lothar Serra Mari <rootfather@scummvm.org>\n" -"Language-Team: German " -"<https://translations.scummvm.org/projects/scummvm/scummvm/de/>\n" +"Language-Team: German <https://translations.scummvm.org/projects/scummvm/" +"scummvm/de/>\n" "Language: de_DE\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=iso-8859-1\n" @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: ScummVM 1.10.0git\n" "Report-Msgid-Bugs-To: scummvm-devel@lists.scummvm.org\n" -"POT-Creation-Date: 2017-11-15 00:50+0100\n" +"POT-Creation-Date: 2017-11-21 22:47+0100\n" "PO-Revision-Date: 2017-04-28 11:12+0000\n" "Last-Translator: Arius <alidop@pathfinder.gr>\n" "Language-Team: Greek <https://translations.scummvm.org/projects/scummvm/" diff --git a/po/es_ES.po b/po/es_ES.po index 4f5e525b29..c31307428d 100644 --- a/po/es_ES.po +++ b/po/es_ES.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: ScummVM 1.4.0svn\n" "Report-Msgid-Bugs-To: scummvm-devel@lists.scummvm.org\n" -"POT-Creation-Date: 2017-11-15 00:50+0100\n" +"POT-Creation-Date: 2017-11-21 22:47+0100\n" "PO-Revision-Date: 2017-04-23 05:59+0000\n" "Last-Translator: Santiago Sanchez <sanchez.santiago.j@gmail.com>\n" "Language-Team: Spanish <https://translations.scummvm.org/projects/scummvm/" @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: ScummVM 1.5.0git\n" "Report-Msgid-Bugs-To: scummvm-devel@lists.scummvm.org\n" -"POT-Creation-Date: 2017-11-15 00:50+0100\n" +"POT-Creation-Date: 2017-11-21 22:47+0100\n" "PO-Revision-Date: 2016-12-04 13:27+0000\n" "Last-Translator: Eugene Sandulenko <sev@scummvm.org>\n" "Language-Team: Basque <https://translations.scummvm.org/projects/scummvm/" diff --git a/po/fi_FI.po b/po/fi_FI.po index c888cd7125..cb304015a9 100644 --- a/po/fi_FI.po +++ b/po/fi_FI.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: ScummVM 1.6.0git\n" "Report-Msgid-Bugs-To: scummvm-devel@lists.scummvm.org\n" -"POT-Creation-Date: 2017-11-15 00:50+0100\n" +"POT-Creation-Date: 2017-11-21 22:47+0100\n" "PO-Revision-Date: 2017-11-10 17:07+0000\n" "Last-Translator: Timo Mikkolainen <tmikkola@gmail.com>\n" "Language-Team: Finnish <https://translations.scummvm.org/projects/scummvm/" diff --git a/po/fr_FR.po b/po/fr_FR.po index 2cbc2c4acd..fae7d34f56 100644 --- a/po/fr_FR.po +++ b/po/fr_FR.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: ScummVM 1.8.0git\n" "Report-Msgid-Bugs-To: scummvm-devel@lists.scummvm.org\n" -"POT-Creation-Date: 2017-11-15 00:50+0100\n" +"POT-Creation-Date: 2017-11-21 22:47+0100\n" "PO-Revision-Date: 2017-11-12 22:44+0000\n" "Last-Translator: Thierry Crozat <criezy@scummvm.org>\n" "Language-Team: French <https://translations.scummvm.org/projects/scummvm/" diff --git a/po/gl_ES.po b/po/gl_ES.po index 73269eec97..ebb55fd255 100644 --- a/po/gl_ES.po +++ b/po/gl_ES.po @@ -7,11 +7,11 @@ msgid "" msgstr "" "Project-Id-Version: ScummVM 1.8.0git\n" "Report-Msgid-Bugs-To: scummvm-devel@lists.scummvm.org\n" -"POT-Creation-Date: 2017-11-15 00:50+0100\n" -"PO-Revision-Date: 2016-11-28 15:51+0000\n" +"POT-Creation-Date: 2017-11-21 22:47+0100\n" +"PO-Revision-Date: 2017-11-23 12:42+0000\n" "Last-Translator: Santiago G. Sanz <santiagogarciasanz@gmail.com>\n" -"Language-Team: Galician <https://translations.scummvm.org/projects/scummvm/" -"scummvm/gl/>\n" +"Language-Team: Galician " +"<https://translations.scummvm.org/projects/scummvm/scummvm/gl/>\n" "Language: gl_ES\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=iso-8859-1\n" @@ -827,61 +827,59 @@ msgstr "non se puido cambiar a configuración de filtrado." #: gui/options.cpp:932 msgid "Show On-screen control" -msgstr "" +msgstr "Mostrar controis na pantalla" #: gui/options.cpp:936 -#, fuzzy msgid "Touchpad mouse mode" -msgstr "Modo Panel táctil desactivado." +msgstr "Modo Panel táctil" #: gui/options.cpp:940 msgid "Swap Menu and Back buttons" -msgstr "" +msgstr "Cambiar botóns Menú e Atrás" #: gui/options.cpp:945 -#, fuzzy msgid "Pointer Speed:" -msgstr "Velocidade:" +msgstr "Velocidade do punteiro:" #: gui/options.cpp:945 gui/options.cpp:947 gui/options.cpp:948 msgid "Speed for keyboard/joystick mouse pointer control" -msgstr "" +msgstr "Velocidade do control do punteiro." #: gui/options.cpp:947 -#, fuzzy msgctxt "lowres" msgid "Pointer Speed:" -msgstr "Velocidade:" +msgstr "Velocidade do punteiro:" #: gui/options.cpp:958 msgid "Joy Deadzone:" -msgstr "" +msgstr "Zona morta da panca:" #: gui/options.cpp:958 gui/options.cpp:960 gui/options.cpp:961 msgid "Analog joystick Deadzone" -msgstr "" +msgstr "Zona morta da panca de xogos" #: gui/options.cpp:960 msgctxt "lowres" msgid "Joy Deadzone:" -msgstr "" +msgstr "Zona morta da panca:" #: gui/options.cpp:974 msgid "HW Shader:" -msgstr "" +msgstr "Sombreador HW:" #: gui/options.cpp:974 gui/options.cpp:976 msgid "Different hardware shaders give different visual effects" msgstr "" +"Os distintos sombreadores por hardware teñen efectos visuais diferentes." #: gui/options.cpp:976 msgctxt "lowres" msgid "HW Shader:" -msgstr "" +msgstr "Sombreador HW:" #: gui/options.cpp:977 msgid "Different shaders give different visual effects" -msgstr "" +msgstr "Os distintos sombreadores teñen efectos diferentes." #: gui/options.cpp:994 msgid "Graphics mode:" @@ -1119,12 +1117,11 @@ msgstr "Volume voz:" #: gui/options.cpp:1438 msgid "Shader" -msgstr "" +msgstr "Sombreador" #: gui/options.cpp:1450 -#, fuzzy msgid "Control" -msgstr "Rato" +msgstr "Control" #: gui/options.cpp:1476 msgid "FluidSynth Settings" @@ -1324,20 +1321,20 @@ msgid "Another cloud storage is already active." msgstr "Xa está activo outro almacenamento na nube." #: gui/options.cpp:1895 -#, fuzzy msgid "Theme does not support selected language!" -msgstr "O complemento do motor non é compatible cos ficheiros de gardado" +msgstr "O tema non é compatible co idioma seleccionado!" #: gui/options.cpp:1898 -#, fuzzy msgid "Theme cannot be loaded!" -msgstr "Non se puido cargar a partida" +msgstr "Non se puido cargar o tema!" #: gui/options.cpp:1901 msgid "" "\n" "Misc settings will be restored." msgstr "" +"\n" +"A configuración de Misc. será restaurada." #: gui/options.cpp:1937 msgid "The chosen directory cannot be written to. Please select another one." @@ -1500,9 +1497,8 @@ msgid "Playtime: " msgstr "Tempo de xogo: " #: gui/saveload-dialog.cpp:579 gui/saveload-dialog.cpp:667 -#, fuzzy msgid "Untitled saved game" -msgstr "Partida sen título" +msgstr "Partida gardada sen título" #: gui/saveload-dialog.cpp:720 msgid "Next" @@ -1630,7 +1626,6 @@ msgid "Antialiased" msgstr "Antidistorsión" #: gui/updates-dialog.cpp:49 -#, fuzzy msgid "" "ScummVM now supports automatic check for updates\n" "which requires access to the Internet. Would you\n" @@ -1638,7 +1633,6 @@ msgid "" msgstr "" "ScummVM agora ofrece a busca automática\n" "de actualizacións. Require acceso á Internet.\n" -"\n" "Queres activar esta característica?" #: gui/updates-dialog.cpp:52 @@ -1646,6 +1640,8 @@ msgid "" "You can change this setting later in the Misc tab\n" "in the Options dialog." msgstr "" +"Podes cambiar esta configuración máis tarde\n" +"na pestana Misc. do diálogo Opcións." #: gui/updates-dialog.cpp:116 msgid "Proceed" @@ -1740,9 +1736,8 @@ msgid "Could not find suitable engine plugin" msgstr "Non se atopou un complemento axeitado para o motor" #: common/error.cpp:68 -#, fuzzy msgid "Engine plugin does not support saved games" -msgstr "O complemento do motor non é compatible cos ficheiros de gardado" +msgstr "O complemento do motor non é compatible con ficheiros de gardado." #: common/error.cpp:71 msgid "User canceled" @@ -1796,20 +1791,21 @@ msgid "<Bad value>" msgstr "<Valor erróneo>" #: engines/advancedDetector.cpp:330 -#, fuzzy, c-format +#, c-format msgid "" "The game in '%s' seems to be an unknown %s engine game variant.\n" "\n" "Please report the following data to the ScummVM team at %s along with the " "name of the game you tried to add and its version, language, etc.:" msgstr "" -"O xogo en %s semella descoñecido.\n" -"Por favor, envía estes datos ao equipo de ScummVM xunto co nome\n" -"do xogo que queres engadir, a súa versión, lingua, etc.:" +"O xogo en %s semella ser unha variante descoñecida do motor %s.\n" +"\n" +"Por favor, envía os seguintes datos ao equipo de ScummVM en %s xunto co nome " +"do xogo que tentaches engadir, a súa versión, lingua, etc.:" #: engines/advancedDetector.cpp:338 msgid "Matched game IDs:" -msgstr "" +msgstr "ID de xogo emparellados:" #: engines/dialogs.cpp:85 msgid "~R~esume" @@ -1893,7 +1889,7 @@ msgstr "" "adicional." #: engines/dialogs.cpp:234 engines/pegasus/pegasus.cpp:395 -#, fuzzy, c-format +#, c-format msgid "" "Failed to save game (%s)! Please consult the README for basic information, " "and for instructions on how to obtain further assistance." @@ -1964,7 +1960,7 @@ msgstr "" "para obter máis información." #: engines/engine.cpp:508 -#, fuzzy, c-format +#, c-format msgid "" "Failed to load saved game (%s)! Please consult the README for basic " "information, and for instructions on how to obtain further assistance." @@ -2798,7 +2794,7 @@ msgstr "Buscar actualizacións..." #: engines/toon/toon.cpp:4918 #, c-format msgid "Unable to locate the '%s' engine data file." -msgstr "" +msgstr "Non se puido localizar o ficheiro de datos do motor %s." #: engines/access/resources.cpp:52 engines/drascula/drascula.cpp:977 #: engines/hugo/hugo.cpp:448 engines/lure/lure.cpp:73 @@ -2806,7 +2802,7 @@ msgstr "" #: engines/toon/toon.cpp:4930 #, c-format msgid "The '%s' engine data file is corrupt." -msgstr "" +msgstr "O ficheiro de datos do motor %s está danado." #: engines/access/resources.cpp:61 engines/drascula/drascula.cpp:988 #: engines/hugo/hugo.cpp:458 engines/lure/lure.cpp:76 @@ -2817,6 +2813,8 @@ msgid "" "Incorrect version of the '%s' engine data file found. Expected %d.%d but got " "%d.%d." msgstr "" +"Atopouse unha versión incorrecta do ficheiro de datos do motor %s. Ficheiro " +"esperado: %d.%d. Ficheiro atopado: %d.%d." #: engines/adl/detection.cpp:45 engines/adl/detection.cpp:55 msgid "Color mode" @@ -2846,7 +2844,6 @@ msgstr "Empregar pantallas orixinais de gardado e carga" #: engines/drascula/detection.cpp:303 engines/dreamweb/detection.cpp:49 #: engines/neverhood/detection.cpp:178 engines/sci/detection.cpp:453 #: engines/sherlock/detection.cpp:72 engines/toltecs/detection.cpp:201 -#, fuzzy msgid "Use the original save/load screens instead of the ScummVM ones" msgstr "" "Emprega as pantallas orixinais de gardado e carga, no canto das de ScummVM." @@ -2923,7 +2920,7 @@ msgid "Restore" msgstr "Restaurar" #: engines/agos/saveload.cpp:159 engines/scumm/scumm.cpp:2436 -#, fuzzy, c-format +#, c-format msgid "" "Failed to load saved game from file:\n" "\n" @@ -2934,7 +2931,7 @@ msgstr "" "%s" #: engines/agos/saveload.cpp:194 engines/scumm/scumm.cpp:2429 -#, fuzzy, c-format +#, c-format msgid "" "Failed to save game to file:\n" "\n" @@ -2945,7 +2942,7 @@ msgstr "" "%s" #: engines/agos/saveload.cpp:202 engines/scumm/scumm.cpp:2447 -#, fuzzy, c-format +#, c-format msgid "" "Successfully saved game in file:\n" "\n" @@ -2969,7 +2966,6 @@ msgid "Enable Color Blind Mode by default" msgstr "Activa o modo accesible para daltonismo de xeito predeterminado." #: engines/drascula/saveload.cpp:47 -#, fuzzy msgid "" "ScummVM found that you have old saved games for Drascula that should be " "converted.\n" @@ -2997,13 +2993,11 @@ msgstr "Mostrar os gráficos coa paletta intensa do xogo" #: engines/gob/inter_playtoons.cpp:255 engines/gob/inter_v2.cpp:1467 #: engines/gob/inter_geisha.cpp:232 engines/tinsel/saveload.cpp:532 -#, fuzzy msgid "Failed to load saved game from file." msgstr "Erro ao cargar a partida do ficheiro." #: engines/gob/inter_v2.cpp:1537 engines/gob/inter_geisha.cpp:263 #: engines/tinsel/saveload.cpp:545 -#, fuzzy msgid "Failed to save game to file." msgstr "Erro ao gardar a partida no ficheiro." @@ -3228,7 +3222,7 @@ msgstr "" "\n" #: engines/kyra/saveload_eob.cpp:623 -#, fuzzy, c-format +#, c-format msgid "" "%d original saved games have been successfully imported into\n" "ScummVM. If you want to manually import original saved game later you will\n" @@ -3236,11 +3230,11 @@ msgid "" "'import_savefile'.\n" "\n" msgstr "" -"Importación exitosa de %d ficheiro(s) de gardado a ScummVM.\n" +"Importación exitosa de %d ficheiros de gardado orixinais a ScummVM.\n" "Se queres importar manualmente outros ficheiros de gardado orixinais máis " "adiante,\n" -"abre a consola de depuración de ScummVM e emprega o comando \"import_savefile" -"\".\n" +"abre a consola de depuración de ScummVM e emprega o comando \"" +"import_savefile\".\n" "\n" #: engines/mads/detection.cpp:91 @@ -3298,28 +3292,24 @@ msgid "~W~ater Effect Enabled" msgstr "Efecto de ~a~uga activado" #: engines/mohawk/dialogs.cpp:272 -#, fuzzy msgid "Transitions:" -msgstr "~T~ransicións activadas" +msgstr "Transicións:" #: engines/mohawk/dialogs.cpp:274 -#, fuzzy msgid "Disabled" -msgstr "Efectos gráficos desactivados" +msgstr "Desactivados" #: engines/mohawk/dialogs.cpp:275 -#, fuzzy msgid "Fastest" -msgstr "Pegar" +msgstr "Máis rápido" #: engines/mohawk/dialogs.cpp:276 -#, fuzzy msgid "Normal" -msgstr "OpenGL Normal" +msgstr "Normal" #: engines/mohawk/dialogs.cpp:277 msgid "Best" -msgstr "" +msgstr "Mellor" #: engines/mohawk/mohawk.cpp:58 msgid "The game is paused. Press any key to continue." @@ -3351,7 +3341,7 @@ msgstr "" #: engines/mohawk/riven.cpp:410 msgid "You are missing the following required Riven data files:\n" -msgstr "" +msgstr "Faltan os seguintes ficheiros de datos requiridos de Riven:\n" #: engines/mohawk/riven_stack.cpp:182 msgid "" @@ -3417,7 +3407,6 @@ msgid "Saving game..." msgstr "Gardando..." #: engines/parallaction/saveload.cpp:269 -#, fuzzy msgid "" "ScummVM found that you have old saved games for Nippon Safes that should be " "renamed.\n" @@ -3435,7 +3424,6 @@ msgstr "" "vez que inicies o xogo.\n" #: engines/parallaction/saveload.cpp:316 -#, fuzzy msgid "ScummVM successfully converted all your saved games." msgstr "ScummVM converteu correctamente todos os ficheiros de gardado." @@ -3452,9 +3440,8 @@ msgstr "" "Contacta co equipo de ScummVM." #: engines/pegasus/pegasus.cpp:716 -#, fuzzy msgid "Invalid file name for saving" -msgstr "Introducir nome de ficheiro para gardar" +msgstr "Nome de ficheiro de gardado non válido" #: engines/pegasus/pegasus.cpp:2512 msgid "Up/Zoom In/Move Forward/Open Doors" @@ -3524,12 +3511,11 @@ msgstr "Debuxa liñas negras sobre os vídeos para aumentar a nitidez aparente." #: engines/sci/detection.cpp:431 msgid "Use high-quality video scaling" -msgstr "" +msgstr "Empregar escalado de vídeo de alta calidade" #: engines/sci/detection.cpp:432 -#, fuzzy msgid "Use linear interpolation when upscaling videos, where possible" -msgstr "Empregar filtrado linear ao escalar gráficos" +msgstr "Empregar interpolación linear ao escalar gráficos, se é posible" #: engines/sci/detection.cpp:442 msgid "Prefer digital sound effects" @@ -3575,7 +3561,6 @@ msgid "Use silver cursors" msgstr "Empregar cursores prateados" #: engines/sci/detection.cpp:496 -#, fuzzy msgid "" "Use the alternate set of silver cursors instead of the normal golden ones" msgstr "" @@ -3583,18 +3568,16 @@ msgstr "" "normais." #: engines/sci/detection.cpp:506 -#, fuzzy msgid "Enable content censoring" -msgstr "Activa os cursores flotantes." +msgstr "Activar censura de contidos" #: engines/sci/detection.cpp:507 msgid "Enable the game's built-in optional content censoring" -msgstr "" +msgstr "Activa a censura de contidos opcional incorporada ao xogo." #: engines/sci/detection.cpp:837 engines/sci/engine/kfile.cpp:481 -#, fuzzy msgid "(Autosave)" -msgstr "Autogardado:" +msgstr "(Autogardado)" #: engines/sci/engine/kgraphics.cpp:984 msgid "" @@ -3604,26 +3587,34 @@ msgid "" "was saved in: 'qfg1-' for Quest for Glory 1, 'qfg2-' for Quest for Glory 2. " "Example: 'qfg2-thief.sav'." msgstr "" +"Os personaxes gardados en ScummVM móstranse automaticamente. Os ficheiros de " +"personaxes gardados no intérprete orixinal deben ser ubicados no directorio " +"de partidas gardadas de ScummVM e precisarán un prefixo, segundo o xogo no " +"que se gardasen: \"qfg1-\" para Quest for Glory 1, \"qfg2-\" para Quest for " +"Glory 2. Exemplo: \"qfg2-thief.sav\"." #: engines/sci/engine/kgraphics32.cpp:348 #, c-format msgid "Please use an external viewer to open the game's help file: %s" -msgstr "" +msgstr "Usa un visor externo para abrir o ficheiro de axuda do xogo: %s." #: engines/sci/engine/savegame.cpp:1290 msgid "The format of this saved game is obsolete, unable to load it" -msgstr "" +msgstr "O formato desta partida gardada está obsoleto. Non é posible cargala." #: engines/sci/engine/savegame.cpp:1292 #, c-format msgid "Savegame version is %d, maximum supported is %0d" msgstr "" +"A versión do ficheiro de gardado é %d. A versión máxima compatible é %0d." #: engines/sci/engine/savegame.cpp:1303 msgid "" "This saved game was created with a different version of the game, unable to " "load it" msgstr "" +"Esta partida gardada creouse cunha versión diferente do xogo. Non é posible " +"cargala." #: engines/sci/resource.cpp:822 msgid "" @@ -3631,6 +3622,9 @@ msgid "" "not work properly. Please check the console for more information, and verify " "that your game files are valid." msgstr "" +"Detectáronse recursos faltantes ou danados. Algunhas características do xogo " +"poderán non funcionar correctamente. Consulta a consola para obter máis " +"información e verifica que os ficheiros do xogo son válidos." #: engines/sci/sci.cpp:400 msgid "" @@ -3639,6 +3633,10 @@ msgid "" "riddles. Please, apply the latest patch for this game by Sierra to avoid " "possible problems." msgstr "" +"Detectouse un script do xogo con erros coñecidos, que podería impedir o " +"progreso posterior no xogo, durante a secuencia das adiviñas do home verde. " +"Aplica o último parche de Sierra para este xogo para evitar posibles " +"problemas." #: engines/sci/sci.cpp:409 msgid "" @@ -3648,6 +3646,11 @@ msgid "" "not always render properly or reflect the actual game speech. This is not a " "ScummVM bug -- it is a problem with the game's assets." msgstr "" +"Subtítulos activados. No entanto, esta característica de King's Quest 7 non " +"se rematou e foi desactivada na versión comercial do xogo. ScummVM permite a " +"reactivación dos subtítulos, mais como foron eliminados do xogo orixinal, " +"non sempre son reproducidos correctamente e poden non reflectir os diálogos " +"do xogo: non é un erro de ScummVM, é un problema dos recursos do xogo." #: engines/sci/sci.cpp:433 msgid "" @@ -3661,6 +3664,15 @@ msgid "" "place it in the game folder. Without this patch, General MIDI music for this " "game will sound badly distorted." msgstr "" +"Seleccionaches General MIDI como dispositivo de son. Sierra forneceu " +"compatibilidade con General MIDI para este xogo coa súa \"General MIDI " +"Utility\". Aplica este parche para gozar da música MIDI neste xogo. Cando o " +"obteñas, podes descomprimir todos os ficheiros .PAT incluídos nel no " +"cartafol de extras de ScummVM, e a aplicación engadirá o parche apropiado " +"automaticamente. Tamén podes seguir as instrucións do ficheiro READ.ME " +"incluído no parche e renomear o ficheiro .PAT asociado como 4.PAT, e ubicalo " +"no cartafol do xogo. Sen o parche, a música General MIDI deste xogo soará " +"moi distorsionada." #: engines/sci/sci.cpp:452 msgid "" @@ -3670,9 +3682,13 @@ msgid "" "remove this patch from your game folder in order to avoid having unexpected " "errors and/or issues later on." msgstr "" +"O xogo está parcheado cun parche de scripts realizado por afeccionados. " +"Estes parches poden causar problemas, xa que modifican os scripts do xogo " +"significativamente. Os problemas que corrixen estes parches non teñen lugar " +"en ScummVM, polo que recomendamos que elimines este parche do cartafol do " +"xogo para evitar erros ou problemas inesperados máis adiante." #: engines/scumm/detection.cpp:1126 -#, fuzzy msgid "" "Your game version appears to be unknown. If this is *NOT* a fan-modified\n" "version (in particular, not a fan-made translation), please, report the\n" @@ -3683,7 +3699,7 @@ msgstr "" "A túa versión do xogo semella descoñecida. Se non é unha versión\n" "modificada por afeccionados (en particular, unha tradución feita por\n" "afeccionados), envía os seguintes datos ao equipo de ScummVM,\n" -"xunto co nome do xogo que queres engadir, a súa versión, lingua, etc.:" +"xunto co nome do xogo que tentaches engadir, a súa versión, lingua, etc.:\n" #: engines/scumm/detection.cpp:1144 msgid "" @@ -3856,7 +3872,6 @@ msgid "Ctrl" msgstr "CTRL" #: engines/scumm/help.cpp:80 -#, fuzzy msgid "Load saved game 1-10" msgstr "Cargar partida 1-10" @@ -3867,7 +3882,6 @@ msgid "Alt" msgstr "ALT" #: engines/scumm/help.cpp:81 -#, fuzzy msgid "Save game 1-10" msgstr "Gardar partida 1-10" @@ -4451,7 +4465,7 @@ msgstr "Mostra ventás cun fondo parcialmente transparente." #: engines/sky/compact.cpp:141 msgid "The \"sky.cpt\" engine data file has an incorrect size." -msgstr "" +msgstr "O ficheiro de datos do motor \"sky.cpt\" ten un tamaño incorrecto." #: engines/sky/detection.cpp:44 msgid "Floppy intro" @@ -4485,7 +4499,6 @@ msgid "Cutscene '%s' not found" msgstr "Non se atopou a secuencia %s" #: engines/sword1/control.cpp:885 -#, fuzzy msgid "" "ScummVM found that you have old saved games for Broken Sword 1 that should " "be converted.\n" @@ -4560,7 +4573,7 @@ msgstr "" #: engines/tony/tony.cpp:258 #, c-format msgid "Font variant not present in '%s' engine data file." -msgstr "" +msgstr "Variante de fonte non presente no ficheiro de datos do motor \"%s\"." #: engines/toon/toon.cpp:222 #, c-format @@ -4573,14 +4586,14 @@ msgid "Could not quick save into slot #%d" msgstr "Erro ao gardar rápido no espazo %d" #: engines/toon/toon.cpp:239 -#, fuzzy, c-format +#, c-format msgid "Saved game #%d quick loaded" -msgstr "Carga rápida exitosa dos datos gardados %d" +msgstr "Carga rápida exitosa da partida gardada %d." #: engines/toon/toon.cpp:243 -#, fuzzy, c-format +#, c-format msgid "Could not quick load the saved game #%d" -msgstr "Erro de carga rápida dos datos gardados %d" +msgstr "Erro de carga rápida da partida gardada %d." #: engines/wintermute/detection.cpp:58 msgid "Show FPS-counter" @@ -4592,11 +4605,11 @@ msgstr "Mostra o número actual de FPS na esquina superior esquerda." #: engines/wintermute/detection.cpp:68 msgid "Sprite bilinear filtering (SLOW)" -msgstr "" +msgstr "Filtraxe bilineal de sprites (LENTA)" #: engines/wintermute/detection.cpp:69 msgid "Apply bilinear filtering to individual sprites" -msgstr "" +msgstr "Aplica a flitraxe bilineal a cada sprite." #: engines/zvision/detection_tables.h:52 msgid "Use the original save/load screens instead of the ScummVM interface" @@ -4633,20 +4646,19 @@ msgid "Use high resolution MPEG video" msgstr "Empregar modo de vídeo MPEG de alta resolución" #: engines/zvision/detection_tables.h:92 -#, fuzzy msgid "Use MPEG video from the DVD version instead of lower resolution AVI" msgstr "" -"Emprega o vídeo MPEG da versión en DVD, no canto do AVI de baixa resolución." +"Emprega o vídeo MPEG da versión en DVD, no canto do AVI de menor resolución." #: engines/zvision/file/save_manager.cpp:220 -#, fuzzy, c-format +#, c-format msgid "" "This saved game uses version %u, but this engine only supports up to version " "%d. You will need an updated version of the engine to use this saved game." msgstr "" -"Estes datos gardados empregan a versión %u. No entanto, o motor só é " +"Esta partida gardada emprega a versión %u. No entanto, o motor só é " "compatíbel até a versión %d. Cómpre descargar unha versión actualizada do " -"motor para empregar estes datos gardados." +"motor para empregar esta partida gardada." #~ msgid "(You can always enable it in the options dialog on the Misc tab)" #~ msgstr "(Podes actívalo no diálogo de opción da pestana Misc.)" diff --git a/po/hu_HU.po b/po/hu_HU.po index 418ffce437..b8765217dd 100644 --- a/po/hu_HU.po +++ b/po/hu_HU.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: ScummVM 1.3.0svn\n" "Report-Msgid-Bugs-To: scummvm-devel@lists.scummvm.org\n" -"POT-Creation-Date: 2017-11-15 00:50+0100\n" +"POT-Creation-Date: 2017-11-21 22:47+0100\n" "PO-Revision-Date: 2017-11-10 16:20+0000\n" "Last-Translator: George Kormendi <grubycza@hotmail.com>\n" "Language-Team: Hungarian <https://translations.scummvm.org/projects/scummvm/" diff --git a/po/it_IT.po b/po/it_IT.po index db1f24e114..e4ba8deeeb 100644 --- a/po/it_IT.po +++ b/po/it_IT.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: ScummVM 1.3.0svn\n" "Report-Msgid-Bugs-To: scummvm-devel@lists.scummvm.org\n" -"POT-Creation-Date: 2017-11-15 00:50+0100\n" +"POT-Creation-Date: 2017-11-21 22:47+0100\n" "PO-Revision-Date: 2017-10-15 16:42+0000\n" "Last-Translator: Paolo Bossi <pbossi86@gmail.com>\n" "Language-Team: Italian <https://translations.scummvm.org/projects/scummvm/" diff --git a/po/nb_NO.po b/po/nb_NO.po index 53ccf89d11..be8a2fbff1 100644 --- a/po/nb_NO.po +++ b/po/nb_NO.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: ScummVM 1.3.0svn\n" "Report-Msgid-Bugs-To: scummvm-devel@lists.scummvm.org\n" -"POT-Creation-Date: 2017-11-15 00:50+0100\n" +"POT-Creation-Date: 2017-11-21 22:47+0100\n" "PO-Revision-Date: 2016-12-26 17:36+0000\n" "Last-Translator: Einar Johan Trøan Sømåen <einarjohants@gmail.com>\n" "Language-Team: Norwegian Bokmål <https://translations.scummvm.org/projects/" diff --git a/po/nl_NL.po b/po/nl_NL.po index ca33c70ad1..bb746d489c 100644 --- a/po/nl_NL.po +++ b/po/nl_NL.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: ScummVM 1.9.0git\n" "Report-Msgid-Bugs-To: scummvm-devel@lists.scummvm.org\n" -"POT-Creation-Date: 2017-11-15 00:50+0100\n" +"POT-Creation-Date: 2017-11-21 22:47+0100\n" "PO-Revision-Date: 2017-11-11 15:31+0000\n" "Last-Translator: Ben Castricum <github@bencastricum.nl>\n" "Language-Team: Dutch <https://translations.scummvm.org/projects/scummvm/" diff --git a/po/nn_NO.po b/po/nn_NO.po index f712423d26..b4cbe945b3 100644 --- a/po/nn_NO.po +++ b/po/nn_NO.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: ScummVM 1.3.0svn\n" "Report-Msgid-Bugs-To: scummvm-devel@lists.scummvm.org\n" -"POT-Creation-Date: 2017-11-15 00:50+0100\n" +"POT-Creation-Date: 2017-11-21 22:47+0100\n" "PO-Revision-Date: 2016-12-18 18:23+0000\n" "Last-Translator: Eugene Sandulenko <sev@scummvm.org>\n" "Language-Team: Norwegian Nynorsk <https://translations.scummvm.org/projects/" diff --git a/po/pl_PL.po b/po/pl_PL.po index f327217ad5..84e32a25b5 100644 --- a/po/pl_PL.po +++ b/po/pl_PL.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: ScummVM 1.3.0\n" "Report-Msgid-Bugs-To: scummvm-devel@lists.scummvm.org\n" -"POT-Creation-Date: 2017-11-15 00:50+0100\n" +"POT-Creation-Date: 2017-11-21 22:47+0100\n" "PO-Revision-Date: 2017-01-25 12:49+0000\n" "Last-Translator: Rafa³ Rzepecki <divided.mind@gmail.com>\n" "Language-Team: Polish <https://translations.scummvm.org/projects/scummvm/" diff --git a/po/pt_BR.po b/po/pt_BR.po index e1833b538b..1fad502174 100644 --- a/po/pt_BR.po +++ b/po/pt_BR.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: ScummVM 1.3.0svn\n" "Report-Msgid-Bugs-To: scummvm-devel@lists.scummvm.org\n" -"POT-Creation-Date: 2017-11-15 00:50+0100\n" +"POT-Creation-Date: 2017-11-21 22:47+0100\n" "PO-Revision-Date: 2017-03-03 22:26+0000\n" "Last-Translator: rafaelmessias <rmmartins@gmail.com>\n" "Language-Team: Portuguese (Brazil) <https://translations.scummvm.org/" diff --git a/po/pt_PT.po b/po/pt_PT.po index 9353874a96..96b5d23618 100644 --- a/po/pt_PT.po +++ b/po/pt_PT.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: ScummVM 1.10.0git\n" "Report-Msgid-Bugs-To: scummvm-devel@lists.scummvm.org\n" -"POT-Creation-Date: 2017-11-15 00:50+0100\n" +"POT-Creation-Date: 2017-11-21 22:47+0100\n" "PO-Revision-Date: 2017-01-30 14:50+0000\n" "Last-Translator: Vitor Santos <vitorhgsantos90@gmail.com>\n" "Language-Team: Portuguese (Portugal) <https://translations.scummvm.org/" diff --git a/po/ru_RU.po b/po/ru_RU.po index 6e9fdcbd19..381b3bdd33 100644 --- a/po/ru_RU.po +++ b/po/ru_RU.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: ScummVM 1.8.0svn\n" "Report-Msgid-Bugs-To: scummvm-devel@lists.scummvm.org\n" -"POT-Creation-Date: 2017-11-15 00:50+0100\n" +"POT-Creation-Date: 2017-11-21 22:47+0100\n" "PO-Revision-Date: 2017-06-20 15:35+0000\n" "Last-Translator: Ivan Lukyanov <lid-gr@tut.by>\n" "Language-Team: Russian <https://translations.scummvm.org/projects/scummvm/" diff --git a/po/scummvm.pot b/po/scummvm.pot index acfe0905ad..4ed6c21e8c 100644 --- a/po/scummvm.pot +++ b/po/scummvm.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: ScummVM 1.10.0git\n" +"Project-Id-Version: ScummVM 2.0.0git\n" "Report-Msgid-Bugs-To: scummvm-devel@lists.scummvm.org\n" -"POT-Creation-Date: 2017-11-15 00:50+0100\n" +"POT-Creation-Date: 2017-11-21 22:47+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/po/sv_SE.po b/po/sv_SE.po index 05074ea4bc..9ebfe86e8e 100644 --- a/po/sv_SE.po +++ b/po/sv_SE.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: ScummVM 1.5.0svn\n" "Report-Msgid-Bugs-To: scummvm-devel@lists.scummvm.org\n" -"POT-Creation-Date: 2017-11-15 00:50+0100\n" +"POT-Creation-Date: 2017-11-21 22:47+0100\n" "PO-Revision-Date: 2017-01-06 09:18+0000\n" "Last-Translator: Petter Sjölund <ignalina@mac.com>\n" "Language-Team: Swedish <https://translations.scummvm.org/projects/scummvm/" diff --git a/po/uk_UA.po b/po/uk_UA.po index 9cb3cc4a1d..c68f09ea66 100644 --- a/po/uk_UA.po +++ b/po/uk_UA.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ScummVM 1.9.0git\n" "Report-Msgid-Bugs-To: scummvm-devel@lists.scummvm.org\n" -"POT-Creation-Date: 2017-11-15 00:50+0100\n" +"POT-Creation-Date: 2017-11-21 22:47+0100\n" "PO-Revision-Date: 2017-06-14 14:55+0000\n" "Last-Translator: Eugene Sandulenko <sev@scummvm.org>\n" "Language-Team: Ukrainian <https://translations.scummvm.org/projects/scummvm/" diff --git a/po/zh-Latn_CN.po b/po/zh-Latn_CN.po index ee0ca542d4..912d0f45ca 100644 --- a/po/zh-Latn_CN.po +++ b/po/zh-Latn_CN.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: ScummVM 1.9.0git\n" "Report-Msgid-Bugs-To: scummvm-devel@lists.scummvm.org\n" -"POT-Creation-Date: 2017-11-15 00:50+0100\n" +"POT-Creation-Date: 2017-11-21 22:47+0100\n" "PO-Revision-Date: 2016-12-26 19:38+0000\n" "Last-Translator: Eugene Sandulenko <sev@scummvm.org>\n" "Language-Team: Chinese <https://translations.scummvm.org/projects/scummvm/" diff --git a/snapcraft.yaml b/snapcraft.yaml index 178a323414..eee5e6ae42 100644 --- a/snapcraft.yaml +++ b/snapcraft.yaml @@ -1,5 +1,5 @@ name: scummvm -version: "1.9.0git" +version: "2.0.0git" summary: ScummVM description: | ScummVM is a program which allows you to run certain classic graphical diff --git a/snapcraft.yaml.in b/snapcraft.yaml.in new file mode 100644 index 0000000000..a95477707a --- /dev/null +++ b/snapcraft.yaml.in @@ -0,0 +1,63 @@ +name: scummvm +version: "@VERSION@" +summary: ScummVM +description: | + ScummVM is a program which allows you to run certain classic graphical + point-and-click adventure games, provided you already have their data + files. The clever part about this: ScummVM just replaces the executables + shipped with the game, allowing you to play them on systems for which + they were never designed! +confinement: strict + +apps: + scummvm: + command: scummvm + plugs: [x11, home, pulseaudio, unity7, opengl] + +parts: + scummvm: + source: . + plugin: autotools +# Quick test build +# configflags: +# - --disable-all-engines +# - --enable-engine=scumm + build-packages: + - g++ + - make + - libsdl2-dev + - libjpeg62-dev + - libmpeg2-4-dev + - libogg-dev + - libvorbis-dev + - libflac-dev + - libmad0-dev + - libpng12-dev + - libtheora-dev + - libfaad-dev + - libfluidsynth-dev + - libfreetype6-dev + - zlib1g-dev + - libunity-dev + stage-packages: + - libicu55 + - libasound2 + - libc6 + - libfaad2 + - libflac8 + - libfluidsynth1 + - libgl1-mesa-dri + - libgl1-mesa-glx + - libjpeg62 + - libjpeg8 + - libmad0 + - libmpeg2-4 + - libogg0 + - libpng12-0 + - libsdl2-2.0-0 + - libsndio6.1 + - libstdc++6 + - libtheora0 + - libvorbis0a + - libvorbisfile3 + - zlib1g diff --git a/test/common/str.h b/test/common/str.h index 9f8c6fbd60..783ed53c48 100644 --- a/test/common/str.h +++ b/test/common/str.h @@ -340,7 +340,7 @@ class StringTestSuite : public CxxTest::TestSuite } void test_string_printf() { - TS_ASSERT_EQUALS( Common::String::format(""), "" ); + TS_ASSERT_EQUALS( Common::String::format(" "), " " ); TS_ASSERT_EQUALS( Common::String::format("%s", "test"), "test" ); TS_ASSERT_EQUALS( Common::String::format("%s.s%.02d", "monkey", 1), "monkey.s01" ); TS_ASSERT_EQUALS( Common::String::format("Some %s to make this string longer than the default built-in %s %d", "text", "capacity", 123456), "Some text to make this string longer than the default built-in capacity 123456" ); diff --git a/test/module.mk b/test/module.mk index 6974c7bfc1..9e844fa42d 100644 --- a/test/module.mk +++ b/test/module.mk @@ -29,13 +29,6 @@ TEST_LIBS += backends/platform/psp/memory.o \ backends/platform/psp/trace.o endif -ifdef HAVE_GCC3 -# In test/common/str.h, we test a zero length format string. This causes GCC -# to generate a warning which in turn poses a problem when building with -Werror. -# To work around this, we disable -Wformat here. -TEST_CFLAGS += -Wno-format -endif - # Enable this to get an X11 GUI for the error reporter. #TEST_FLAGS += --gui=X11Gui #TEST_LDFLAGS += -L/usr/X11R6/lib -lX11 |