aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--AUTHORS19
-rw-r--r--NEWS9
-rw-r--r--audio/audiostream.cpp21
-rw-r--r--audio/audiostream.h76
-rw-r--r--audio/decoders/adpcm.cpp30
-rw-r--r--audio/decoders/adpcm.h21
-rw-r--r--audio/decoders/aiff.cpp4
-rw-r--r--audio/decoders/codec.h7
-rw-r--r--audio/decoders/mp3.cpp357
-rw-r--r--audio/decoders/mp3.h21
-rw-r--r--audio/decoders/raw.cpp20
-rw-r--r--audio/decoders/raw.h12
-rw-r--r--audio/midiparser_xmidi.cpp2
-rw-r--r--audio/rate.cpp32
-rw-r--r--audio/rate_arm.cpp21
-rw-r--r--audio/rate_arm_asm.s34
-rw-r--r--audio/softsynth/fmtowns_pc98/towns_audio.cpp29
-rw-r--r--audio/softsynth/fmtowns_pc98/towns_euphony.cpp1192
-rw-r--r--audio/softsynth/fmtowns_pc98/towns_euphony.h239
-rw-r--r--backends/graphics/dispmanxsdl/dispmanxsdl-graphics.cpp590
-rw-r--r--backends/graphics/dispmanxsdl/dispmanxsdl-graphics.h53
-rw-r--r--backends/module.mk5
-rw-r--r--backends/platform/sdl/module.mk6
-rw-r--r--backends/platform/sdl/posix/posix-main.cpp2
-rw-r--r--backends/platform/sdl/raspberrypi/README.RASPBERRYPI106
-rw-r--r--backends/platform/sdl/raspberrypi/raspberrypi-main.cpp51
-rw-r--r--backends/platform/sdl/raspberrypi/raspberrypi.cpp42
-rw-r--r--backends/platform/sdl/raspberrypi/raspberrypi.h35
-rw-r--r--backends/platform/sdl/win32/win32-main.cpp5
-rw-r--r--backends/platform/symbian/mmp/config.mmh13
-rw-r--r--backends/platform/symbian/mmp/scummvm_avalanche.mmp.in1
-rw-r--r--backends/platform/symbian/mmp/scummvm_cge2.mmp.in1
-rw-r--r--backends/platform/symbian/mmp/scummvm_tsage.mmp.in1
-rw-r--r--backends/platform/symbian/src/SymbianOS.cpp4
-rw-r--r--backends/platform/symbian/src/portdefs.h8
-rw-r--r--backends/saves/default/default-saves.cpp5
-rw-r--r--common/algorithm.h6
-rw-r--r--common/dcl.cpp2
-rw-r--r--common/dcl.h1
-rw-r--r--common/scummsys.h2
-rw-r--r--common/xmlparser.cpp48
-rwxr-xr-xconfigure61
-rw-r--r--devtools/README4
-rw-r--r--devtools/create_kyradat/create_kyradat.cpp2
-rw-r--r--devtools/create_kyradat/resources/lok_pc98_japanese.h5
-rw-r--r--devtools/create_mortdat/create_mortdat.cpp1
-rw-r--r--devtools/create_mortdat/menudata.h50
-rw-r--r--devtools/create_project/create_project.cpp25
-rw-r--r--devtools/create_project/msbuild.cpp24
-rw-r--r--devtools/create_project/msbuild.h1
-rw-r--r--devtools/create_project/msvc.cpp10
-rw-r--r--devtools/create_project/msvc.h5
-rw-r--r--devtools/create_project/msvc14/create_project.sln28
-rw-r--r--devtools/create_project/msvc14/create_project.vcxproj223
-rw-r--r--devtools/create_project/msvc14/create_project.vcxproj.filters76
-rw-r--r--devtools/create_project/visualstudio.cpp2
-rwxr-xr-xdevtools/credits.pl25
-rwxr-xr-xdevtools/dist-scummvm.sh70
-rw-r--r--devtools/scumm-md5.txt57
-rw-r--r--dists/engine-data/kyra.datbin496648 -> 496676 bytes
-rw-r--r--dists/engine-data/mort.datbin76151 -> 76302 bytes
-rw-r--r--dists/engine-data/testbed-audiocd-files/TESTBED0
-rw-r--r--dists/msvc14/create_msvc14.bat105
-rw-r--r--dists/msvc14/readme.txt6
-rw-r--r--doc/de/Neues7
-rw-r--r--engines/access/configure.engine2
-rw-r--r--engines/bbvs/bbvs.cpp8
-rw-r--r--engines/bbvs/bbvs.h9
-rw-r--r--engines/bbvs/configure.engine2
-rw-r--r--engines/bbvs/detection.cpp17
-rw-r--r--engines/bbvs/dialogs.cpp30
-rw-r--r--engines/bbvs/minigames/bbairguitar.cpp25
-rw-r--r--engines/bbvs/minigames/bbtennis.cpp2
-rw-r--r--engines/bbvs/videoplayer.cpp11
-rw-r--r--engines/cine/cine.cpp52
-rw-r--r--engines/cine/cine.h1
-rw-r--r--engines/cine/main_loop.cpp4
-rw-r--r--engines/cine/saveload.cpp9
-rw-r--r--engines/cine/script_fw.cpp6
-rw-r--r--engines/cine/sound.cpp88
-rw-r--r--engines/cine/sound.h5
-rw-r--r--engines/fullpipe/gameloader.cpp2
-rw-r--r--engines/fullpipe/interaction.cpp2
-rw-r--r--engines/fullpipe/lift.cpp2
-rw-r--r--engines/fullpipe/messagehandlers.cpp2
-rw-r--r--engines/fullpipe/motion.cpp189
-rw-r--r--engines/fullpipe/motion.h93
-rw-r--r--engines/fullpipe/scenes.cpp4
-rw-r--r--engines/fullpipe/scenes/scene04.cpp14
-rw-r--r--engines/fullpipe/scenes/scene06.cpp8
-rw-r--r--engines/fullpipe/scenes/scene08.cpp4
-rw-r--r--engines/fullpipe/scenes/scene09.cpp6
-rw-r--r--engines/fullpipe/scenes/scene10.cpp2
-rw-r--r--engines/fullpipe/scenes/scene11.cpp8
-rw-r--r--engines/fullpipe/scenes/scene14.cpp10
-rw-r--r--engines/fullpipe/scenes/scene16.cpp2
-rw-r--r--engines/fullpipe/scenes/scene18and19.cpp2
-rw-r--r--engines/fullpipe/scenes/scene22.cpp8
-rw-r--r--engines/fullpipe/scenes/scene23.cpp6
-rw-r--r--engines/fullpipe/scenes/scene25.cpp2
-rw-r--r--engines/fullpipe/scenes/scene26.cpp2
-rw-r--r--engines/fullpipe/scenes/scene27.cpp8
-rw-r--r--engines/fullpipe/scenes/scene28.cpp2
-rw-r--r--engines/fullpipe/scenes/scene29.cpp14
-rw-r--r--engines/fullpipe/scenes/scene32.cpp8
-rw-r--r--engines/fullpipe/scenes/scene34.cpp12
-rw-r--r--engines/fullpipe/scenes/sceneFinal.cpp2
-rw-r--r--engines/gob/sound/cdrom.cpp5
-rw-r--r--engines/groovie/music.cpp8
-rw-r--r--engines/hopkins/computer.cpp8
-rw-r--r--engines/kyra/sound_intern.h2
-rw-r--r--engines/kyra/sound_towns.cpp100
-rw-r--r--engines/kyra/staticres.cpp2
-rw-r--r--engines/lastexpress/data/snd.cpp8
-rw-r--r--engines/lastexpress/data/snd.h6
-rw-r--r--engines/lure/res.cpp4
-rw-r--r--engines/lure/res_struct.cpp21
-rw-r--r--engines/lure/res_struct.h14
-rw-r--r--engines/mads/configure.engine2
-rw-r--r--engines/mads/detection_tables.h4
-rw-r--r--engines/mads/nebular/game_nebular.cpp4
-rw-r--r--engines/mads/nebular/menu_nebular.cpp26
-rw-r--r--engines/mads/nebular/menu_nebular.h15
-rw-r--r--engines/mads/nebular/nebular_scenes1.cpp2
-rw-r--r--engines/mads/nebular/sound_nebular.cpp6
-rw-r--r--engines/mads/resources.cpp4
-rw-r--r--engines/mohawk/sound.cpp30
-rw-r--r--engines/mohawk/sound.h6
-rw-r--r--engines/mortevielle/detection_tables.h2
-rw-r--r--engines/mortevielle/menu.cpp11
-rw-r--r--engines/mortevielle/sound.cpp44
-rw-r--r--engines/mortevielle/utils.cpp8
-rw-r--r--engines/neverhood/menumodule.cpp6
-rw-r--r--engines/neverhood/menumodule.h1
-rw-r--r--engines/neverhood/modules/module2700.cpp12
-rw-r--r--engines/neverhood/modules/module2700.h4
-rw-r--r--engines/sci/detection_tables.h11
-rw-r--r--engines/scumm/POTFILES1
-rw-r--r--engines/scumm/imuse_digi/dimuse.cpp3
-rw-r--r--engines/scumm/imuse_digi/dimuse_track.cpp9
-rw-r--r--engines/scumm/input.cpp9
-rw-r--r--engines/scumm/players/player_towns.cpp69
-rw-r--r--engines/scumm/players/player_towns.h4
-rw-r--r--engines/scumm/scumm-md5.h3
-rw-r--r--engines/sherlock/animation.cpp12
-rw-r--r--engines/sherlock/configure.engine2
-rw-r--r--engines/sherlock/debugger.cpp4
-rw-r--r--engines/sherlock/decompress.cpp128
-rw-r--r--engines/sherlock/detection_tables.h56
-rw-r--r--engines/sherlock/events.cpp41
-rw-r--r--engines/sherlock/events.h5
-rw-r--r--engines/sherlock/fonts.cpp68
-rw-r--r--engines/sherlock/image_file.cpp99
-rw-r--r--engines/sherlock/journal.cpp10
-rw-r--r--engines/sherlock/music.cpp12
-rw-r--r--engines/sherlock/music.h7
-rw-r--r--engines/sherlock/objects.cpp4
-rw-r--r--engines/sherlock/people.cpp5
-rw-r--r--engines/sherlock/scalpel/3do/movie_decoder.cpp43
-rw-r--r--engines/sherlock/scalpel/3do/movie_decoder.h3
-rw-r--r--engines/sherlock/scalpel/scalpel.cpp501
-rw-r--r--engines/sherlock/scalpel/scalpel.h53
-rw-r--r--engines/sherlock/scalpel/scalpel_fixed_text.cpp218
-rw-r--r--engines/sherlock/scalpel/scalpel_fixed_text.h68
-rw-r--r--engines/sherlock/scalpel/scalpel_journal.cpp19
-rw-r--r--engines/sherlock/scalpel/scalpel_map.cpp15
-rw-r--r--engines/sherlock/scalpel/scalpel_saveload.cpp3
-rw-r--r--engines/sherlock/scalpel/scalpel_scene.cpp146
-rw-r--r--engines/sherlock/scalpel/scalpel_scene.h2
-rw-r--r--engines/sherlock/scalpel/scalpel_screen.cpp251
-rw-r--r--engines/sherlock/scalpel/scalpel_screen.h40
-rw-r--r--engines/sherlock/scalpel/scalpel_talk.cpp116
-rw-r--r--engines/sherlock/scalpel/scalpel_talk.h26
-rw-r--r--engines/sherlock/scalpel/scalpel_user_interface.cpp113
-rw-r--r--engines/sherlock/scalpel/scalpel_user_interface.h3
-rw-r--r--engines/sherlock/scalpel/tsage/logo.cpp2
-rw-r--r--engines/sherlock/scene.cpp76
-rw-r--r--engines/sherlock/scene.h4
-rw-r--r--engines/sherlock/screen.cpp144
-rw-r--r--engines/sherlock/screen.h34
-rw-r--r--engines/sherlock/sherlock.cpp3
-rw-r--r--engines/sherlock/sherlock.h2
-rw-r--r--engines/sherlock/sound.cpp112
-rw-r--r--engines/sherlock/sound.h24
-rw-r--r--engines/sherlock/surface.cpp32
-rw-r--r--engines/sherlock/surface.h38
-rw-r--r--engines/sherlock/talk.cpp29
-rw-r--r--engines/sherlock/talk.h8
-rw-r--r--engines/sherlock/tattoo/tattoo.cpp9
-rw-r--r--engines/sherlock/tattoo/tattoo_darts.cpp115
-rw-r--r--engines/sherlock/tattoo/tattoo_fixed_text.cpp683
-rw-r--r--engines/sherlock/tattoo/tattoo_fixed_text.h120
-rw-r--r--engines/sherlock/tattoo/tattoo_inventory.cpp2
-rw-r--r--engines/sherlock/tattoo/tattoo_journal.cpp71
-rw-r--r--engines/sherlock/tattoo/tattoo_map.cpp17
-rw-r--r--engines/sherlock/tattoo/tattoo_people.cpp19
-rw-r--r--engines/sherlock/tattoo/tattoo_people.h2
-rw-r--r--engines/sherlock/tattoo/tattoo_resources.cpp394
-rw-r--r--engines/sherlock/tattoo/tattoo_resources.h9
-rw-r--r--engines/sherlock/tattoo/tattoo_scene.cpp36
-rw-r--r--engines/sherlock/tattoo/tattoo_talk.cpp4
-rw-r--r--engines/sherlock/tattoo/tattoo_user_interface.cpp23
-rw-r--r--engines/sherlock/tattoo/tattoo_user_interface.h3
-rw-r--r--engines/sherlock/tattoo/widget_base.cpp1
-rw-r--r--engines/sherlock/tattoo/widget_files.cpp23
-rw-r--r--engines/sherlock/tattoo/widget_inventory.cpp8
-rw-r--r--engines/sherlock/tattoo/widget_lab.cpp2
-rw-r--r--engines/sherlock/tattoo/widget_talk.cpp8
-rw-r--r--engines/sherlock/tattoo/widget_verbs.cpp5
-rw-r--r--engines/sword25/detection_tables.h13
-rw-r--r--engines/sword25/gfx/graphicengine.cpp36
-rw-r--r--engines/sword25/gfx/image/vectorimage.cpp11
-rw-r--r--engines/sword25/gfx/image/vectorimage.h1
-rw-r--r--engines/sword25/gfx/screenshot.cpp34
-rw-r--r--engines/sword25/gfx/staticbitmap.cpp4
-rw-r--r--engines/sword25/gfx/text.cpp36
-rw-r--r--engines/sword25/util/lua/scummvm_file.cpp4
-rw-r--r--engines/tinsel/music.cpp9
-rw-r--r--engines/tucker/staticres.cpp8
-rw-r--r--engines/tucker/tucker.h9
-rw-r--r--engines/wintermute/base/file/base_file.cpp2
-rw-r--r--engines/wintermute/base/gfx/base_surface.cpp5
-rw-r--r--engines/wintermute/detection_tables.h29
-rw-r--r--engines/wintermute/utils/convert_utf.cpp6
-rw-r--r--engines/wintermute/utils/convert_utf.h3
-rw-r--r--engines/zvision/POTFILES2
-rw-r--r--engines/zvision/video/zork_avi_decoder.cpp55
-rw-r--r--engines/zvision/video/zork_avi_decoder.h17
-rw-r--r--graphics/module.mk1
-rw-r--r--graphics/pixelformat.cpp64
-rw-r--r--graphics/pixelformat.h3
-rw-r--r--graphics/transparent_surface.cpp6
-rw-r--r--gui/ThemeEngine.cpp19
-rw-r--r--gui/credits.h17
-rw-r--r--gui/filebrowser-dialog.cpp160
-rw-r--r--gui/filebrowser-dialog.h64
-rw-r--r--gui/module.mk1
-rw-r--r--gui/recorderdialog.cpp2
-rw-r--r--gui/themes/default.inc57
-rw-r--r--gui/themes/scummclassic.zipbin110106 -> 111302 bytes
-rw-r--r--gui/themes/scummclassic/classic_layout.stx41
-rw-r--r--gui/themes/scummclassic/classic_layout_lowres.stx35
-rw-r--r--gui/themes/scummmodern.zipbin1485886 -> 1487079 bytes
-rw-r--r--gui/themes/scummmodern/scummmodern_layout.stx43
-rw-r--r--gui/themes/scummmodern/scummmodern_layout_lowres.stx37
-rwxr-xr-xgui/themes/scummtheme.py30
-rw-r--r--gui/themes/translations.datbin468738 -> 477774 bytes
-rw-r--r--gui/widgets/editable.cpp5
-rw-r--r--gui/widgets/edittext.cpp3
-rw-r--r--image/codecs/msvideo1.cpp100
-rw-r--r--image/codecs/msvideo1.h4
-rw-r--r--po/POTFILES7
-rw-r--r--po/be_BY.po355
-rw-r--r--po/ca_ES.po354
-rw-r--r--po/cs_CZ.po359
-rw-r--r--po/da_DA.po353
-rw-r--r--po/de_DE.po356
-rw-r--r--po/es_ES.po354
-rw-r--r--po/eu.po352
-rw-r--r--po/fi_FI.po353
-rw-r--r--po/fr_FR.po355
-rw-r--r--po/gl_ES.po354
-rw-r--r--po/hu_HU.po464
-rw-r--r--po/it_IT.po355
-rw-r--r--po/nb_NO.po353
-rw-r--r--po/nl_NL.po354
-rw-r--r--po/nn_NO.po353
-rw-r--r--po/pl_PL.po353
-rw-r--r--po/pt_BR.po352
-rw-r--r--po/ru_RU.po454
-rw-r--r--po/scummvm.pot342
-rw-r--r--po/se_SE.po353
-rw-r--r--po/uk_UA.po536
-rw-r--r--ports.mk8
-rw-r--r--test/common/algorithm.h18
-rw-r--r--video/avi_decoder.cpp97
-rw-r--r--video/avi_decoder.h10
-rw-r--r--video/mpegps_decoder.cpp211
-rw-r--r--video/mpegps_decoder.h36
279 files changed, 12203 insertions, 6188 deletions
diff --git a/AUTHORS b/AUTHORS
index e2cad187fe..8f814fde5e 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -62,10 +62,17 @@ ScummVM Team
Oliver Kiehl - (retired)
Ludvig Strigeus - (retired)
+ Access:
+ Arnaud Boutonne
+ Paul Gilbert
+
Avalanche:
Peter Bozso
Arnaud Boutonne
+ BBVS:
+ Benjamin Haisch
+
CGE:
Arnaud Boutonne
Paul Gilbert
@@ -194,6 +201,10 @@ ScummVM Team
Jordi Vilalta Prat
Lars Skovlund
+ Sherlock:
+ Paul Gilbert
+ Martin Kiewitz
+
Sky:
Robert Goeffringmann - (retired)
Oliver Kiehl - (retired)
@@ -327,6 +338,9 @@ ScummVM Team
Wii:
Andre Heider
+ Raspberry Pi:
+ Manuel Alfayate
+
Other subsystems
----------------
Infrastructure:
@@ -719,3 +733,8 @@ Special thanks to
Bob Bell, Michel Kripalani, Tommy Yune, from Presto Studios for providing
the source code of The Journeyman Project: Pegasus Prime.
+ Electronic Arts IP Preservation Team, particularly Stefan Serbicki, and
+ Vasyl Tsvirkunov of Electronic Arts for providing the source code of the
+ two Lost Files of Sherlock Holmes games. James M. Ferguson and Barry
+ Duncan for their tenacious efforts to recover the sources.
+
diff --git a/NEWS b/NEWS
index f9aac42b6e..803a1ced8e 100644
--- a/NEWS
+++ b/NEWS
@@ -7,6 +7,10 @@ For a more comprehensive changelog of the latest experimental code, see:
- Added support for Sfinx.
- Added support for Zork Nemesis: The Forbidden Lands.
- Added support for Zork: Grand Inquisitor.
+ - Added support for The Lost Files of Sherlock Holmes: The Case of the Serrated Scalpel.
+ - Added support for The Lost Files of Sherlock Holmes: The Case of the Rose Tattoo.
+ - Added support for Beavis and Butthead in Virtual Stupidity.
+ - Added support for Amazon: Guardians of Eden.
General:
- Updated Munt MT-32 emulation code to version 1.5.0.
@@ -35,6 +39,9 @@ For a more comprehensive changelog of the latest experimental code, see:
head scene (bug #6728). It may have been happening in other scenes as
well.
+ CinE:
+ - Added support for music in CD version of Future Wars.
+
MADE:
- Improved AdLib music support in Return to Zork.
@@ -50,6 +57,8 @@ For a more comprehensive changelog of the latest experimental code, see:
- Improve support for Japanese PC-9801 games.
SCUMM:
+ - Major improvements to Korean versions text rendering.
+ - Implemented original Maniac Mansion v0-v1 walking code.
- It is now possible to play Maniac Mansion from within Day of the
Tentacle, with a few caveats. See README for details.
diff --git a/audio/audiostream.cpp b/audio/audiostream.cpp
index c413edb73d..88c41e8503 100644
--- a/audio/audiostream.cpp
+++ b/audio/audiostream.cpp
@@ -33,6 +33,7 @@
#include "audio/decoders/quicktime.h"
#include "audio/decoders/raw.h"
#include "audio/decoders/vorbis.h"
+#include "audio/mixer.h"
namespace Audio {
@@ -465,4 +466,24 @@ AudioStream *makeLimitingAudioStream(AudioStream *parentStream, const Timestamp
return new LimitingAudioStream(parentStream, length, disposeAfterUse);
}
+/**
+ * An AudioStream that plays nothing and immediately returns that
+ * the endOfStream() has been reached
+ */
+class NullAudioStream : public AudioStream {
+public:
+ bool isStereo() const { return false; }
+ int getRate() const;
+ int readBuffer(int16 *data, const int numSamples) { return 0; }
+ bool endOfData() const { return true; }
+};
+
+int NullAudioStream::getRate() const {
+ return g_system->getMixer()->getOutputRate();
+}
+
+AudioStream *makeNullAudioStream() {
+ return new NullAudioStream();
+}
+
} // End of namespace Audio
diff --git a/audio/audiostream.h b/audio/audiostream.h
index 347a37b9dc..a60d5a2086 100644
--- a/audio/audiostream.h
+++ b/audio/audiostream.h
@@ -30,6 +30,10 @@
#include "audio/timestamp.h"
+namespace Common {
+class SeekableReadStream;
+}
+
namespace Audio {
/**
@@ -86,7 +90,7 @@ public:
* to its initial state. Note that rewinding itself is not required to
* be working when the stream is being played by Mixer!
*/
-class RewindableAudioStream : public AudioStream {
+class RewindableAudioStream : public virtual AudioStream {
public:
/**
* Rewinds the stream to its start.
@@ -153,7 +157,7 @@ AudioStream *makeLoopingAudioStream(RewindableAudioStream *stream, uint loops);
* interface for seeking. The seeking itself is not required to be
* working while the stream is being played by Mixer!
*/
-class SeekableAudioStream : public RewindableAudioStream {
+class SeekableAudioStream : public virtual RewindableAudioStream {
public:
/**
* Tries to load a file by trying all available formats.
@@ -367,6 +371,74 @@ Timestamp convertTimeToStreamPos(const Timestamp &where, int rate, bool isStereo
*/
AudioStream *makeLimitingAudioStream(AudioStream *parentStream, const Timestamp &length, DisposeAfterUse::Flag disposeAfterUse = DisposeAfterUse::YES);
+/**
+ * An AudioStream designed to work in terms of packets.
+ *
+ * It is similar in concept to QueuingAudioStream, but does not
+ * necessarily rely on the data from each queued AudioStream
+ * being separate.
+ */
+class PacketizedAudioStream : public virtual AudioStream {
+public:
+ virtual ~PacketizedAudioStream() {}
+
+ /**
+ * Queue the next packet to be decoded.
+ */
+ virtual void queuePacket(Common::SeekableReadStream *data) = 0;
+
+ /**
+ * Mark this stream as finished. That is, signal that no further data
+ * will be queued to it. Only after this has been done can this
+ * stream ever 'end'.
+ */
+ virtual void finish() = 0;
+};
+
+/**
+ * A PacketizedAudioStream that works closer to a QueuingAudioStream.
+ * It queues individual packets as whole AudioStream to an internal
+ * QueuingAudioStream. This is used for writing quick wrappers against
+ * e.g. RawStream, which can be made into PacketizedAudioStreams with
+ * little effort.
+ */
+class StatelessPacketizedAudioStream : public PacketizedAudioStream {
+public:
+ StatelessPacketizedAudioStream(uint rate, uint channels) :
+ _rate(rate), _channels(channels), _stream(makeQueuingAudioStream(rate, channels == 2)) {}
+ virtual ~StatelessPacketizedAudioStream() {}
+
+ // AudioStream API
+ bool isStereo() const { return _channels == 2; }
+ int getRate() const { return _rate; }
+ int readBuffer(int16 *data, const int numSamples) { return _stream->readBuffer(data, numSamples); }
+ bool endOfData() const { return _stream->endOfData(); }
+ bool endOfStream() const { return _stream->endOfStream(); }
+
+ // PacketizedAudioStream API
+ void queuePacket(Common::SeekableReadStream *data) { _stream->queueAudioStream(makeStream(data)); }
+ void finish() { _stream->finish(); }
+
+ uint getChannels() const { return _channels; }
+
+protected:
+ /**
+ * Make the AudioStream for a given packet
+ */
+ virtual AudioStream *makeStream(Common::SeekableReadStream *data) = 0;
+
+private:
+ uint _rate;
+ uint _channels;
+ Common::ScopedPtr<QueuingAudioStream> _stream;
+};
+
+/**
+ * Create an AudioStream that plays nothing and immediately returns that
+ * endOfStream() has been reached.
+ */
+AudioStream *makeNullAudioStream();
+
} // End of namespace Audio
#endif
diff --git a/audio/decoders/adpcm.cpp b/audio/decoders/adpcm.cpp
index 2f710f759d..fe5eec5dcc 100644
--- a/audio/decoders/adpcm.cpp
+++ b/audio/decoders/adpcm.cpp
@@ -457,4 +457,34 @@ RewindableAudioStream *makeADPCMStream(Common::SeekableReadStream *stream, Dispo
}
}
+class PacketizedADPCMStream : public StatelessPacketizedAudioStream {
+public:
+ PacketizedADPCMStream(ADPCMType type, int rate, int channels, uint32 blockAlign) :
+ StatelessPacketizedAudioStream(rate, channels), _type(type), _blockAlign(blockAlign) {}
+
+protected:
+ AudioStream *makeStream(Common::SeekableReadStream *data);
+
+private:
+ ADPCMType _type;
+ uint32 _blockAlign;
+};
+
+AudioStream *PacketizedADPCMStream::makeStream(Common::SeekableReadStream *data) {
+ return makeADPCMStream(data, DisposeAfterUse::YES, data->size(), _type, getRate(), getChannels(), _blockAlign);
+}
+
+PacketizedAudioStream *makePacketizedADPCMStream(ADPCMType type, int rate, int channels, uint32 blockAlign) {
+ // Filter out types we can't support (they're not fully stateless)
+ switch (type) {
+ case kADPCMOki:
+ case kADPCMDVI:
+ return 0;
+ default:
+ break;
+ }
+
+ return new PacketizedADPCMStream(type, rate, channels, blockAlign);
+}
+
} // End of namespace Audio
diff --git a/audio/decoders/adpcm.h b/audio/decoders/adpcm.h
index bf6e7f759d..650bc341b3 100644
--- a/audio/decoders/adpcm.h
+++ b/audio/decoders/adpcm.h
@@ -44,6 +44,7 @@ class SeekableReadStream;
namespace Audio {
+class PacketizedAudioStream;
class RewindableAudioStream;
// There are several types of ADPCM encoding, only some are supported here
@@ -81,6 +82,26 @@ RewindableAudioStream *makeADPCMStream(
int channels,
uint32 blockAlign = 0);
+/**
+ * Creates a PacketizedAudioStream that will automatically queue
+ * packets as individual AudioStreams like returned by makeADPCMStream.
+ *
+ * Due to the ADPCM types not necessarily supporting stateless
+ * streaming, OKI and DVI are not supported by this function
+ * and will return NULL.
+ *
+ * @param type the compression type used
+ * @param rate the sampling rate
+ * @param channels the number of channels
+ * @param blockAlign block alignment ???
+ * @return The new PacketizedAudioStream or NULL, if the type isn't supported.
+ */
+PacketizedAudioStream *makePacketizedADPCMStream(
+ ADPCMType type,
+ int rate,
+ int channels,
+ uint32 blockAlign = 0);
+
} // End of namespace Audio
#endif
diff --git a/audio/decoders/aiff.cpp b/audio/decoders/aiff.cpp
index 72baf84582..e1949ebb07 100644
--- a/audio/decoders/aiff.cpp
+++ b/audio/decoders/aiff.cpp
@@ -102,7 +102,7 @@ RewindableAudioStream *makeAIFFStream(Common::SeekableReadStream *stream, Dispos
bool foundSSND = false;
uint16 channels = 0, bitsPerSample = 0;
- uint32 blockAlign = 0, rate = 0;
+ uint32 rate = 0;
uint32 codec = kCodecPCM; // AIFF default
Common::SeekableReadStream *dataStream = 0;
@@ -128,7 +128,7 @@ RewindableAudioStream *makeAIFFStream(Common::SeekableReadStream *stream, Dispos
case MKTAG('S', 'S', 'N', 'D'):
foundSSND = true;
/* uint32 offset = */ stream->readUint32BE();
- blockAlign = stream->readUint32BE();
+ /* uint32 blockAlign = */ stream->readUint32BE();
dataStream = new Common::SeekableSubReadStream(stream, stream->pos(), stream->pos() + length - 8, disposeAfterUse);
break;
case MKTAG('F', 'V', 'E', 'R'):
diff --git a/audio/decoders/codec.h b/audio/decoders/codec.h
index 93b6878dee..75910c0963 100644
--- a/audio/decoders/codec.h
+++ b/audio/decoders/codec.h
@@ -31,6 +31,13 @@ namespace Audio {
class AudioStream;
+/**
+ * @deprecated The old method of handling audio codecs that rely
+ * on the state remaining the same between calls. This should
+ * only be used for old code.
+ *
+ * DEPRECATED; USE PacketizedAudioStream INSTEAD!
+ */
class Codec {
public:
Codec() {}
diff --git a/audio/decoders/mp3.cpp b/audio/decoders/mp3.cpp
index feb531f5ae..36233a2e13 100644
--- a/audio/decoders/mp3.cpp
+++ b/audio/decoders/mp3.cpp
@@ -25,8 +25,11 @@
#ifdef USE_MAD
#include "common/debug.h"
+#include "common/mutex.h"
#include "common/ptr.h"
+#include "common/queue.h"
#include "common/stream.h"
+#include "common/substream.h"
#include "common/textconsole.h"
#include "common/util.h"
@@ -45,107 +48,116 @@ namespace Audio {
#pragma mark -
-class MP3Stream : public SeekableAudioStream {
+class BaseMP3Stream : public virtual AudioStream {
+public:
+ BaseMP3Stream();
+ virtual ~BaseMP3Stream();
+
+ bool endOfData() const { return _state == MP3_STATE_EOS; }
+ bool isStereo() const { return _channels == 2; }
+ int getRate() const { return _rate; }
+
protected:
+ void decodeMP3Data(Common::ReadStream &stream);
+ void readMP3Data(Common::ReadStream &stream);
+
+ void initStream(Common::ReadStream &stream);
+ void readHeader(Common::ReadStream &stream);
+ void deinitStream();
+
+ int fillBuffer(Common::ReadStream &stream, int16 *buffer, const int numSamples);
+
enum State {
MP3_STATE_INIT, // Need to init the decoder
MP3_STATE_READY, // ready for processing data
MP3_STATE_EOS // end of data reached (may need to loop)
};
- Common::DisposablePtr<Common::SeekableReadStream> _inStream;
-
uint _posInFrame;
State _state;
- Timestamp _length;
mad_timer_t _curTime;
mad_stream _stream;
mad_frame _frame;
mad_synth _synth;
+ uint _channels;
+ uint _rate;
+
enum {
BUFFER_SIZE = 5 * 8192
};
// This buffer contains a slab of input data
byte _buf[BUFFER_SIZE + MAD_BUFFER_GUARD];
+};
+class MP3Stream : private BaseMP3Stream, public SeekableAudioStream {
public:
MP3Stream(Common::SeekableReadStream *inStream,
DisposeAfterUse::Flag dispose);
- ~MP3Stream();
int readBuffer(int16 *buffer, const int numSamples);
-
- bool endOfData() const { return _state == MP3_STATE_EOS; }
- bool isStereo() const { return MAD_NCHANNELS(&_frame.header) == 2; }
- int getRate() const { return _frame.header.samplerate; }
-
bool seek(const Timestamp &where);
Timestamp getLength() const { return _length; }
+
protected:
- void decodeMP3Data();
- void readMP3Data();
+ Common::ScopedPtr<Common::SeekableReadStream> _inStream;
- void initStream();
- void readHeader();
- void deinitStream();
+ Timestamp _length;
+
+private:
+ static Common::SeekableReadStream *skipID3(Common::SeekableReadStream *stream, DisposeAfterUse::Flag dispose);
};
-MP3Stream::MP3Stream(Common::SeekableReadStream *inStream, DisposeAfterUse::Flag dispose) :
- _inStream(inStream, dispose),
+class PacketizedMP3Stream : private BaseMP3Stream, public PacketizedAudioStream {
+public:
+ PacketizedMP3Stream(Common::SeekableReadStream &firstPacket);
+ PacketizedMP3Stream(uint channels, uint rate);
+ ~PacketizedMP3Stream();
+
+ // AudioStream API
+ int readBuffer(int16 *buffer, const int numSamples);
+ bool endOfStream() const;
+
+ // PacketizedAudioStream API
+ void queuePacket(Common::SeekableReadStream *packet);
+ void finish();
+
+private:
+ Common::Mutex _mutex;
+ Common::Queue<Common::SeekableReadStream *> _queue;
+ bool _finished;
+};
+
+
+BaseMP3Stream::BaseMP3Stream() :
_posInFrame(0),
_state(MP3_STATE_INIT),
- _length(0, 1000),
_curTime(mad_timer_zero) {
// The MAD_BUFFER_GUARD must always contain zeros (the reason
// for this is that the Layer III Huffman decoder of libMAD
// may read a few bytes beyond the end of the input buffer).
memset(_buf + BUFFER_SIZE, 0, MAD_BUFFER_GUARD);
-
- // Calculate the length of the stream
- initStream();
-
- while (_state != MP3_STATE_EOS)
- readHeader();
-
- // To rule out any invalid sample rate to be encountered here, say in case the
- // MP3 stream is invalid, we just check the MAD error code here.
- // We need to assure this, since else we might trigger an assertion in Timestamp
- // (When getRate() returns 0 or a negative number to be precise).
- // Note that we allow "MAD_ERROR_BUFLEN" as error code here, since according
- // to mad.h it is also set on EOF.
- if ((_stream.error == MAD_ERROR_NONE || _stream.error == MAD_ERROR_BUFLEN) && getRate() > 0)
- _length = Timestamp(mad_timer_count(_curTime, MAD_UNITS_MILLISECONDS), getRate());
-
- deinitStream();
-
- // Reinit stream
- _state = MP3_STATE_INIT;
-
- // Decode the first chunk of data. This is necessary so that _frame
- // is setup and isStereo() and getRate() return correct results.
- decodeMP3Data();
}
-MP3Stream::~MP3Stream() {
+BaseMP3Stream::~BaseMP3Stream() {
deinitStream();
}
-void MP3Stream::decodeMP3Data() {
+void BaseMP3Stream::decodeMP3Data(Common::ReadStream &stream) {
do {
if (_state == MP3_STATE_INIT)
- initStream();
+ initStream(stream);
if (_state == MP3_STATE_EOS)
return;
// If necessary, load more data into the stream decoder
if (_stream.error == MAD_ERROR_BUFLEN)
- readMP3Data();
+ readMP3Data(stream);
while (_state == MP3_STATE_READY) {
_stream.error = MAD_ERROR_NONE;
@@ -179,11 +191,11 @@ void MP3Stream::decodeMP3Data() {
_state = MP3_STATE_EOS;
}
-void MP3Stream::readMP3Data() {
+void BaseMP3Stream::readMP3Data(Common::ReadStream &stream) {
uint32 remaining = 0;
// Give up immediately if we already used up all data in the stream
- if (_inStream->eos()) {
+ if (stream.eos()) {
_state = MP3_STATE_EOS;
return;
}
@@ -198,7 +210,7 @@ void MP3Stream::readMP3Data() {
}
// Try to read the next block
- uint32 size = _inStream->read(_buf + remaining, BUFFER_SIZE - remaining);
+ uint32 size = stream.read(_buf + remaining, BUFFER_SIZE - remaining);
if (size <= 0) {
_state = MP3_STATE_EOS;
return;
@@ -209,31 +221,7 @@ void MP3Stream::readMP3Data() {
mad_stream_buffer(&_stream, _buf, size + remaining);
}
-bool MP3Stream::seek(const Timestamp &where) {
- if (where == _length) {
- _state = MP3_STATE_EOS;
- return true;
- } else if (where > _length) {
- return false;
- }
-
- const uint32 time = where.msecs();
-
- mad_timer_t destination;
- mad_timer_set(&destination, time / 1000, time % 1000, 1000);
-
- if (_state != MP3_STATE_READY || mad_timer_compare(destination, _curTime) < 0)
- initStream();
-
- while (mad_timer_compare(destination, _curTime) > 0 && _state != MP3_STATE_EOS)
- readHeader();
-
- decodeMP3Data();
-
- return (_state != MP3_STATE_EOS);
-}
-
-void MP3Stream::initStream() {
+void BaseMP3Stream::initStream(Common::ReadStream &stream) {
if (_state != MP3_STATE_INIT)
deinitStream();
@@ -243,41 +231,23 @@ void MP3Stream::initStream() {
mad_synth_init(&_synth);
// Reset the stream data
- _inStream->seek(0, SEEK_SET);
_curTime = mad_timer_zero;
_posInFrame = 0;
-
- // Skip ID3 TAG if any
- // ID3v1 (beginning with with 'TAG') is located at the end of files. So we can ignore those.
- // ID3v2 can be located at the start of files and begins with a 10 bytes header, the first 3 bytes being 'ID3'.
- // The tag size is coded on the last 4 bytes of the 10 bytes header as a 32 bit synchsafe integer.
- // See http://id3.org/id3v2.4.0-structure for details.
- char data[10];
- _inStream->read(data, 10);
- if (data[0] == 'I' && data[1] == 'D' && data[2] == '3') {
- uint32 size = data[9] + 128 * (data[8] + 128 * (data[7] + 128 * data[6]));
- // This size does not include an optional 10 bytes footer. Check if it is present.
- if (data[5] & 0x10)
- size += 10;
- debug("Skipping ID3 TAG (%d bytes)", size + 10);
- _inStream->seek(size, SEEK_CUR);
- } else
- _inStream->seek(0, SEEK_SET);
// Update state
_state = MP3_STATE_READY;
// Read the first few sample bytes
- readMP3Data();
+ readMP3Data(stream);
}
-void MP3Stream::readHeader() {
+void BaseMP3Stream::readHeader(Common::ReadStream &stream) {
if (_state != MP3_STATE_READY)
return;
// If necessary, load more data into the stream decoder
if (_stream.error == MAD_ERROR_BUFLEN)
- readMP3Data();
+ readMP3Data(stream);
while (_state != MP3_STATE_EOS) {
_stream.error = MAD_ERROR_NONE;
@@ -287,7 +257,7 @@ void MP3Stream::readHeader() {
// be far too slow). Hence we perform this explicitly in a separate step.
if (mad_header_decode(&_frame.header, &_stream) == -1) {
if (_stream.error == MAD_ERROR_BUFLEN) {
- readMP3Data(); // Read more data
+ readMP3Data(stream); // Read more data
continue;
} else if (MAD_RECOVERABLE(_stream.error)) {
debug(6, "MP3Stream: Recoverable error in mad_header_decode (%s)", mad_stream_errorstr(&_stream));
@@ -307,7 +277,7 @@ void MP3Stream::readHeader() {
_state = MP3_STATE_EOS;
}
-void MP3Stream::deinitStream() {
+void BaseMP3Stream::deinitStream() {
if (_state == MP3_STATE_INIT)
return;
@@ -319,7 +289,7 @@ void MP3Stream::deinitStream() {
_state = MP3_STATE_EOS;
}
-static inline int scale_sample(mad_fixed_t sample) {
+static inline int scaleSample(mad_fixed_t sample) {
// round
sample += (1L << (MAD_F_FRACBITS - 16));
@@ -333,28 +303,202 @@ static inline int scale_sample(mad_fixed_t sample) {
return sample >> (MAD_F_FRACBITS + 1 - 16);
}
-int MP3Stream::readBuffer(int16 *buffer, const int numSamples) {
+int BaseMP3Stream::fillBuffer(Common::ReadStream &stream, int16 *buffer, const int numSamples) {
int samples = 0;
// Keep going as long as we have input available
while (samples < numSamples && _state != MP3_STATE_EOS) {
const int len = MIN(numSamples, samples + (int)(_synth.pcm.length - _posInFrame) * MAD_NCHANNELS(&_frame.header));
while (samples < len) {
- *buffer++ = (int16)scale_sample(_synth.pcm.samples[0][_posInFrame]);
+ *buffer++ = (int16)scaleSample(_synth.pcm.samples[0][_posInFrame]);
samples++;
if (MAD_NCHANNELS(&_frame.header) == 2) {
- *buffer++ = (int16)scale_sample(_synth.pcm.samples[1][_posInFrame]);
+ *buffer++ = (int16)scaleSample(_synth.pcm.samples[1][_posInFrame]);
samples++;
}
_posInFrame++;
}
if (_posInFrame >= _synth.pcm.length) {
// We used up all PCM data in the current frame -- read & decode more
- decodeMP3Data();
+ decodeMP3Data(stream);
+ }
+ }
+ return samples;
+}
+
+MP3Stream::MP3Stream(Common::SeekableReadStream *inStream, DisposeAfterUse::Flag dispose) :
+ BaseMP3Stream(),
+ _inStream(skipID3(inStream, dispose)),
+ _length(0, 1000) {
+
+ // Initialize the stream with some data and set the channels and rate
+ // variables
+ decodeMP3Data(*_inStream);
+ _channels = MAD_NCHANNELS(&_frame.header);
+ _rate = _frame.header.samplerate;
+
+ // Calculate the length of the stream
+ while (_state != MP3_STATE_EOS)
+ readHeader(*_inStream);
+
+ // To rule out any invalid sample rate to be encountered here, say in case the
+ // MP3 stream is invalid, we just check the MAD error code here.
+ // We need to assure this, since else we might trigger an assertion in Timestamp
+ // (When getRate() returns 0 or a negative number to be precise).
+ // Note that we allow "MAD_ERROR_BUFLEN" as error code here, since according
+ // to mad.h it is also set on EOF.
+ if ((_stream.error == MAD_ERROR_NONE || _stream.error == MAD_ERROR_BUFLEN) && getRate() > 0)
+ _length = Timestamp(mad_timer_count(_curTime, MAD_UNITS_MILLISECONDS), getRate());
+
+ deinitStream();
+
+ // Reinit stream
+ _state = MP3_STATE_INIT;
+ _inStream->seek(0);
+
+ // Decode the first chunk of data to set up the stream again.
+ decodeMP3Data(*_inStream);
+}
+
+int MP3Stream::readBuffer(int16 *buffer, const int numSamples) {
+ return fillBuffer(*_inStream, buffer, numSamples);
+}
+
+bool MP3Stream::seek(const Timestamp &where) {
+ if (where == _length) {
+ _state = MP3_STATE_EOS;
+ return true;
+ } else if (where > _length) {
+ return false;
+ }
+
+ const uint32 time = where.msecs();
+
+ mad_timer_t destination;
+ mad_timer_set(&destination, time / 1000, time % 1000, 1000);
+
+ if (_state != MP3_STATE_READY || mad_timer_compare(destination, _curTime) < 0) {
+ _inStream->seek(0);
+ initStream(*_inStream);
+ }
+
+ while (mad_timer_compare(destination, _curTime) > 0 && _state != MP3_STATE_EOS)
+ readHeader(*_inStream);
+
+ decodeMP3Data(*_inStream);
+
+ return (_state != MP3_STATE_EOS);
+}
+
+Common::SeekableReadStream *MP3Stream::skipID3(Common::SeekableReadStream *stream, DisposeAfterUse::Flag dispose) {
+ // Skip ID3 TAG if any
+ // ID3v1 (beginning with with 'TAG') is located at the end of files. So we can ignore those.
+ // ID3v2 can be located at the start of files and begins with a 10 bytes header, the first 3 bytes being 'ID3'.
+ // The tag size is coded on the last 4 bytes of the 10 bytes header as a 32 bit synchsafe integer.
+ // See http://id3.org/id3v2.4.0-structure for details.
+ char data[10];
+ stream->read(data, sizeof(data));
+
+ uint32 offset = 0;
+ if (!stream->eos() && data[0] == 'I' && data[1] == 'D' && data[2] == '3') {
+ uint32 size = data[9] + 128 * (data[8] + 128 * (data[7] + 128 * data[6]));
+ // This size does not include an optional 10 bytes footer. Check if it is present.
+ if (data[5] & 0x10)
+ size += 10;
+
+ // Add in the 10 bytes we read in
+ size += sizeof(data);
+ debug("Skipping ID3 TAG (%d bytes)", size);
+ offset = size;
+ }
+
+ return new Common::SeekableSubReadStream(stream, offset, stream->size(), dispose);
+}
+
+PacketizedMP3Stream::PacketizedMP3Stream(Common::SeekableReadStream &firstPacket) :
+ BaseMP3Stream(),
+ _finished(false) {
+
+ // Load some data to get the channels/rate
+ _queue.push(&firstPacket);
+ decodeMP3Data(firstPacket);
+ _channels = MAD_NCHANNELS(&_frame.header);
+ _rate = _frame.header.samplerate;
+
+ // Clear everything
+ deinitStream();
+ _state = MP3_STATE_INIT;
+ _queue.clear();
+}
+
+PacketizedMP3Stream::PacketizedMP3Stream(uint channels, uint rate) :
+ BaseMP3Stream(),
+ _finished(false) {
+ _channels = channels;
+ _rate = rate;
+}
+
+PacketizedMP3Stream::~PacketizedMP3Stream() {
+ while (!_queue.empty()) {
+ delete _queue.front();
+ _queue.pop();
+ }
+}
+
+int PacketizedMP3Stream::readBuffer(int16 *buffer, const int numSamples) {
+ int samples = 0;
+
+ while (samples < numSamples) {
+ Common::StackLock lock(_mutex);
+
+ // Empty? Bail out for now
+ if (_queue.empty())
+ return samples;
+
+ Common::SeekableReadStream *packet = _queue.front();
+
+ if (_state == MP3_STATE_INIT) {
+ // Initialize everything
+ decodeMP3Data(*packet);
+ } else if (_state == MP3_STATE_EOS) {
+ // Reset the end-of-stream setting
+ _state = MP3_STATE_READY;
+ }
+
+ samples += fillBuffer(*packet, buffer + samples, numSamples - samples);
+
+ // If the stream is done, kill it
+ if (packet->pos() >= packet->size()) {
+ _queue.pop();
+ delete packet;
}
}
+
return samples;
}
+bool PacketizedMP3Stream::endOfStream() const {
+ if (!endOfData())
+ return false;
+
+ // Lock the mutex
+ Common::StackLock lock(_mutex);
+ if (!_queue.empty())
+ return false;
+
+ return _finished;
+}
+
+void PacketizedMP3Stream::queuePacket(Common::SeekableReadStream *packet) {
+ Common::StackLock lock(_mutex);
+ assert(!_finished);
+ _queue.push(packet);
+}
+
+void PacketizedMP3Stream::finish() {
+ Common::StackLock lock(_mutex);
+ _finished = true;
+}
+
#pragma mark -
#pragma mark --- MP3 factory functions ---
@@ -383,6 +527,15 @@ SeekableAudioStream *makeMP3Stream(
}
}
+PacketizedAudioStream *makePacketizedMP3Stream(Common::SeekableReadStream &firstPacket) {
+ return new PacketizedMP3Stream(firstPacket);
+}
+
+PacketizedAudioStream *makePacketizedMP3Stream(uint channels, uint rate) {
+ return new PacketizedMP3Stream(channels, rate);
+}
+
+
} // End of namespace Audio
#endif // #ifdef USE_MAD
diff --git a/audio/decoders/mp3.h b/audio/decoders/mp3.h
index 609181bdba..709aad82b9 100644
--- a/audio/decoders/mp3.h
+++ b/audio/decoders/mp3.h
@@ -51,6 +51,7 @@ class SeekableReadStream;
namespace Audio {
+class PacketizedAudioStream;
class SeekableAudioStream;
/**
@@ -65,6 +66,26 @@ SeekableAudioStream *makeMP3Stream(
Common::SeekableReadStream *stream,
DisposeAfterUse::Flag disposeAfterUse);
+/**
+ * Create a new PacketizedAudioStream from the first packet in the given
+ * stream. It does not own the packet and must be queued again later.
+ *
+ * @param firstPacket the SeekableReadStream from which to read the MP3 data
+ * @return a new PacketizedAudioStream
+ */
+PacketizedAudioStream *makePacketizedMP3Stream(
+ Common::SeekableReadStream &firstPacket);
+
+/**
+ * Create a new PacketizedAudioStream for a given number of channels
+ * and sample rate.
+ *
+ * @param firstPacket the SeekableReadStream from which to read the MP3 data
+ * @return a new PacketizedAudioStream
+ */
+PacketizedAudioStream *makePacketizedMP3Stream(
+ uint channels, uint rate);
+
} // End of namespace Audio
#endif // #ifdef USE_MAD
diff --git a/audio/decoders/raw.cpp b/audio/decoders/raw.cpp
index 9a9f79092a..477a8e7967 100644
--- a/audio/decoders/raw.cpp
+++ b/audio/decoders/raw.cpp
@@ -221,4 +221,24 @@ SeekableAudioStream *makeRawStream(const byte *buffer, uint32 size,
return makeRawStream(new Common::MemoryReadStream(buffer, size, disposeAfterUse), rate, flags, DisposeAfterUse::YES);
}
+class PacketizedRawStream : public StatelessPacketizedAudioStream {
+public:
+ PacketizedRawStream(int rate, byte flags) :
+ StatelessPacketizedAudioStream(rate, ((flags & FLAG_STEREO) != 0) ? 2 : 1), _flags(flags) {}
+
+protected:
+ AudioStream *makeStream(Common::SeekableReadStream *data);
+
+private:
+ byte _flags;
+};
+
+AudioStream *PacketizedRawStream::makeStream(Common::SeekableReadStream *data) {
+ return makeRawStream(data, getRate(), _flags);
+}
+
+PacketizedAudioStream *makePacketizedRawStream(int rate, byte flags) {
+ return new PacketizedRawStream(rate, flags);
+}
+
} // End of namespace Audio
diff --git a/audio/decoders/raw.h b/audio/decoders/raw.h
index 14e7bd45fd..7ccbcdaded 100644
--- a/audio/decoders/raw.h
+++ b/audio/decoders/raw.h
@@ -35,6 +35,7 @@ class SeekableReadStream;
namespace Audio {
+class PacketizedAudioStream;
class SeekableAudioStream;
/**
@@ -89,6 +90,17 @@ SeekableAudioStream *makeRawStream(Common::SeekableReadStream *stream,
int rate, byte flags,
DisposeAfterUse::Flag disposeAfterUse = DisposeAfterUse::YES);
+/**
+ * Creates a PacketizedAudioStream that will automatically queue
+ * packets as individual AudioStreams like returned by makeRawStream.
+ *
+ * @param rate Rate of the sound data.
+ * @param flags Audio flags combination.
+ * @see RawFlags
+ * @return The new PacketizedAudioStream.
+ */
+PacketizedAudioStream *makePacketizedRawStream(int rate, byte flags);
+
} // End of namespace Audio
#endif
diff --git a/audio/midiparser_xmidi.cpp b/audio/midiparser_xmidi.cpp
index 8742d7aad1..042e663a13 100644
--- a/audio/midiparser_xmidi.cpp
+++ b/audio/midiparser_xmidi.cpp
@@ -146,7 +146,7 @@ void MidiParser_XMIDI::parseNextEvent(EventInfo &info) {
break;
}
- case 0x75: // XMIDI_CONTORLLER_NEXT_BREAK
+ case 0x75: // XMIDI_CONTROLLER_NEXT_BREAK
if (_loopCount >= 0) {
if (info.basic.param2 < 64) {
// End the current loop.
diff --git a/audio/rate.cpp b/audio/rate.cpp
index 19d9c8c61e..6264465e19 100644
--- a/audio/rate.cpp
+++ b/audio/rate.cpp
@@ -46,6 +46,16 @@ namespace Audio {
*/
#define INTERMEDIATE_BUFFER_SIZE 512
+/**
+ * The default fractional type in frac.h (with 16 fractional bits) limits
+ * the rate conversion code to 65536Hz audio: we need to able to handle
+ * 96kHz audio, so we use fewer fractional bits in this code.
+ */
+enum {
+ FRAC_BITS_LOW = 15,
+ FRAC_ONE_LOW = (1L << FRAC_BITS_LOW),
+ FRAC_HALF_LOW = (1L << (FRAC_BITS_LOW-1))
+};
/**
* Audio rate converter based on simple resampling. Used when no
@@ -187,18 +197,18 @@ public:
*/
template<bool stereo, bool reverseStereo>
LinearRateConverter<stereo, reverseStereo>::LinearRateConverter(st_rate_t inrate, st_rate_t outrate) {
- if (inrate >= 65536 || outrate >= 65536) {
- error("rate effect can only handle rates < 65536");
+ if (inrate >= 131072 || outrate >= 131072) {
+ error("rate effect can only handle rates < 131072");
}
- opos = FRAC_ONE;
+ opos = FRAC_ONE_LOW;
// Compute the linear interpolation increment.
- // This will overflow if inrate >= 2^16, and underflow if outrate >= 2^16.
+ // This will overflow if inrate >= 2^17, and underflow if outrate >= 2^17.
// Also, if the quotient of the two rate becomes too small / too big, that
// would cause problems, but since we rarely scale from 1 to 65536 Hz or vice
// versa, I think we can live with that limitation ;-).
- opos_inc = (inrate << FRAC_BITS) / outrate;
+ opos_inc = (inrate << FRAC_BITS_LOW) / outrate;
ilast0 = ilast1 = 0;
icur0 = icur1 = 0;
@@ -220,7 +230,7 @@ int LinearRateConverter<stereo, reverseStereo>::flow(AudioStream &input, st_samp
while (obuf < oend) {
// read enough input samples so that opos < 0
- while ((frac_t)FRAC_ONE <= opos) {
+ while ((frac_t)FRAC_ONE_LOW <= opos) {
// Check if we have to refill the buffer
if (inLen == 0) {
inPtr = inBuf;
@@ -235,17 +245,17 @@ int LinearRateConverter<stereo, reverseStereo>::flow(AudioStream &input, st_samp
ilast1 = icur1;
icur1 = *inPtr++;
}
- opos -= FRAC_ONE;
+ opos -= FRAC_ONE_LOW;
}
// Loop as long as the outpos trails behind, and as long as there is
// still space in the output buffer.
- while (opos < (frac_t)FRAC_ONE && obuf < oend) {
+ while (opos < (frac_t)FRAC_ONE_LOW && obuf < oend) {
// interpolate
st_sample_t out0, out1;
- out0 = (st_sample_t)(ilast0 + (((icur0 - ilast0) * opos + FRAC_HALF) >> FRAC_BITS));
+ out0 = (st_sample_t)(ilast0 + (((icur0 - ilast0) * opos + FRAC_HALF_LOW) >> FRAC_BITS_LOW));
out1 = (stereo ?
- (st_sample_t)(ilast1 + (((icur1 - ilast1) * opos + FRAC_HALF) >> FRAC_BITS)) :
+ (st_sample_t)(ilast1 + (((icur1 - ilast1) * opos + FRAC_HALF_LOW) >> FRAC_BITS_LOW)) :
out0);
// output left channel
@@ -333,7 +343,7 @@ public:
template<bool stereo, bool reverseStereo>
RateConverter *makeRateConverter(st_rate_t inrate, st_rate_t outrate) {
if (inrate != outrate) {
- if ((inrate % outrate) == 0) {
+ if ((inrate % outrate) == 0 && (inrate < 65536)) {
return new SimpleRateConverter<stereo, reverseStereo>(inrate, outrate);
} else {
return new LinearRateConverter<stereo, reverseStereo>(inrate, outrate);
diff --git a/audio/rate_arm.cpp b/audio/rate_arm.cpp
index 4ad8d71a34..7765266673 100644
--- a/audio/rate_arm.cpp
+++ b/audio/rate_arm.cpp
@@ -68,6 +68,16 @@ namespace Audio {
*/
#define INTERMEDIATE_BUFFER_SIZE 512
+/**
+ * The default fractional type in frac.h (with 16 fractional bits) limits
+ * the rate conversion code to 65536Hz audio: we need to able to handle
+ * 96kHz audio, so we use fewer fractional bits in this code.
+ */
+enum {
+ FRAC_BITS_LOW = 15,
+ FRAC_ONE_LOW = (1L << FRAC_BITS_LOW),
+ FRAC_HALF_LOW = (1L << (FRAC_BITS_LOW-1))
+};
/**
* Audio rate converter based on simple resampling. Used when no
@@ -287,17 +297,18 @@ LinearRateConverter<stereo, reverseStereo>::LinearRateConverter(st_rate_t inrate
error("Input and Output rates must be different to use rate effect");
}
- if (inrate >= 65536 || outrate >= 65536) {
- error("rate effect can only handle rates < 65536");
+ if (inrate >= 131072 || outrate >= 131072) {
+ error("rate effect can only handle rates < 131072");
}
- lr.opos = FRAC_ONE;
+ lr.opos = FRAC_ONE_LOW;
/* increment */
- incr = (inrate << FRAC_BITS) / outrate;
+ incr = (inrate << FRAC_BITS_LOW) / outrate;
lr.opos_inc = incr;
+ // FIXME: Does 32768 here need changing to 65536 or 0? Compare to rate.cpp code...
lr.ilast[0] = lr.ilast[1] = 32768;
lr.icur[0] = lr.icur[1] = 0;
@@ -438,7 +449,7 @@ public:
*/
RateConverter *makeRateConverter(st_rate_t inrate, st_rate_t outrate, bool stereo, bool reverseStereo) {
if (inrate != outrate) {
- if ((inrate % outrate) == 0) {
+ if ((inrate % outrate) == 0 && (inrate < 65536)) {
if (stereo) {
if (reverseStereo)
return new SimpleRateConverter<true, true>(inrate, outrate);
diff --git a/audio/rate_arm_asm.s b/audio/rate_arm_asm.s
index a727209d39..bb01c614c2 100644
--- a/audio/rate_arm_asm.s
+++ b/audio/rate_arm_asm.s
@@ -441,17 +441,17 @@ LinearRate_M_part2:
LDRSH r4, [r3] @ r4 = obuf[0]
LDRSH r5, [r3,#2] @ r5 = obuf[1]
- MOV r6, r6, ASR #16 @ r6 = tmp0 = tmp1 >>= 16
+ MOV r6, r6, ASR #15 @ r6 = tmp0 = tmp1 >>= 15
MUL r7, r12,r6 @ r7 = tmp0*vol_l
MUL r6, r14,r6 @ r6 = tmp1*vol_r
- ADDS r7, r7, r4, LSL #16 @ r7 = obuf[0]<<16 + tmp0*vol_l
+ ADDS r7, r7, r4, LSL #15 @ r7 = obuf[0]<<15 + tmp0*vol_l
RSCVS r7, r10, #0x80000000 @ Clamp r7
- ADDS r6, r6, r5, LSL #16 @ r6 = obuf[1]<<16 + tmp1*vol_r
+ ADDS r6, r6, r5, LSL #15 @ r6 = obuf[1]<<15 + tmp1*vol_r
RSCVS r6, r10, #0x80000000 @ Clamp r6
- MOV r7, r7, LSR #16 @ Shift back to halfword
- MOV r6, r6, LSR #16 @ Shift back to halfword
+ MOV r7, r7, LSR #15 @ Shift back to halfword
+ MOV r6, r6, LSR #15 @ Shift back to halfword
LDR r5, [r2,#12] @ r5 = opos_inc
STRH r7, [r3],#2 @ Store output value
@@ -538,23 +538,23 @@ LinearRate_S_part2:
LDR r7, [r2,#24] @ r7 = ilast[1]<<16 + 32768
LDRSH r5, [r2,#18] @ r5 = icur[1]
LDRSH r10,[r3] @ r10= obuf[0]
- MOV r6, r6, ASR #16 @ r6 = tmp1 >>= 16
+ MOV r6, r6, ASR #15 @ r6 = tmp1 >>= 15
SUB r5, r5, r7, ASR #16 @ r5 = icur[1] - ilast[1]
MLA r7, r4, r5, r7 @ r7 = (icur[1]-ilast[1])*opos_frac+ilast[1]
LDRSH r5, [r3,#2] @ r5 = obuf[1]
- MOV r7, r7, ASR #16 @ r7 = tmp0 >>= 16
+ MOV r7, r7, ASR #15 @ r7 = tmp0 >>= 15
MUL r7, r12,r7 @ r7 = tmp0*vol_l
MUL r6, r14,r6 @ r6 = tmp1*vol_r
- ADDS r7, r7, r10, LSL #16 @ r7 = obuf[0]<<16 + tmp0*vol_l
+ ADDS r7, r7, r10, LSL #15 @ r7 = obuf[0]<<15 + tmp0*vol_l
MOV r4, #0
RSCVS r7, r4, #0x80000000 @ Clamp r7
- ADDS r6, r6, r5, LSL #16 @ r6 = obuf[1]<<16 + tmp1*vol_r
+ ADDS r6, r6, r5, LSL #15 @ r6 = obuf[1]<<15 + tmp1*vol_r
RSCVS r6, r4, #0x80000000 @ Clamp r6
- MOV r7, r7, LSR #16 @ Shift back to halfword
- MOV r6, r6, LSR #16 @ Shift back to halfword
+ MOV r7, r7, LSR #15 @ Shift back to halfword
+ MOV r6, r6, LSR #15 @ Shift back to halfword
LDR r5, [r2,#12] @ r5 = opos_inc
STRH r7, [r3],#2 @ Store output value
@@ -641,23 +641,23 @@ LinearRate_R_part2:
LDR r7, [r2,#24] @ r7 = ilast[1]<<16 + 32768
LDRSH r5, [r2,#18] @ r5 = icur[1]
LDRSH r10,[r3,#2] @ r10= obuf[1]
- MOV r6, r6, ASR #16 @ r6 = tmp1 >>= 16
+ MOV r6, r6, ASR #15 @ r6 = tmp1 >>= 15
SUB r5, r5, r7, ASR #16 @ r5 = icur[1] - ilast[1]
MLA r7, r4, r5, r7 @ r7 = (icur[1]-ilast[1])*opos_frac+ilast[1]
LDRSH r5, [r3] @ r5 = obuf[0]
- MOV r7, r7, ASR #16 @ r7 = tmp0 >>= 16
+ MOV r7, r7, ASR #15 @ r7 = tmp0 >>= 15
MUL r7, r12,r7 @ r7 = tmp0*vol_l
MUL r6, r14,r6 @ r6 = tmp1*vol_r
- ADDS r7, r7, r10, LSL #16 @ r7 = obuf[1]<<16 + tmp0*vol_l
+ ADDS r7, r7, r10, LSL #15 @ r7 = obuf[1]<<15 + tmp0*vol_l
MOV r4, #0
RSCVS r7, r4, #0x80000000 @ Clamp r7
- ADDS r6, r6, r5, LSL #16 @ r6 = obuf[0]<<16 + tmp1*vol_r
+ ADDS r6, r6, r5, LSL #15 @ r6 = obuf[0]<<15 + tmp1*vol_r
RSCVS r6, r4, #0x80000000 @ Clamp r6
- MOV r7, r7, LSR #16 @ Shift back to halfword
- MOV r6, r6, LSR #16 @ Shift back to halfword
+ MOV r7, r7, LSR #15 @ Shift back to halfword
+ MOV r6, r6, LSR #15 @ Shift back to halfword
LDR r5, [r2,#12] @ r5 = opos_inc
STRH r6, [r3],#2 @ Store output value
diff --git a/audio/softsynth/fmtowns_pc98/towns_audio.cpp b/audio/softsynth/fmtowns_pc98/towns_audio.cpp
index 7fa55ef6c1..9db45bd8aa 100644
--- a/audio/softsynth/fmtowns_pc98/towns_audio.cpp
+++ b/audio/softsynth/fmtowns_pc98/towns_audio.cpp
@@ -83,7 +83,7 @@ public:
bool _activeOutput;
private:
- void setupLoop(uint32 loopStart, uint32 len);
+ void setupLoop(uint32 loopStart, uint32 loopLen);
void setNote(uint8 note, TownsAudio_WaveTable *w, bool stepLimit = false);
void setVelo(uint8 velo);
@@ -104,10 +104,10 @@ private:
uint8 _panRight;
int8 *_data;
- int8 *_dataEnd;
- int8 *_loopEnd;
+ uint32 _loopStart;
uint32 _loopLen;
+ uint32 _dataEnd;
uint16 _stepNote;
uint16 _stepPitch;
@@ -1571,7 +1571,7 @@ void TownsAudio_PcmChannel::clear() {
_loopLen = 0;
_pos = 0;
- _loopEnd = 0;
+ _loopStart = 0;
_step = 0;
_stepNote = 0x4000;
@@ -1592,7 +1592,8 @@ void TownsAudio_PcmChannel::clear() {
void TownsAudio_PcmChannel::loadData(TownsAudio_WaveTable *w) {
_data = w->data;
- _dataEnd = w->data + w->size;
+ _dataEnd = w->size << 11;
+ _pos = 0;
}
void TownsAudio_PcmChannel::loadData(uint8 *buffer, uint32 size) {
@@ -1604,7 +1605,7 @@ void TownsAudio_PcmChannel::loadData(uint8 *buffer, uint32 size) {
*dst++ = *src & 0x80 ? (*src++ & 0x7f) : -*src++;
_data = _extData;
- _dataEnd = _extData + size;
+ _dataEnd = size << 11;
_pos = 0;
}
@@ -1643,7 +1644,7 @@ int TownsAudio_PcmChannel::initInstrument(uint8 &note, TownsAudio_WaveTable *&ta
}
void TownsAudio_PcmChannel::keyOn(uint8 note, uint8 velo, TownsAudio_WaveTable *w) {
- setupLoop(w->loopStart, w->loopLen);
+ setupLoop(w->loopLen ? w->loopStart : w->size, w->loopLen);
setNote(note, w, _reserved);
setVelo(velo);
@@ -1744,9 +1745,10 @@ void TownsAudio_PcmChannel::updateOutput() {
if (_activeKey || _activeEffect) {
_pos += _step;
- if (&_data[_pos >> 11] >= _loopEnd) {
- if (_loopLen) {
- _pos -= _loopLen;
+ if (_pos >= _dataEnd) {
+ if (_loopStart != _dataEnd) {
+ _pos = _loopStart;
+ _dataEnd = _loopLen;
} else {
_pos = 0;
_activeKey = _activeEffect = false;
@@ -1763,10 +1765,9 @@ int32 TownsAudio_PcmChannel::currentSampleRight() {
return (_activeOutput && _panRight) ? (((_data[_pos >> 11] * _tl) * _panRight) >> 3) : 0;
}
-void TownsAudio_PcmChannel::setupLoop(uint32 loopStart, uint32 len) {
- _loopLen = len << 11;
- _loopEnd = _loopLen ? &_data[(loopStart + _loopLen) >> 11] : _dataEnd;
- _pos = loopStart;
+void TownsAudio_PcmChannel::setupLoop(uint32 loopStart, uint32 loopLen) {
+ _loopStart = loopStart << 11;
+ _loopLen = loopLen << 11;
}
void TownsAudio_PcmChannel::setNote(uint8 note, TownsAudio_WaveTable *w, bool stepLimit) {
diff --git a/audio/softsynth/fmtowns_pc98/towns_euphony.cpp b/audio/softsynth/fmtowns_pc98/towns_euphony.cpp
index fca3d19912..aea714f68f 100644
--- a/audio/softsynth/fmtowns_pc98/towns_euphony.cpp
+++ b/audio/softsynth/fmtowns_pc98/towns_euphony.cpp
@@ -25,283 +25,167 @@
#include "common/util.h"
#include "common/textconsole.h"
-TownsEuphonyDriver::TownsEuphonyDriver(Audio::Mixer *mixer) : _activeChannels(0), _sustainChannels(0),
- _assignedChannels(0), _paraCount(0), _command(0), _tEnable(0), _tMode(0), _tOrdr(0), _tLevel(0),
- _tTranspose(0), _musicPos(0), _musicStart(0), _playing(false), _eventBuffer(0), _bufferedEventsCount(0),
- _tempoControlMode(0), _timerSetting(0), _tempoDiff(0), _timeStampBase(0), _elapsedEvents(0), _loop(false),
- _endOfTrack(false), _suspendParsing(false), _musicTrackSize(0) {
- _para[0] = _para[1] = 0;
- _intf = new TownsAudioInterface(mixer, this);
+EuphonyPlayer::EuphonyPlayer(Audio::Mixer *mixer) : _partConfig_enable(0), _partConfig_type(0), _partConfig_ordr(0), _partConfig_volume(0),
+ _partConfig_transpose(0), _musicPos(0), _musicStart(0), _playing(false), _savedEventsChain(0),
+ _tempoControlMode(0), _timerSetting(0), _tempoMode1PulseCounter(0), _parseToBar(0), _tempoMode1UpdateF8(0), _loop(false),
+ _endOfTrack(false), _paused(false), _musicTrackSize(0) {
+ _drivers[0] = _eupDriver = new EuphonyDriver(mixer, this);
+ _drivers[1] = new Type0Driver(this);
+ _drivers[2] = 0;
resetTempo();
}
-TownsEuphonyDriver::~TownsEuphonyDriver() {
- delete _intf;
- delete[] _activeChannels;
- delete[] _sustainChannels;
- delete[] _assignedChannels;
- delete[] _eventBuffer;
- delete[] _tEnable;
- delete[] _tMode;
- delete[] _tOrdr;
- delete[] _tLevel;
- delete[] _tTranspose;
-}
-
-bool TownsEuphonyDriver::init() {
- if (!_intf->init())
- return false;
+EuphonyPlayer::~EuphonyPlayer() {
+ for (int i = 0; i < 3; i++)
+ delete _drivers[i];
- delete[] _activeChannels;
- delete[] _sustainChannels;
- delete[] _assignedChannels;
- delete[] _eventBuffer;
- delete[] _tEnable;
- delete[] _tMode;
- delete[] _tOrdr;
- delete[] _tLevel;
- delete[] _tTranspose;
-
- _activeChannels = new int8[16];
- _sustainChannels = new int8[16];
- _assignedChannels = new ActiveChannel[128];
- _eventBuffer = new DlEvent[64];
-
- _tEnable = new uint8[32];
- _tMode = new uint8[32];
- _tOrdr = new uint8[32];
- _tLevel = new int8[32];
- _tTranspose = new int8[32];
-
- reset();
+ while (_savedEventsChain) {
+ SavedEvent *evt = _savedEventsChain;
+ _savedEventsChain = _savedEventsChain->next;
+ delete evt;
+ }
- return true;
+ delete[] _partConfig_enable;
+ delete[] _partConfig_type;
+ delete[] _partConfig_ordr;
+ delete[] _partConfig_volume;
+ delete[] _partConfig_transpose;
}
-void TownsEuphonyDriver::reset() {
- _intf->callback(0);
-
- _intf->callback(74);
- _intf->callback(70, 0);
- _intf->callback(75, 3);
-
- setTimerA(true, 1);
- setTimerA(false, 1);
- setTimerB(true, 221);
-
- _paraCount = _command = _para[0] = _para[1] = 0;
- memset(_sustainChannels, 0, 16);
- memset(_activeChannels, -1, 16);
- for (int i = 0; i < 128; i++) {
- _assignedChannels[i].chan = _assignedChannels[i].next = -1;
- _assignedChannels[i].note = _assignedChannels[i].sub = 0;
+bool EuphonyPlayer::init() {
+ for (int i = 0; i < 3; i++) {
+ if (_drivers[i]) {
+ if (!_drivers[i]->init()) {
+ warning("EuphonyPlayer:: Driver initialization failed: %d", i);
+ delete _drivers[i];
+ _drivers[i] = 0;
+ }
+ }
}
+
+ if (!_drivers[0] || !_drivers[1])
+ return false;
- int e = 0;
- for (int i = 0; i < 6; i++)
- assignChannel(i, e++);
- for (int i = 0x40; i < 0x48; i++)
- assignChannel(i, e++);
-
- resetTables();
-
- memset(_eventBuffer, 0, 64 * sizeof(DlEvent));
- _bufferedEventsCount = 0;
-
- _playing = _endOfTrack = _suspendParsing = _loop = false;
- _elapsedEvents = 0;
- _tempoDiff = 0;
-
- resetTempo();
-
- if (_tempoControlMode == 1) {
- //if (///)
- // return;
- setTempoIntern(_defaultTempo);
- } else {
- setTempoIntern(_defaultTempo);
+ while (_savedEventsChain) {
+ SavedEvent *evt = _savedEventsChain;
+ _savedEventsChain = _savedEventsChain->next;
+ delete evt;
}
- resetControl();
-}
+ delete[] _partConfig_enable;
+ delete[] _partConfig_type;
+ delete[] _partConfig_ordr;
+ delete[] _partConfig_volume;
+ delete[] _partConfig_transpose;
-void TownsEuphonyDriver::loadInstrument(int chanType, int id, const uint8 *data) {
- _intf->callback(5, chanType, id, data);
-}
+ _partConfig_enable = new uint8[32];
+ _partConfig_type = new uint8[32];
+ _partConfig_ordr = new uint8[32];
+ _partConfig_volume = new int8[32];
+ _partConfig_transpose = new int8[32];
-void TownsEuphonyDriver::loadWaveTable(const uint8 *data) {
- _intf->callback(34, data);
-}
-
-void TownsEuphonyDriver::unloadWaveTable(int id) {
- _intf->callback(35, id);
-}
-
-void TownsEuphonyDriver::reserveSoundEffectChannels(int num) {
- _intf->callback(33, num);
- uint32 volMask = 0;
-
- if (num > 8)
- return;
-
- for (uint32 v = 1 << 13; num; num--) {
- volMask |= v;
- v >>= 1;
- }
-
- _intf->setSoundEffectChanMask(volMask);
-}
+ reset();
-int TownsEuphonyDriver::setMusicTempo(int tempo) {
- if (tempo > 250)
- return 3;
- _defaultTempo = tempo;
- _trackTempo = tempo;
- setTempoIntern(tempo);
- return 0;
+ return true;
}
-int TownsEuphonyDriver::startMusicTrack(const uint8 *data, int trackSize, int startTick) {
+int EuphonyPlayer::startTrack(const uint8 *data, int trackSize, int barLen) {
if (_playing)
return 2;
_musicPos = _musicStart = data;
- _defaultBaseTickLen = _baseTickLen = startTick;
+ _defaultBarLength = _barLength = barLen;
_musicTrackSize = trackSize;
- _timeStampBase = _timeStampDest = 0;
- _tickCounter = 0;
+ _parseToBar = _bar = 0;
+ _beat = 0;
_playing = true;
return 0;
}
-void TownsEuphonyDriver::setMusicLoop(bool loop) {
- _loop = loop;
-}
-
-void TownsEuphonyDriver::stopParser() {
+void EuphonyPlayer::stop() {
if (_playing) {
_playing = false;
- _pulseCount = 0;
+ _playerUpdatesLeft = 0;
_endOfTrack = false;
- flushEventBuffer();
- resetControl();
+ clearHangingNotes();
+ resetAllControls();
}
}
-void TownsEuphonyDriver::continueParsing() {
- _suspendParsing = false;
-}
-
-void TownsEuphonyDriver::playSoundEffect(int chan, int note, int velo, const uint8 *data) {
- _intf->callback(37, chan, note, velo, data);
-}
-
-void TownsEuphonyDriver::stopSoundEffect(int chan) {
- _intf->callback(39, chan);
-}
-
-bool TownsEuphonyDriver::soundEffectIsPlaying(int chan) {
- return _intf->callback(40, chan) ? true : false;
-}
-
-void TownsEuphonyDriver::chanPanPos(int chan, int mode) {
- _intf->callback(3, chan, mode);
-}
-
-void TownsEuphonyDriver::chanPitch(int chan, int pitch) {
- _intf->callback(7, chan, pitch);
+void EuphonyPlayer::pause() {
+ _paused = true;
+ clearHangingNotes();
+ allPartsOff();
}
-void TownsEuphonyDriver::chanVolume(int chan, int vol) {
- _intf->callback(8, chan, vol);
+void EuphonyPlayer::resume() {
+ _paused = false;
}
-void TownsEuphonyDriver::setOutputVolume(int mode, int volLeft, int volRight) {
- _intf->callback(67, mode, volLeft, volRight);
-}
-
-int TownsEuphonyDriver::configChan_enable(int tableEntry, int val) {
- if (tableEntry > 31)
+int EuphonyPlayer::setTempo(int tempo) {
+ if (tempo > 250)
return 3;
- _tEnable[tableEntry] = val;
+ _defaultTempo = tempo;
+ _trackTempo = tempo;
+ sendTempo(tempo);
return 0;
}
-int TownsEuphonyDriver::configChan_setMode(int tableEntry, int val) {
- if (tableEntry > 31)
+void EuphonyPlayer::setLoopStatus(bool loop) {
+ _loop = loop;
+}
+
+int EuphonyPlayer::configPart_enable(int part, int val) {
+ uint8 enable = val & 0xff;
+ if (part > 31 || ((enable + 1) & 0xff) > 1)
return 3;
- _tMode[tableEntry] = val;
+ _partConfig_enable[part] = enable;
return 0;
}
-int TownsEuphonyDriver::configChan_remap(int tableEntry, int val) {
- if (tableEntry > 31)
+int EuphonyPlayer::configPart_setType(int part, int val) {
+ uint8 type = val & 0xff;
+ if (part > 31 || ((type + 1) & 0xff) > 8)
return 3;
- if (val < 16)
- _tOrdr[tableEntry] = val;
+ _partConfig_type[part] = type;
return 0;
}
-int TownsEuphonyDriver::configChan_adjustVolume(int tableEntry, int val) {
- if (tableEntry > 31)
+int EuphonyPlayer::configPart_remap(int part, int val) {
+ uint8 remap = val & 0xff;
+ if (part > 31 || ((remap + 1) & 0xff) > 16)
return 3;
- if (val <= 40)
- _tLevel[tableEntry] = (int8)(val & 0xff);
+ _partConfig_ordr[part] = remap;
return 0;
}
-int TownsEuphonyDriver::configChan_setTranspose(int tableEntry, int val) {
- if (tableEntry > 31)
+int EuphonyPlayer::configPart_adjustVolume(int part, int val) {
+ int8 adjvol = val & 0xff;
+ if (part > 31 || adjvol < -40 || adjvol > 40)
return 3;
- if (val <= 40)
- _tTranspose[tableEntry] = (int8)(val & 0xff);
+ _partConfig_volume[part] = adjvol;
return 0;
}
-int TownsEuphonyDriver::assignChannel(int chan, int tableEntry) {
- if (tableEntry > 15 || chan > 127 || chan < 0)
+int EuphonyPlayer::configPart_setTranspose(int part, int val) {
+ int8 trans = val & 0xff;
+ if (part > 31 || trans < -40 || trans > 40)
return 3;
-
- ActiveChannel *a = &_assignedChannels[chan];
- if (a->chan == tableEntry)
- return 0;
-
- if (a->chan != -1) {
- int8 *b = &_activeChannels[a->chan];
- while (*b != chan) {
- b = &_assignedChannels[*b].next;
- if (*b == -1 && *b != chan)
- return 3;
- }
-
- *b = a->next;
-
- if (a->note)
- _intf->callback(2, chan);
-
- a->chan = a->next = -1;
- a->note = 0;
- }
-
- a->next = _activeChannels[tableEntry];
- _activeChannels[tableEntry] = chan;
- a->chan = tableEntry;
- a->note = a->sub = 0;
-
+ _partConfig_transpose[part] = trans;
return 0;
}
-void TownsEuphonyDriver::timerCallback(int timerId) {
+void EuphonyPlayer::timerCallback(int timerId) {
switch (timerId) {
case 0:
- updatePulseCount();
- while (_pulseCount > 0) {
- --_pulseCount;
- updateTimeStampBase();
+ updatePulseCounters();
+ while (_playerUpdatesLeft) {
+ --_playerUpdatesLeft;
+ updateBeat();
if (!_playing)
continue;
- updateEventBuffer();
+ updateHangingNotes();
updateParser();
updateCheckEot();
}
@@ -311,175 +195,156 @@ void TownsEuphonyDriver::timerCallback(int timerId) {
}
}
-void TownsEuphonyDriver::setMusicVolume(int volume) {
- _intf->setMusicVolume(volume);
-}
+void EuphonyPlayer::reset() {
+ _eupDriver->reset();
+ _eupDriver->setTimerA(true, 1);
+ _eupDriver->setTimerA(false, 1);
+ _eupDriver->setTimerB(true, 221);
-void TownsEuphonyDriver::setSoundEffectVolume(int volume) {
- _intf->setSoundEffectVolume(volume);
-}
-
-void TownsEuphonyDriver::resetTables() {
- memset(_tEnable, 0xff, 32);
- memset(_tMode, 0xff, 16);
- memset(_tMode + 16, 0, 16);
- for (int i = 0; i < 32; i++)
- _tOrdr[i] = i & 0x0f;
- memset(_tLevel, 0, 32);
- memset(_tTranspose, 0, 32);
-}
-
-void TownsEuphonyDriver::resetTempo() {
- _defaultBaseTickLen = _baseTickLen = 0x33;
- _pulseCount = 0;
- _extraTimingControlRemainder = 0;
- _extraTimingControl = 16;
- _tempoModifier = 0;
- _timeStampDest = 0;
- _deltaTicks = 0;
- _tickCounter = 0;
- _defaultTempo = 90;
- _trackTempo = 90;
-}
+ resetPartConfig();
-void TownsEuphonyDriver::setTempoIntern(int tempo) {
- tempo = CLIP(tempo + _tempoModifier, 0, 500);
- if (_tempoControlMode == 0) {
- _timerSetting = 34750 / (tempo + 30);
- _extraTimingControl = 16;
-
- while (_timerSetting < 126) {
- _timerSetting <<= 1;
- _extraTimingControl <<= 1;
- }
-
- while (_timerSetting > 383) {
- _timerSetting >>= 1;
- _extraTimingControl >>= 1;
- }
+ while (_savedEventsChain) {
+ SavedEvent *evt = _savedEventsChain;
+ _savedEventsChain = _savedEventsChain->next;
+ delete evt;
+ }
- setTimerA(true, -(_timerSetting - 2));
+ _playing = _endOfTrack = _paused = _loop = false;
+ _tempoMode1UpdateF8 = 0;
+ _tempoMode1PulseCounter = 0;
- } else if (_tempoControlMode == 1) {
- _timerSetting = 312500 / (tempo + 30);
- _extraTimingControl = 16;
- while (_timerSetting < 1105) {
- _timerSetting <<= 1;
- _extraTimingControl <<= 1;
- }
+ resetTempo();
- } else if (_tempoControlMode == 2) {
- _timerSetting = 625000 / (tempo + 30);
- _extraTimingControlRemainder = 0;
+ if (_tempoControlMode == 1) {
+ //if (///)
+ // return;
+ sendTempo(_defaultTempo);
+ } else {
+ sendTempo(_defaultTempo);
}
+
+ resetAllControls();
}
-void TownsEuphonyDriver::setTimerA(bool enable, int tempo) {
- _intf->callback(21, enable ? 255 : 0, tempo);
+void EuphonyPlayer::resetPartConfig() {
+ memset(_partConfig_enable, 0xff, 32);
+ memset(_partConfig_type, 0xff, 16);
+ memset(_partConfig_type + 16, 0, 16);
+ for (int i = 0; i < 32; i++)
+ _partConfig_ordr[i] = i & 0x0f;
+ memset(_partConfig_volume, 0, 32);
+ memset(_partConfig_transpose, 0, 32);
}
-void TownsEuphonyDriver::setTimerB(bool enable, int tempo) {
- _intf->callback(22, enable ? 255 : 0, tempo);
+void EuphonyPlayer::resetTempo() {
+ _defaultBarLength = _barLength = 0x33;
+ _playerUpdatesLeft = 0;
+ _updatesPerPulseRemainder = 0;
+ _updatesPerPulse = 0x10;
+ _tempoModifier = 0;
+ _bar = 0;
+ _deltaTicks = 0;
+ _beat = 0;
+ _defaultTempo = 90;
+ _trackTempo = 90;
}
-void TownsEuphonyDriver::updatePulseCount() {
- int tc = _extraTimingControl + _extraTimingControlRemainder;
- _extraTimingControlRemainder = tc & 0x0f;
+void EuphonyPlayer::updatePulseCounters() {
+ int tc = _updatesPerPulse + _updatesPerPulseRemainder;
+ _updatesPerPulseRemainder = tc & 0x0f;
tc >>= 4;
- _tempoDiff -= tc;
+ _tempoMode1PulseCounter -= tc;
- while (_tempoDiff < 0) {
- _elapsedEvents++;
- _tempoDiff += 4;
+ while (_tempoMode1PulseCounter < 0) {
+ _tempoMode1UpdateF8++;
+ _tempoMode1PulseCounter += 4;
}
- if (_playing && !_suspendParsing)
- _pulseCount += tc;
+ if (_playing && !_paused)
+ _playerUpdatesLeft += tc;
}
-void TownsEuphonyDriver::updateTimeStampBase() {
- static const uint16 table[] = { 0x180, 0xC0, 0x80, 0x60, 0x40, 0x30, 0x20, 0x18 };
- if ((uint32)(table[_baseTickLen >> 4] * ((_baseTickLen & 0x0f) + 1)) > ++_tickCounter)
+void EuphonyPlayer::updateBeat() {
+ static const uint16 beatLengthTable[] = { 0x180, 0xC0, 0x80, 0x60, 0x40, 0x30, 0x20, 0x18 };
+ uint8 beatsPersBar = (_barLength & 0x0f) + 1;
+ uint8 beatNoteValue = _barLength >> 4;
+
+ if ((uint32)(beatLengthTable[beatNoteValue] * beatsPersBar) > ++_beat)
return;
- ++_timeStampDest;
- _tickCounter = 0;
+
+ ++_bar;
+ _beat = 0;
_deltaTicks = 0;
}
-void TownsEuphonyDriver::updateParser() {
+void EuphonyPlayer::updateParser() {
for (bool loop = true; loop;) {
uint8 cmd = _musicPos[0];
if (cmd == 0xff || cmd == 0xf7) {
- jumpNextLoop();
+ proceedToNextEvent();
} else if (cmd < 0x90) {
_endOfTrack = true;
- flushEventBuffer();
+ clearHangingNotes();
loop = false;
- } else if (_timeStampBase > _timeStampDest) {
+ } else if (_parseToBar > _bar) {
loop = false;
} else {
- if (_timeStampBase == _timeStampDest) {
- uint16 timeStamp = READ_LE_UINT16(&_musicPos[2]);
- uint8 l = (timeStamp & 0xff) + (timeStamp & 0xff);
- timeStamp = ((timeStamp & 0xff00) | l) >> 1;
- if (timeStamp > _tickCounter)
+ if (_parseToBar == _bar) {
+ uint16 parseToBeat = ((_musicPos[3] << 8) | ((_musicPos[2] << 1) & 0xff)) >> 1;
+ if (parseToBeat > _beat)
loop = false;
}
if (loop) {
- if (parseNext())
+ if (parseEvent())
loop = false;
}
}
}
}
-void TownsEuphonyDriver::updateCheckEot() {
- if (!_endOfTrack || _bufferedEventsCount)
+void EuphonyPlayer::updateCheckEot() {
+ if (!_endOfTrack || _savedEventsChain)
return;
- stopParser();
-}
-
-bool TownsEuphonyDriver::parseNext() {
-#define OPC(x) &TownsEuphonyDriver::evt##x
- static const EuphonyOpcode opcodes[] = {
- OPC(NotImpl),
- OPC(SetupNote),
- OPC(PolyphonicAftertouch),
- OPC(ControlPitch),
- OPC(InstrumentChanAftertouch),
- OPC(InstrumentChanAftertouch),
- OPC(ControlPitch)
+ stop();
+}
+
+bool EuphonyPlayer::parseEvent() {
+#define EVENT(x) &EuphonyPlayer::event_##x
+ static const EuphonyEvent events[] = {
+ EVENT(notImpl),
+ EVENT(noteOn),
+ EVENT(polyphonicAftertouch),
+ EVENT(controlChange_pitchWheel),
+ EVENT(programChange_channelAftertouch),
+ EVENT(programChange_channelAftertouch),
+ EVENT(controlChange_pitchWheel),
+
+ EVENT(sysex),
+ EVENT(advanceBar),
+ EVENT(notImpl),
+ EVENT(notImpl),
+ EVENT(setTempo),
+ EVENT(notImpl),
+ EVENT(typeOrdrChange)
};
-#undef OPC
+#undef EVENT
uint cmd = _musicPos[0];
if (cmd != 0xfe && cmd != 0xfd) {
- if (cmd >= 0xf0) {
- cmd &= 0x0f;
- if (cmd == 0)
- evtLoadInstrument();
- else if (cmd == 2)
- evtAdvanceTimestampOffset();
- else if (cmd == 8)
- evtTempo();
- else if (cmd == 12)
- evtModeOrdrChange();
- jumpNextLoop();
- return false;
-
- } else if (!(this->*opcodes[(cmd - 0x80) >> 4])()) {
- jumpNextLoop();
+ bool result = (cmd >= 0xf0) ? (this->*events[((cmd - 0xf0) >> 1) + 7])() : (this->*events[(cmd - 0x80) >> 4])();
+ if (!result) {
+ proceedToNextEvent();
return false;
}
}
if (cmd == 0xfd) {
- _suspendParsing = true;
+ _paused = true;
return true;
}
@@ -490,299 +355,208 @@ bool TownsEuphonyDriver::parseNext() {
_endOfTrack = false;
_musicPos = _musicStart;
- _timeStampBase = _timeStampDest = _tickCounter = 0;
- _baseTickLen = _defaultBaseTickLen;
+ _parseToBar = _bar = _beat = 0;
+ _barLength = _defaultBarLength;
return false;
}
-void TownsEuphonyDriver::jumpNextLoop() {
+void EuphonyPlayer::proceedToNextEvent() {
_musicPos += 6;
if (_musicPos >= _musicStart + _musicTrackSize)
_musicPos = _musicStart;
}
-void TownsEuphonyDriver::updateEventBuffer() {
- DlEvent *e = _eventBuffer;
- for (int i = _bufferedEventsCount; i; e++) {
- if (e->evt == 0)
- continue;
+void EuphonyPlayer::updateHangingNotes() {
+ SavedEvent *l = 0;
+ SavedEvent *e = _savedEventsChain;
+
+ while (e) {
if (--e->len) {
- --i;
+ l = e;
+ e = e->next;
continue;
}
- processBufferNote(e->mode, e->evt, e->note, e->velo);
- e->evt = 0;
- --i;
- --_bufferedEventsCount;
- }
-}
-void TownsEuphonyDriver::flushEventBuffer() {
- DlEvent *e = _eventBuffer;
- for (int i = _bufferedEventsCount; i; e++) {
- if (e->evt == 0)
- continue;
- processBufferNote(e->mode, e->evt, e->note, e->velo);
- e->evt = 0;
- --i;
- --_bufferedEventsCount;
+ SavedEvent *n = e->next;
+ if (l)
+ l->next = n;
+ if (_savedEventsChain == e)
+ _savedEventsChain = n;
+
+ sendNoteEvent(e->type, e->evt, e->note, e->velo);
+ delete e;
+
+ e = n;
}
}
-void TownsEuphonyDriver::processBufferNote(int mode, int evt, int note, int velo) {
- if (!velo)
- evt &= 0x8f;
- sendEvent(mode, evt);
- sendEvent(mode, note);
- sendEvent(mode, velo);
+void EuphonyPlayer::clearHangingNotes() {
+ while (_savedEventsChain) {
+ SavedEvent *e = _savedEventsChain;
+ _savedEventsChain = _savedEventsChain->next;
+ sendNoteEvent(e->type, e->evt, e->note, e->velo);
+ delete e;
+ }
}
-void TownsEuphonyDriver::resetControl() {
+void EuphonyPlayer::resetAllControls() {
for (int i = 0; i < 32; i++) {
- if (_tOrdr[i] > 15) {
+ if (_partConfig_ordr[i] > 15) {
for (int ii = 0; ii < 16; ii++)
- resetControlIntern(_tMode[i], ii);
+ sendControllerReset(_partConfig_type[i], ii);
} else {
- resetControlIntern(_tMode[i], _tOrdr[i]);
+ sendControllerReset(_partConfig_type[i], _partConfig_ordr[i]);
}
}
}
-void TownsEuphonyDriver::resetControlIntern(int mode, int chan) {
- sendEvent(mode, 0xb0 | chan);
- sendEvent(mode, 0x40);
- sendEvent(mode, 0);
- sendEvent(mode, 0xb0 | chan);
- sendEvent(mode, 0x7b);
- sendEvent(mode, 0);
- sendEvent(mode, 0xb0 | chan);
- sendEvent(mode, 0x79);
- sendEvent(mode, 0x40);
+void EuphonyPlayer::allPartsOff() {
+ for (int i = 0; i < 32; i++) {
+ if (_partConfig_ordr[i] > 15) {
+ for (int ii = 0; ii < 16; ii++)
+ sendAllNotesOff(_partConfig_type[i], ii);
+ } else {
+ sendAllNotesOff(_partConfig_type[i], _partConfig_ordr[i]);
+ }
+ }
}
-uint8 TownsEuphonyDriver::appendEvent(uint8 evt, uint8 chan) {
- if (evt >= 0x80 && evt < 0xf0 && _tOrdr[chan] < 16)
- return (evt & 0xf0) | _tOrdr[chan];
+uint8 EuphonyPlayer::appendEvent(uint8 evt, uint8 chan) {
+ if (evt >= 0x80 && evt < 0xf0 && _partConfig_ordr[chan] < 16)
+ return (evt & 0xf0) | _partConfig_ordr[chan];
return evt;
}
-void TownsEuphonyDriver::sendEvent(uint8 mode, uint8 command) {
- if (mode == 0) {
- // warning("TownsEuphonyDriver: Mode 0 not implemented");
-
- } else if (mode == 0x10) {
- warning("TownsEuphonyDriver: Mode 0x10 not implemented");
-
- } else if (mode == 0xff) {
- if (command >= 0xf0) {
- _paraCount = 1;
- _command = 0;
- } else if (command >= 0x80) {
- _paraCount = 1;
- _command = command;
- } else if (_command >= 0x80) {
- switch ((_command - 0x80) >> 4) {
- case 0:
- if (_paraCount < 2) {
- _paraCount++;
- _para[0] = command;
- } else {
- _paraCount = 1;
- _para[1] = command;
- sendNoteOff();
- }
- break;
-
- case 1:
- if (_paraCount < 2) {
- _paraCount++;
- _para[0] = command;
- } else {
- _paraCount = 1;
- _para[1] = command;
- if (command)
- sendNoteOn();
- else
- sendNoteOff();
- }
- break;
-
- case 2:
- if (_paraCount < 2) {
- _paraCount++;
- _para[0] = command;
- } else {
- _paraCount = 1;
- }
- break;
-
- case 3:
- if (_paraCount < 2) {
- _paraCount++;
- _para[0] = command;
- } else {
- _paraCount = 1;
- _para[1] = command;
-
- if (_para[0] == 7)
- sendChanVolume();
- else if (_para[0] == 10)
- sendPanPosition();
- else if (_para[0] == 64)
- sendAllNotesOff();
- }
- break;
-
- case 4:
- _paraCount = 1;
- _para[0] = command;
- sendSetInstrument();
- break;
-
- case 5:
- _paraCount = 1;
- _para[0] = command;
- break;
-
- case 6:
- if (_paraCount < 2) {
- _paraCount++;
- _para[0] = command;
- } else {
- _paraCount = 1;
- _para[1] = command;
- sendPitch();
- }
- break;
- }
- }
- }
+bool EuphonyPlayer::event_notImpl() {
+ return false;
}
-bool TownsEuphonyDriver::evtSetupNote() {
+bool EuphonyPlayer::event_noteOn() {
if (_musicPos[1] > 31)
return false;
- if (!_tEnable[_musicPos[1]]) {
- jumpNextLoop();
+ if (!_partConfig_enable[_musicPos[1]]) {
+ proceedToNextEvent();
return (_musicPos[0] == 0xfe || _musicPos[0] == 0xfd) ? true : false;
}
uint8 evt = appendEvent(_musicPos[0], _musicPos[1]);
- uint8 mode = _tMode[_musicPos[1]];
+ uint8 type = _partConfig_type[_musicPos[1]];
uint8 note = _musicPos[4];
uint8 velo = _musicPos[5];
- sendEvent(mode, evt);
- sendEvent(mode, applyTranspose(note));
- sendEvent(mode, applyVolumeAdjust(velo));
+ sendEvent(type, evt);
+ sendEvent(type, applyTranspose(note));
+ sendEvent(type, applyVolumeAdjust(velo));
- jumpNextLoop();
+ proceedToNextEvent();
if (_musicPos[0] == 0xfe || _musicPos[0] == 0xfd)
return true;
velo = _musicPos[5];
- uint16 len = ((((_musicPos[1] << 4) | (_musicPos[2] << 8)) >> 4) & 0xff) | ((((_musicPos[3] << 4) | (_musicPos[4] << 8)) >> 4) << 8);
-
- int i = 0;
- for (; i < 64; i++) {
- if (_eventBuffer[i].evt == 0)
- break;
- }
+ uint16 len = (_musicPos[1] & 0x0f) | ((_musicPos[2] & 0x0f) << 4) | ((_musicPos[3] & 0x0f) << 8) | ((_musicPos[4] & 0x0f) << 12);
- if (i == 64) {
- processBufferNote(mode, evt, note, velo);
- } else {
- _eventBuffer[i].evt = evt;
- _eventBuffer[i].mode = mode;
- _eventBuffer[i].note = note;
- _eventBuffer[i].velo = velo;
- _eventBuffer[i].len = len ? len : 1;
- _bufferedEventsCount++;
- }
+ _savedEventsChain = new SavedEvent(evt, type, note, velo, len ? len : 1, _savedEventsChain);
return false;
}
-bool TownsEuphonyDriver::evtPolyphonicAftertouch() {
+bool EuphonyPlayer::event_polyphonicAftertouch() {
if (_musicPos[1] > 31)
return false;
- if (!_tEnable[_musicPos[1]])
+ if (!_partConfig_enable[_musicPos[1]])
return false;
uint8 evt = appendEvent(_musicPos[0], _musicPos[1]);
- uint8 mode = _tMode[_musicPos[1]];
+ uint8 type = _partConfig_type[_musicPos[1]];
- sendEvent(mode, evt);
- sendEvent(mode, applyTranspose(_musicPos[4]));
- sendEvent(mode, _musicPos[5]);
+ sendEvent(type, evt);
+ sendEvent(type, applyTranspose(_musicPos[4]));
+ sendEvent(type, _musicPos[5]);
return false;
}
-bool TownsEuphonyDriver::evtControlPitch() {
+bool EuphonyPlayer::event_controlChange_pitchWheel() {
if (_musicPos[1] > 31)
return false;
- if (!_tEnable[_musicPos[1]])
+ if (!_partConfig_enable[_musicPos[1]])
return false;
uint8 evt = appendEvent(_musicPos[0], _musicPos[1]);
- uint8 mode = _tMode[_musicPos[1]];
+ uint8 type = _partConfig_type[_musicPos[1]];
- sendEvent(mode, evt);
- sendEvent(mode, _musicPos[4]);
- sendEvent(mode, _musicPos[5]);
+ sendEvent(type, evt);
+ sendEvent(type, _musicPos[4]);
+ sendEvent(type, _musicPos[5]);
return false;
}
-bool TownsEuphonyDriver::evtInstrumentChanAftertouch() {
+bool EuphonyPlayer::event_programChange_channelAftertouch() {
if (_musicPos[1] > 31)
return false;
- if (!_tEnable[_musicPos[1]])
+ if (!_partConfig_enable[_musicPos[1]])
return false;
uint8 evt = appendEvent(_musicPos[0], _musicPos[1]);
- uint8 mode = _tMode[_musicPos[1]];
+ uint8 type = _partConfig_type[_musicPos[1]];
- sendEvent(mode, evt);
- sendEvent(mode, _musicPos[4]);
+ sendEvent(type, evt);
+ sendEvent(type, _musicPos[4]);
return false;
}
-bool TownsEuphonyDriver::evtLoadInstrument() {
+bool EuphonyPlayer::event_sysex() {
+ uint8 type = _partConfig_type[_musicPos[1]];
+ sendEvent(type, 0xF0);
+ proceedToNextEvent();
+
+ for (bool loop = true; loop; ) {
+ for (int i = 0; i < 6; i++) {
+ if (_musicPos[i] != 0xFF) {
+ sendEvent(type, _musicPos[i]);
+ if (_musicPos[i] >= 0x80) {
+ loop = false;
+ break;
+ }
+ }
+ }
+ if (loop)
+ proceedToNextEvent();
+ }
+
return false;
}
-bool TownsEuphonyDriver::evtAdvanceTimestampOffset() {
- ++_timeStampBase;
- _baseTickLen = _musicPos[1];
+bool EuphonyPlayer::event_advanceBar() {
+ ++_parseToBar;
+ _barLength = _musicPos[1];
return false;
}
-bool TownsEuphonyDriver::evtTempo() {
- uint8 l = _musicPos[4] << 1;
- _trackTempo = (l | (_musicPos[5] << 8)) >> 1;
- setTempoIntern(_trackTempo);
+bool EuphonyPlayer::event_setTempo() {
+ _trackTempo = ((_musicPos[5] << 8) | ((_musicPos[4] << 1) & 0xff)) >> 1;
+ sendTempo(_trackTempo);
return false;
}
-bool TownsEuphonyDriver::evtModeOrdrChange() {
+bool EuphonyPlayer::event_typeOrdrChange() {
if (_musicPos[1] > 31)
return false;
- if (!_tEnable[_musicPos[1]])
+ if (!_partConfig_enable[_musicPos[1]])
return false;
if (_musicPos[4] == 1)
- _tMode[_musicPos[1]] = _musicPos[5];
+ _partConfig_type[_musicPos[1]] = _musicPos[5];
else if (_musicPos[4] == 2)
- _tOrdr[_musicPos[1]] = _musicPos[5];
+ _partConfig_ordr[_musicPos[1]] = _musicPos[5];
return false;
}
-uint8 TownsEuphonyDriver::applyTranspose(uint8 in) {
- int out = _tTranspose[_musicPos[1]];
+uint8 EuphonyPlayer::applyTranspose(uint8 in) {
+ int out = _partConfig_transpose[_musicPos[1]];
if (!out)
return in;
out += (in & 0x7f);
@@ -796,61 +570,328 @@ uint8 TownsEuphonyDriver::applyTranspose(uint8 in) {
return out & 0xff;
}
-uint8 TownsEuphonyDriver::applyVolumeAdjust(uint8 in) {
- int out = _tLevel[_musicPos[1]];
+uint8 EuphonyPlayer::applyVolumeAdjust(uint8 in) {
+ int out = _partConfig_volume[_musicPos[1]];
out += (in & 0x7f);
out = CLIP(out, 1, 127);
return out & 0xff;
}
-void TownsEuphonyDriver::sendNoteOff() {
- int8 *chan = &_activeChannels[_command & 0x0f];
+void EuphonyPlayer::sendEvent(uint8 type, uint8 command) {
+ int drv = ((type >> 4) + 1) & 3;
+ if (_drivers[drv])
+ _drivers[drv]->send(command);
+}
+
+void EuphonyPlayer::sendNoteEvent(int type, int evt, int note, int velo) {
+ if (velo)
+ evt &= 0x8f;
+ sendEvent(type, evt);
+ sendEvent(type, note);
+ sendEvent(type, velo);
+}
+
+void EuphonyPlayer::sendControllerReset(int type, int part) {
+ sendEvent(type, 0xb0 | part);
+ sendEvent(type, 0x40);
+ sendEvent(type, 0);
+ sendEvent(type, 0xb0 | part);
+ sendEvent(type, 0x7b);
+ sendEvent(type, 0);
+ sendEvent(type, 0xb0 | part);
+ sendEvent(type, 0x79);
+ sendEvent(type, 0x40);
+}
+
+void EuphonyPlayer::sendAllNotesOff(int type, int part) {
+ sendEvent(type, 0xb0 | part);
+ sendEvent(type, 0x40);
+ sendEvent(type, 0);
+}
+
+void EuphonyPlayer::sendTempo(int tempo) {
+ tempo = CLIP(tempo + _tempoModifier, 0, 500);
+ if (_tempoControlMode == 0) {
+ _timerSetting = 34750 / (tempo + 30);
+ _updatesPerPulse = 0x10;
+
+ while (_timerSetting < 126) {
+ _timerSetting <<= 1;
+ _updatesPerPulse <<= 1;
+ }
+
+ while (_timerSetting > 383) {
+ _timerSetting >>= 1;
+ _updatesPerPulse >>= 1;
+ }
+
+ _eupDriver->setTimerA(true, -(_timerSetting - 2));
+
+ } else if (_tempoControlMode == 1) {
+ _timerSetting = 312500 / (tempo + 30);
+ _updatesPerPulse = 0x10;
+ while (_timerSetting < 1105) {
+ _timerSetting <<= 1;
+ _updatesPerPulse <<= 1;
+ }
+
+ } else if (_tempoControlMode == 2) {
+ _timerSetting = 625000 / (tempo + 30);
+ _updatesPerPulseRemainder = 0;
+ }
+}
+
+EuphonyDriver::EuphonyDriver(Audio::Mixer *mixer, EuphonyPlayer *pl) : EuphonyBaseDriver(), _channels(0), _partToChanMapping(0), _sustainChannels(0) {
+ _intf = new TownsAudioInterface(mixer, pl);
+}
+
+EuphonyDriver::~EuphonyDriver() {
+ delete _intf;
+ delete[] _partToChanMapping;
+ delete[] _sustainChannels;
+ delete[] _channels;
+}
+
+
+bool EuphonyDriver::init() {
+ if (!_intf->init())
+ return false;
+
+ delete[] _channels;
+ delete[] _partToChanMapping;
+ delete[] _sustainChannels;
+
+ _channels = new Channel[128];
+ _partToChanMapping = new int8[16];
+ _sustainChannels = new int8[16];
+
+ return true;
+}
+
+void EuphonyDriver::reset() {
+ _intf->callback(0);
+ _intf->callback(74);
+ _intf->callback(70, 0);
+ _intf->callback(75, 3);
+
+ _currentEvent.clear();
+ memset(_sustainChannels, 0, 16);
+ memset(_partToChanMapping, -1, 16);
+
+ for (int i = 0; i < 128; i++) {
+ _channels[i].part = _channels[i].next = -1;
+ _channels[i].note = _channels[i].pri = 0;
+ }
+
+ int e = 0;
+ for (int i = 0; i < 6; i++)
+ assignPartToChannel(i, e++);
+ for (int i = 0x40; i < 0x48; i++)
+ assignPartToChannel(i, e++);
+}
+
+int EuphonyDriver::assignPartToChannel(int chan, int part) {
+ if (part > 15 || chan > 127 || chan < 0)
+ return 3;
+
+ Channel *a = &_channels[chan];
+ if (a->part == part)
+ return 0;
+
+ if (a->part != -1) {
+ int8 *b = &_partToChanMapping[a->part];
+ while (*b != chan) {
+ b = &_channels[*b].next;
+ if (*b == -1 && *b != chan)
+ return 3;
+ }
+
+ *b = a->next;
+
+ if (a->note)
+ _intf->callback(2, chan);
+
+ a->part = a->next = -1;
+ a->note = 0;
+ }
+
+ a->next = _partToChanMapping[part];
+ _partToChanMapping[part] = chan;
+ a->part = part;
+ a->note = a->pri = 0;
+
+ return 0;
+}
+
+void EuphonyDriver::send(uint8 command) {
+ if (command >= 0x80) {
+ _currentEvent.clear();
+ _currentEvent.push_back(command >= 0xf0 ? 0 : command);
+ } else if (_currentEvent[0] >= 0x80) {
+ uint8 cmd = (_currentEvent[0] - 0x80) >> 4;
+ _currentEvent.push_back(command);
+
+ static const uint8 eventSize[] = { 3, 3, 3, 3, 2, 2, 3 };
+ if (_currentEvent.size() != eventSize[cmd])
+ return;
+
+ switch (cmd) {
+ case 0:
+ noteOff();
+ break;
+ case 1:
+ if (_currentEvent[2])
+ noteOn();
+ else
+ noteOff();
+ break;
+ case 3:
+ if (_currentEvent[1] == 7)
+ controlChange_volume();
+ else if (_currentEvent[1] == 10)
+ controlChange_panPos();
+ else if (_currentEvent[1] == 64)
+ controlChange_allNotesOff();
+ break;
+ case 4:
+ programChange();
+ break;
+ case 6:
+ pitchWheel();
+ break;
+ default:
+ break;
+ }
+ }
+}
+
+void EuphonyDriver::setTimerA(bool enable, int tempo) {
+ _intf->callback(21, enable ? 255 : 0, tempo);
+}
+
+void EuphonyDriver::setTimerB(bool enable, int tempo) {
+ _intf->callback(22, enable ? 255 : 0, tempo);
+}
+
+void EuphonyDriver::loadInstrument(int chanType, int id, const uint8 *data) {
+ _intf->callback(5, chanType, id, data);
+}
+
+void EuphonyDriver::setInstrument(int chan, int instrID) {
+ _intf->callback(4, chan, instrID);
+}
+
+void EuphonyDriver::loadWaveTable(const uint8 *data) {
+ _intf->callback(34, data);
+}
+
+void EuphonyDriver::unloadWaveTable(int id) {
+ _intf->callback(35, id);
+}
+
+void EuphonyDriver::reserveSoundEffectChannels(int num) {
+ _intf->callback(33, num);
+ uint32 volMask = 0;
+
+ if (num > 8)
+ return;
+
+ for (uint32 v = 1 << 13; num; num--) {
+ volMask |= v;
+ v >>= 1;
+ }
+
+ _intf->setSoundEffectChanMask(volMask);
+}
+
+void EuphonyDriver::playSoundEffect(int chan, int note, int velo, const uint8 *data) {
+ _intf->callback(37, chan, note, velo, data);
+}
+
+void EuphonyDriver::stopSoundEffect(int chan) {
+ _intf->callback(39, chan);
+}
+
+bool EuphonyDriver::soundEffectIsPlaying(int chan) {
+ return _intf->callback(40, chan) ? true : false;
+}
+
+void EuphonyDriver::channelPan(int chan, int mode) {
+ _intf->callback(3, chan, mode);
+}
+
+void EuphonyDriver::channelPitch(int chan, int pitch) {
+ _intf->callback(7, chan, pitch);
+}
+
+void EuphonyDriver::channelVolume(int chan, int vol) {
+ _intf->callback(8, chan, vol);
+}
+
+void EuphonyDriver::setOutputVolume(int mode, int volLeft, int volRight) {
+ _intf->callback(67, mode, volLeft, volRight);
+}
+
+void EuphonyDriver::cdaToggle(int a) {
+ _intf->callback(73, a);
+}
+
+void EuphonyDriver::setMusicVolume(int volume) {
+ _intf->setMusicVolume(volume);
+}
+
+void EuphonyDriver::setSoundEffectVolume(int volume) {
+ _intf->setSoundEffectVolume(volume);
+}
+
+void EuphonyDriver::noteOff() {
+ int8 *chan = &_partToChanMapping[_currentEvent[0] & 0x0f];
if (*chan == -1)
return;
- while (_assignedChannels[*chan].note != _para[0]) {
- chan = &_assignedChannels[*chan].next;
+ while (_channels[*chan].note != _currentEvent[1]) {
+ chan = &_channels[*chan].next;
if (*chan == -1)
return;
}
- if (_sustainChannels[_command & 0x0f]) {
- _assignedChannels[*chan].note |= 0x80;
+ if (_sustainChannels[_currentEvent[0] & 0x0f]) {
+ _channels[*chan].note |= 0x80;
} else {
- _assignedChannels[*chan].note = 0;
+ _channels[*chan].note = 0;
_intf->callback(2, *chan);
}
}
-void TownsEuphonyDriver::sendNoteOn() {
- if (!_para[0])
+void EuphonyDriver::noteOn() {
+ if (!_currentEvent[1])
return;
- int8 *chan = &_activeChannels[_command & 0x0f];
+ int8 *chan = &_partToChanMapping[_currentEvent[0] & 0x0f];
if (*chan == -1)
return;
do {
- _assignedChannels[*chan].sub++;
- chan = &_assignedChannels[*chan].next;
+ _channels[*chan].pri++;
+ chan = &_channels[*chan].next;
} while (*chan != -1);
- chan = &_activeChannels[_command & 0x0f];
+ chan = &_partToChanMapping[_currentEvent[0] & 0x0f];
int d = 0;
int c = 0;
bool found = false;
do {
- if (!_assignedChannels[*chan].note) {
+ if (!_channels[*chan].note) {
found = true;
break;
}
- if (d <= _assignedChannels[*chan].sub) {
+ if (d <= _channels[*chan].pri) {
c = *chan;
- d = _assignedChannels[*chan].sub;
+ d = _channels[*chan].pri;
}
- chan = &_assignedChannels[*chan].next;
+ chan = &_channels[*chan].next;
} while (*chan != -1);
if (found)
@@ -858,59 +899,72 @@ void TownsEuphonyDriver::sendNoteOn() {
else
_intf->callback(2, c);
- _assignedChannels[c].note = _para[0];
- _assignedChannels[c].sub = 0;
- _intf->callback(1, c, _para[0], _para[1]);
+ _channels[c].note = _currentEvent[1];
+ _channels[c].pri = 0;
+ _intf->callback(1, c, _currentEvent[1], _currentEvent[2]);
}
-void TownsEuphonyDriver::sendChanVolume() {
- int8 *chan = &_activeChannels[_command & 0x0f];
+void EuphonyDriver::controlChange_volume() {
+ int8 *chan = &_partToChanMapping[_currentEvent[0] & 0x0f];
while (*chan != -1) {
- _intf->callback(8, *chan, _para[1] & 0x7f);
- chan = &_assignedChannels[*chan].next;
+ _intf->callback(8, *chan, _currentEvent[2] & 0x7f);
+ chan = &_channels[*chan].next;
}
}
-void TownsEuphonyDriver::sendPanPosition() {
- int8 *chan = &_activeChannels[_command & 0x0f];
+void EuphonyDriver::controlChange_panPos() {
+ int8 *chan = &_partToChanMapping[_currentEvent[0] & 0x0f];
while (*chan != -1) {
- _intf->callback(3, *chan, _para[1] & 0x7f);
- chan = &_assignedChannels[*chan].next;
+ _intf->callback(3, *chan, _currentEvent[2] & 0x7f);
+ chan = &_channels[*chan].next;
}
}
-void TownsEuphonyDriver::sendAllNotesOff() {
- if (_para[1] > 63) {
- _sustainChannels[_command & 0x0f] = -1;
+void EuphonyDriver::controlChange_allNotesOff() {
+ if (_currentEvent[2] > 63) {
+ _sustainChannels[_currentEvent[0] & 0x0f] = -1;
return;
}
- _sustainChannels[_command & 0x0f] = 0;
- int8 *chan = &_activeChannels[_command & 0x0f];
+ _sustainChannels[_currentEvent[0] & 0x0f] = 0;
+ int8 *chan = &_partToChanMapping[_currentEvent[0] & 0x0f];
while (*chan != -1) {
- if (_assignedChannels[*chan].note & 0x80) {
- _assignedChannels[*chan].note = 0;
+ if (_channels[*chan].note & 0x80) {
+ _channels[*chan].note = 0;
_intf->callback(2, *chan);
}
- chan = &_assignedChannels[*chan].next;
+ chan = &_channels[*chan].next;
}
}
-void TownsEuphonyDriver::sendSetInstrument() {
- int8 *chan = &_activeChannels[_command & 0x0f];
+void EuphonyDriver::programChange() {
+ int8 *chan = &_partToChanMapping[_currentEvent[0] & 0x0f];
while (*chan != -1) {
- _intf->callback(4, *chan, _para[0]);
+ _intf->callback(4, *chan, _currentEvent[1]);
_intf->callback(7, *chan, 0);
- chan = &_assignedChannels[*chan].next;
+ chan = &_channels[*chan].next;
}
}
-void TownsEuphonyDriver::sendPitch() {
- int8 *chan = &_activeChannels[_command & 0x0f];
+void EuphonyDriver::pitchWheel() {
+ int8 *chan = &_partToChanMapping[_currentEvent[0] & 0x0f];
while (*chan != -1) {
- _para[0] += _para[0];
- int16 pitch = (((READ_LE_UINT16(_para)) >> 1) & 0x3fff) - 0x2000;
+ _currentEvent[1] += _currentEvent[1];
+ int16 pitch = ((((_currentEvent[2] << 8) | _currentEvent[1]) >> 1) & 0x3fff) - 0x2000;
_intf->callback(7, *chan, pitch);
- chan = &_assignedChannels[*chan].next;
+ chan = &_channels[*chan].next;
}
}
+
+Type0Driver::Type0Driver(EuphonyPlayer *pl) : EuphonyBaseDriver() {
+}
+
+Type0Driver::~Type0Driver() {
+}
+
+bool Type0Driver::init() {
+ return true;
+}
+
+void Type0Driver::send(uint8 command) {
+}
diff --git a/audio/softsynth/fmtowns_pc98/towns_euphony.h b/audio/softsynth/fmtowns_pc98/towns_euphony.h
index d77217884d..76aa153a37 100644
--- a/audio/softsynth/fmtowns_pc98/towns_euphony.h
+++ b/audio/softsynth/fmtowns_pc98/towns_euphony.h
@@ -24,160 +24,203 @@
#define TOWNS_EUP_H
#include "audio/softsynth/fmtowns_pc98/towns_audio.h"
+#include "common/array.h"
-class TownsEuphonyDriver : public TownsAudioInterfacePluginDriver {
+class EuphonyBaseDriver {
public:
- TownsEuphonyDriver(Audio::Mixer *mixer);
- virtual ~TownsEuphonyDriver();
+ EuphonyBaseDriver() {}
+ virtual ~EuphonyBaseDriver() {}
+
+ virtual bool init() { return true; }
+
+ virtual void send(uint8 command) = 0;
+};
+
+class EuphonyPlayer;
+
+class EuphonyDriver : public EuphonyBaseDriver {
+public:
+ EuphonyDriver(Audio::Mixer *mixer, EuphonyPlayer *pl);
+ ~EuphonyDriver();
bool init();
void reset();
+ int assignPartToChannel(int chan, int part);
+
+ void send(uint8 command);
+
+ void setTimerA(bool enable, int tempo);
+ void setTimerB(bool enable, int tempo);
+
void loadInstrument(int chanType, int id, const uint8 *data);
+ void setInstrument(int chan, int instrID);
void loadWaveTable(const uint8 *data);
void unloadWaveTable(int id);
- void reserveSoundEffectChannels(int num);
-
- int setMusicTempo(int tempo);
- int startMusicTrack(const uint8 *data, int trackSize, int startTick);
- void setMusicLoop(bool loop);
- void stopParser();
- bool parserIsPlaying() {return _playing; }
- void continueParsing();
+ void reserveSoundEffectChannels(int num);
void playSoundEffect(int chan, int note, int velo, const uint8 *data);
void stopSoundEffect(int chan);
bool soundEffectIsPlaying(int chan);
- void chanPanPos(int chan, int mode);
- void chanPitch(int chan, int pitch);
- void chanVolume(int chan, int vol);
+ void channelPan(int chan, int mode);
+ void channelPitch(int chan, int pitch);
+ void channelVolume(int chan, int vol);
void setOutputVolume(int chanType, int volLeft, int volRight);
+ void cdaToggle(int a);
- int configChan_enable(int tableEntry, int val);
- int configChan_setMode(int tableEntry, int val);
- int configChan_remap(int tableEntry, int val);
- int configChan_adjustVolume(int tableEntry, int val);
- int configChan_setTranspose(int tableEntry, int val);
+ void setMusicVolume(int volume);
+ void setSoundEffectVolume(int volume);
- int assignChannel(int chan, int tableEntry);
+private:
+ void noteOff();
+ void noteOn();
+ void controlChange_volume();
+ void controlChange_panPos();
+ void controlChange_allNotesOff();
+ void programChange();
+ void pitchWheel();
+
+ Common::Array<uint8> _currentEvent;
+ int8 *_partToChanMapping;
+ int8 *_sustainChannels;
- void timerCallback(int timerId);
+ struct Channel {
+ int8 part;
+ int8 next;
+ uint8 note;
+ uint8 pri;
+ } *_channels;
- void setMusicVolume(int volume);
- void setSoundEffectVolume(int volume);
+ TownsAudioInterface *_intf;
+};
- TownsAudioInterface *intf() {
- return _intf;
- }
+class Type0Driver : public EuphonyBaseDriver {
+public:
+ Type0Driver(EuphonyPlayer *pl);
+ ~Type0Driver();
-private:
- void resetTables();
+ bool init();
+
+ void send(uint8 command);
+};
+
+class EuphonyPlayer : public TownsAudioInterfacePluginDriver {
+public:
+ EuphonyPlayer(Audio::Mixer *mixer);
+ virtual ~EuphonyPlayer();
+
+ bool init();
+ int startTrack(const uint8 *data, int trackSize, int barLen);
+ void stop();
+ void pause();
+ void resume();
+
+ int setTempo(int tempo);
+ void setLoopStatus(bool loop);
+
+ bool isPlaying() {return _playing; }
+
+ int configPart_enable(int part, int val);
+ int configPart_setType(int part, int val);
+ int configPart_remap(int part, int val);
+ int configPart_adjustVolume(int part, int val);
+ int configPart_setTranspose(int part, int val);
+
+ void timerCallback(int timerId);
+
+ EuphonyDriver *driver() { return _eupDriver; }
+
+private:
+ void reset();
+ void resetPartConfig();
void resetTempo();
- void setTempoIntern(int tempo);
- void setTimerA(bool enable, int tempo);
- void setTimerB(bool enable, int tempo);
- void updatePulseCount();
- void updateTimeStampBase();
+ void updatePulseCounters();
+ void updateBeat();
void updateParser();
void updateCheckEot();
- bool parseNext();
- void jumpNextLoop();
-
- void updateEventBuffer();
- void flushEventBuffer();
- void processBufferNote(int mode, int evt, int note, int velo);
+ bool parseEvent();
+ void proceedToNextEvent();
- void resetControl();
- void resetControlIntern(int mode, int chan);
+ void updateHangingNotes();
+ void clearHangingNotes();
+
+ void resetAllControls();
+ void allPartsOff();
+
uint8 appendEvent(uint8 evt, uint8 chan);
- void sendEvent(uint8 mode, uint8 command);
-
- typedef bool(TownsEuphonyDriver::*EuphonyOpcode)();
- bool evtSetupNote();
- bool evtPolyphonicAftertouch();
- bool evtControlPitch();
- bool evtInstrumentChanAftertouch();
- bool evtLoadInstrument();
- bool evtAdvanceTimestampOffset();
- bool evtTempo();
- bool evtModeOrdrChange();
- bool evtNotImpl() {
- return false;
- }
+ typedef bool(EuphonyPlayer::*EuphonyEvent)();
+ bool event_notImpl();
+ bool event_noteOn();
+ bool event_polyphonicAftertouch();
+ bool event_controlChange_pitchWheel();
+ bool event_programChange_channelAftertouch();
+
+ bool event_sysex();
+ bool event_advanceBar();
+ bool event_setTempo();
+ bool event_typeOrdrChange();
uint8 applyTranspose(uint8 in);
uint8 applyVolumeAdjust(uint8 in);
- void sendNoteOff();
- void sendNoteOn();
- void sendChanVolume();
- void sendPanPosition();
- void sendAllNotesOff();
- void sendSetInstrument();
- void sendPitch();
+ void sendEvent(uint8 type, uint8 command);
+ void sendNoteEvent(int type, int evt, int note, int velo);
+ void sendControllerReset(int type, int part);
+ void sendAllNotesOff(int type, int part);
+ void sendTempo(int tempo);
- int8 *_activeChannels;
- int8 *_sustainChannels;
+ uint8 *_partConfig_enable;
+ uint8 *_partConfig_type;
+ uint8 *_partConfig_ordr;
+ int8 *_partConfig_volume;
+ int8 *_partConfig_transpose;
- struct ActiveChannel {
- int8 chan;
- int8 next;
- uint8 note;
- uint8 sub;
- } *_assignedChannels;
-
- uint8 *_tEnable;
- uint8 *_tMode;
- uint8 *_tOrdr;
- int8 *_tLevel;
- int8 *_tTranspose;
-
- struct DlEvent {
+ struct SavedEvent {
+ SavedEvent(int ev, int tp, int nt, int vl, int ln, SavedEvent *chain) : evt(ev), type(tp), note(nt), velo(vl), len(ln), next(chain) {}
uint8 evt;
- uint8 mode;
+ uint8 type;
uint8 note;
uint8 velo;
uint16 len;
- } *_eventBuffer;
- int _bufferedEventsCount;
-
- uint8 _para[2];
- uint8 _paraCount;
- uint8 _command;
-
- uint8 _defaultBaseTickLen;
- uint8 _baseTickLen;
- uint32 _pulseCount;
+ SavedEvent *next;
+ };
+
+ SavedEvent *_savedEventsChain;
+
+ uint8 _defaultBarLength;
+ uint8 _barLength;
+ int _playerUpdatesLeft;
int _tempoControlMode;
- int _extraTimingControlRemainder;
- int _extraTimingControl;
+ int _updatesPerPulseRemainder;
+ int _updatesPerPulse;
int _timerSetting;
- int8 _tempoDiff;
+ int8 _tempoMode1PulseCounter;
int _tempoModifier;
- uint32 _timeStampDest;
- uint32 _timeStampBase;
- int8 _elapsedEvents;
+ uint32 _bar;
+ uint32 _parseToBar;
+ int8 _tempoMode1UpdateF8;
uint8 _deltaTicks;
- uint32 _tickCounter;
+ uint32 _beat;
uint8 _defaultTempo;
int _trackTempo;
bool _loop;
bool _playing;
bool _endOfTrack;
- bool _suspendParsing;
+ bool _paused;
const uint8 *_musicStart;
const uint8 *_musicPos;
uint32 _musicTrackSize;
- TownsAudioInterface *_intf;
+ EuphonyDriver *_eupDriver;
+ EuphonyBaseDriver *_drivers[3];
};
#endif
diff --git a/backends/graphics/dispmanxsdl/dispmanxsdl-graphics.cpp b/backends/graphics/dispmanxsdl/dispmanxsdl-graphics.cpp
new file mode 100644
index 0000000000..3da536be2b
--- /dev/null
+++ b/backends/graphics/dispmanxsdl/dispmanxsdl-graphics.cpp
@@ -0,0 +1,590 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * 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 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.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+// Needed for Raspberry Pi header inclusion
+#define FORBIDDEN_SYMBOL_ALLOW_ALL
+
+#include "common/scummsys.h"
+
+#if defined(DISPMANX)
+
+#include "backends/graphics/dispmanxsdl/dispmanxsdl-graphics.h"
+#include "graphics/scaler/aspect.h"
+#include "common/mutex.h"
+#include "common/textconsole.h"
+
+#include <bcm_host.h>
+
+struct dispvarsStruct {
+ DISPMANX_DISPLAY_HANDLE_T display;
+ DISPMANX_UPDATE_HANDLE_T update;
+ DISPMANX_ELEMENT_HANDLE_T element;
+ VC_IMAGE_TYPE_T pixFormat;
+ VC_DISPMANX_ALPHA_T alpha;
+
+ VC_RECT_T bmpRect;
+ VC_RECT_T srcRect;
+ VC_RECT_T dstRect;
+ uint32_t vcImagePtr;
+ int screen;
+ int pitch;
+ unsigned int dispmanxWidth;
+ unsigned int dispmanxHeight;
+ bool aspectRatioCorrection;
+ void *pixmem;
+
+ int numpages;
+ dispmanxPage *pages;
+ dispmanxPage *currentPage;
+ int pageflipPending;
+
+ pthread_cond_t vsyncCondition;
+ pthread_mutex_t vsyncCondMutex;
+ pthread_mutex_t pendingMutex;
+
+ SDL_Surface *fscreen;
+};
+
+struct dispmanxPage {
+ DISPMANX_RESOURCE_HANDLE_T resource;
+ bool used;
+ // Each page has it's own mutex for
+ // isolating the access to it's "used" flag.
+ pthread_mutex_t pageUsedMutex;
+
+ // This field will allow us to access the
+ // main dispvars struct, for the vsync cb.
+ struct dispvarsStruct *dispvars;
+};
+
+DispmanXSdlGraphicsManager::DispmanXSdlGraphicsManager(SdlEventSource *sdlEventSource, SdlWindow *window)
+ : SurfaceSdlGraphicsManager(sdlEventSource, window) {
+ _dispvars = new(dispvarsStruct);
+ dispmanXInit();
+}
+
+DispmanXSdlGraphicsManager::~DispmanXSdlGraphicsManager() {
+ dispmanXVideoQuit();
+ delete(_dispvars);
+}
+
+void DispmanXSdlGraphicsManager::dispmanXInit() {
+ _dispvars->screen = 0;
+ _dispvars->vcImagePtr = 0;
+ _dispvars->numpages = 3;
+ _dispvars->pages = (struct dispmanxPage *)calloc(_dispvars->numpages, sizeof(struct dispmanxPage));
+ _dispvars->pageflipPending = 0;
+ _dispvars->currentPage = NULL;
+ _dispvars->pixFormat = VC_IMAGE_RGB565;
+
+ /* Transparency disabled */
+ _dispvars->alpha.flags = DISPMANX_FLAGS_ALPHA_FIXED_ALL_PIXELS;
+ _dispvars->alpha.opacity = 255;
+ _dispvars->alpha.mask = 0;
+ _dispvars->element = 0;
+
+ // Init each page's variables
+ for (int i = 0; i < _dispvars->numpages; i++) {
+ _dispvars->pages[i].used = false;
+ _dispvars->pages[i].dispvars = _dispvars;
+ _dispvars->pages[i].resource = 0;
+ pthread_mutex_init(&_dispvars->pages[i].pageUsedMutex, NULL);
+ }
+
+ // Initialize the other mutex and condition variables
+ pthread_cond_init(&_dispvars->vsyncCondition, NULL);
+ pthread_mutex_init(&_dispvars->pendingMutex, NULL);
+ pthread_mutex_init(&_dispvars->vsyncCondMutex, NULL);
+
+ // Before we call any vc_* function, we need to call this one.
+ bcm_host_init();
+
+ _dispvars->display = vc_dispmanx_display_open(_dispvars->screen);
+ graphics_get_display_size(_dispvars->display, &_dispvars->dispmanxWidth, &_dispvars->dispmanxHeight);
+
+ // We need this so SDL_SetVideoMode() is called once.
+ _dispvars->fscreen = NULL;
+}
+
+void DispmanXSdlGraphicsManager::dispmanXSetup(int srcWidth, int srcHeight) {
+ unsigned int dstWidth, dstHeight, dstXpos, dstYpos;
+
+ // If we have an element, we have to free it along with it's resources.
+ if (_dispvars->element) {
+ dispmanXFreeResources();
+ }
+
+ // We do this for 2 bytes per pixel which is default on the Rpi.
+ _dispvars->pitch = srcWidth * 2;
+ if (_dispvars->aspectRatioCorrection) {
+ float aspect = ((float)srcWidth / (float)srcHeight);
+ dstWidth = _dispvars->dispmanxHeight * aspect;
+ } else {
+ dstWidth = _dispvars->dispmanxWidth;
+ }
+ dstHeight = _dispvars->dispmanxHeight;
+
+ // If we obtain a scaled image width that is bigger than the physical screen width,
+ // then we keep the physical screen width as our maximun width.
+ if (dstWidth > _dispvars->dispmanxWidth) {
+ dstWidth = _dispvars->dispmanxWidth;
+ }
+
+ dstXpos = (_dispvars->dispmanxWidth - dstWidth) / 2;
+ dstYpos = (_dispvars->dispmanxHeight - dstHeight) / 2;
+
+ // Remember we have to transfer the whole bitmap even if we would have
+ // interest in a part of it! Blitting is done by the GPU.
+ vc_dispmanx_rect_set(&_dispvars->dstRect, dstXpos, dstYpos, dstWidth, dstHeight);
+ vc_dispmanx_rect_set(&_dispvars->bmpRect, 0, 0, srcWidth, srcHeight);
+ vc_dispmanx_rect_set(&_dispvars->srcRect, 0, 0, srcWidth << 16, srcHeight << 16);
+
+ for (int i = 0; i < _dispvars->numpages; i++) {
+ _dispvars->pages[i].resource = vc_dispmanx_resource_create(_dispvars->pixFormat,
+ srcWidth, srcHeight, &(_dispvars->vcImagePtr));
+ }
+
+ // Add the element. Has to be removed before getting here again.
+ _dispvars->update = vc_dispmanx_update_start(0);
+
+ _dispvars->element = vc_dispmanx_element_add(
+ _dispvars->update,_dispvars->display, 0,
+ &_dispvars->dstRect, 0,
+ &_dispvars->srcRect, DISPMANX_PROTECTION_NONE,
+ &_dispvars->alpha, 0, (DISPMANX_TRANSFORM_T)0);
+
+ vc_dispmanx_update_submit_sync(_dispvars->update);
+}
+
+void dispmanXVSyncCallback(DISPMANX_UPDATE_HANDLE_T u, void *arg) {
+ struct dispmanxPage *page = (struct dispmanxPage*)arg;
+ struct dispvarsStruct *dispvars = page->dispvars;
+
+ // Marking the page as free must be done before the signaling
+ // so when the update function continues (it won't continue until we signal)
+ // we can chose this page as free.
+ if (dispvars->currentPage) {
+ pthread_mutex_lock(&dispvars->currentPage->pageUsedMutex);
+
+ // We mark as free the page that was visible until now.
+ page->dispvars->currentPage->used = false;
+
+ pthread_mutex_unlock(&dispvars->currentPage->pageUsedMutex);
+ }
+
+ // The page on which we issued the flip that
+ // caused this callback becomes the visible one
+ dispvars->currentPage = page;
+
+ // These two things must be isolated "atomically" to avoid getting
+ // a false positive in the pending_mutex test in update function.
+ pthread_mutex_lock(&dispvars->pendingMutex);
+
+ dispvars->pageflipPending--;
+ pthread_cond_signal(&dispvars->vsyncCondition);
+
+ pthread_mutex_unlock(&dispvars->pendingMutex);
+}
+
+void DispmanXSdlGraphicsManager::dispmanXUpdate() {
+ // Wait until last issued flip completes to get a free page. Also,
+ // dispmanx doesn't support issuing more than one pageflip.
+ pthread_mutex_lock(&_dispvars->pendingMutex);
+
+ if (_dispvars->pageflipPending > 0) {
+ pthread_cond_wait(&_dispvars->vsyncCondition, &_dispvars->pendingMutex);
+ }
+
+ pthread_mutex_unlock(&_dispvars->pendingMutex);
+
+ struct dispmanxPage *page = dispmanXGetFreePage();
+
+ // Frame blitting
+ vc_dispmanx_resource_write_data(page->resource, _dispvars->pixFormat,
+ _dispvars->pitch, _dispvars->pixmem, &_dispvars->bmpRect);
+
+ // Issue a page flip at the next vblank interval (will be done at vsync anyway).
+ _dispvars->update = vc_dispmanx_update_start(0);
+
+ vc_dispmanx_element_change_source(_dispvars->update, _dispvars->element,
+ page->resource);
+ vc_dispmanx_update_submit(_dispvars->update, &dispmanXVSyncCallback, page);
+
+ pthread_mutex_lock(&_dispvars->pendingMutex);
+ _dispvars->pageflipPending++;
+ pthread_mutex_unlock(&_dispvars->pendingMutex);
+}
+
+struct dispmanxPage *DispmanXSdlGraphicsManager::dispmanXGetFreePage(void) {
+ struct dispmanxPage *page = NULL;
+
+ while (!page) {
+ // Try to find a free page
+ for (int i = 0; i < _dispvars->numpages; ++i) {
+ if (!_dispvars->pages[i].used) {
+ page = (_dispvars->pages) + i;
+ break;
+ }
+ }
+
+ // If no page is free at the moment,
+ // wait until a free page is freed by vsync CB.
+ if (!page) {
+ pthread_mutex_lock(&_dispvars->vsyncCondMutex);
+ pthread_cond_wait(&_dispvars->vsyncCondition, &_dispvars->vsyncCondMutex);
+ pthread_mutex_unlock(&_dispvars->vsyncCondMutex);
+ }
+ }
+
+ // We mark the choosen page as used
+ pthread_mutex_lock(&page->pageUsedMutex);
+ page->used = true;
+ pthread_mutex_unlock(&page->pageUsedMutex);
+
+ return page;
+}
+
+void DispmanXSdlGraphicsManager::dispmanXFreeResources(void) {
+ // What if we run into the vsync cb code after freeing the resources?
+ pthread_mutex_lock(&_dispvars->pendingMutex);
+ if (_dispvars->pageflipPending > 0)
+ {
+ pthread_cond_wait(&_dispvars->vsyncCondition, &_dispvars->pendingMutex);
+ }
+ pthread_mutex_unlock(&_dispvars->pendingMutex);
+
+ for (int i = 0; i < _dispvars->numpages; i++) {
+ vc_dispmanx_resource_delete(_dispvars->pages[i].resource);
+ _dispvars->pages[i].resource = 0;
+ _dispvars->pages[i].used = false;
+ }
+
+ _dispvars->update = vc_dispmanx_update_start(0);
+ vc_dispmanx_element_remove(_dispvars->update, _dispvars->element);
+ vc_dispmanx_update_submit_sync(_dispvars->update);
+ // We use this on the setup function to know if we have to free resources and element.
+ _dispvars->element = 0;
+}
+
+void DispmanXSdlGraphicsManager::dispmanXVideoQuit() {
+ // This also waits for pending flips to complete, that's needed before
+ // we destroy the mutexes and condition.
+ dispmanXFreeResources();
+
+ // Destroy the mutexes and conditions
+ for (int i = 0; i < _dispvars->numpages; i++) {
+ pthread_mutex_destroy(&_dispvars->pages[i].pageUsedMutex);
+ }
+ pthread_mutex_destroy(&_dispvars->pendingMutex);
+ pthread_mutex_destroy(&_dispvars->vsyncCondMutex);
+ pthread_cond_destroy(&_dispvars->vsyncCondition);
+
+ free(_dispvars->pages);
+
+ // Close display and deinit
+ vc_dispmanx_display_close(_dispvars->display);
+ bcm_host_deinit();
+}
+
+bool DispmanXSdlGraphicsManager::loadGFXMode() {
+ _forceFull = true;
+
+ // In dispmanX, we manage aspect ratio correction, so for scummvm it's always disabled.
+ _videoMode.aspectRatioCorrection = false;
+
+ _videoMode.overlayWidth = _videoMode.screenWidth;
+ _videoMode.overlayHeight = _videoMode.screenHeight;
+ _videoMode.hardwareWidth = _videoMode.screenWidth;
+ _videoMode.hardwareHeight = _videoMode.screenHeight;
+
+ //
+ // Create the surface that contains the 8 bit game data
+ //
+
+ _screen = SDL_CreateRGBSurface(SDL_SWSURFACE, _videoMode.screenWidth, _videoMode.screenHeight,
+ _screenFormat.bytesPerPixel << 3,
+ ((1 << _screenFormat.rBits()) - 1) << _screenFormat.rShift ,
+ ((1 << _screenFormat.gBits()) - 1) << _screenFormat.gShift ,
+ ((1 << _screenFormat.bBits()) - 1) << _screenFormat.bShift ,
+ ((1 << _screenFormat.aBits()) - 1) << _screenFormat.aShift );
+ if (_screen == NULL)
+ error("allocating _screen failed");
+
+ // Avoid having SDL_SRCALPHA set even if we supplied an alpha-channel in the format.
+ SDL_SetAlpha(_screen, 0, 255);
+
+ // We set our own default palette to all black.
+ SDL_SetColors(_screen, _currentPalette, 0, 256);
+
+ //
+ // Create the surface that contains the scaled graphics in 16 bit mode
+ //
+
+ dispmanXSetup(_videoMode.screenWidth, _videoMode.screenHeight);
+
+ _hwscreen = SDL_CreateRGBSurface(SDL_SWSURFACE, _videoMode.hardwareWidth, _videoMode.hardwareHeight, 16,
+ 0, 0, 0, 0);
+
+ // This is just so SDL 1.x input is initialized. Only once!
+ if (_dispvars->fscreen == NULL)
+ _dispvars->fscreen = SDL_SetVideoMode(_videoMode.hardwareWidth, _videoMode.hardwareHeight, 16, SDL_FULLSCREEN);
+ if (_hwscreen == NULL) {
+ // Don't use error here because we don't have access to the debug console
+ warning("Allocating surface for dispmanX rendering _hwscreen failed");
+ g_system->quit();
+ }
+
+ // We render to dispmanx resources from _hwscreen pixels array
+ _dispvars->pixmem = _hwscreen->pixels;
+
+ _overlayscreen = SDL_CreateRGBSurface(SDL_SWSURFACE, _videoMode.overlayWidth, _videoMode.overlayHeight,
+ 16,
+ _hwscreen->format->Rmask,
+ _hwscreen->format->Gmask,
+ _hwscreen->format->Bmask,
+ _hwscreen->format->Amask);
+
+ if (_overlayscreen == NULL)
+ error("allocating _overlayscreen failed");
+
+ _overlayFormat.bytesPerPixel = _overlayscreen->format->BytesPerPixel;
+
+ _overlayFormat.rLoss = _overlayscreen->format->Rloss;
+ _overlayFormat.gLoss = _overlayscreen->format->Gloss;
+ _overlayFormat.bLoss = _overlayscreen->format->Bloss;
+ _overlayFormat.aLoss = _overlayscreen->format->Aloss;
+
+ _overlayFormat.rShift = _overlayscreen->format->Rshift;
+ _overlayFormat.gShift = _overlayscreen->format->Gshift;
+ _overlayFormat.bShift = _overlayscreen->format->Bshift;
+ _overlayFormat.aShift = _overlayscreen->format->Ashift;
+
+#ifdef USE_OSD
+ _osdSurface = SDL_CreateRGBSurface(SDL_SWSURFACE | SDL_RLEACCEL | SDL_SRCCOLORKEY | SDL_SRCALPHA,
+ _hwscreen->w,
+ _hwscreen->h,
+ 16,
+ _hwscreen->format->Rmask,
+ _hwscreen->format->Gmask,
+ _hwscreen->format->Bmask,
+ _hwscreen->format->Amask);
+ if (_osdSurface == NULL)
+ error("allocating _osdSurface failed");
+ SDL_SetColorKey(_osdSurface, SDL_RLEACCEL | SDL_SRCCOLORKEY | SDL_SRCALPHA, kOSDColorKey);
+#endif
+
+ _eventSource->resetKeyboadEmulation(
+ _videoMode.screenWidth, effectiveScreenHeight());
+
+ return true;
+}
+
+void DispmanXSdlGraphicsManager::clearOverlay() {
+ //assert(_transactionMode == kTransactionNone);
+
+ Common::StackLock lock(_graphicsMutex); // Lock the mutex until this function ends
+
+ if (!_overlayVisible)
+ return;
+
+ // Clear the overlay by making the game screen "look through" everywhere.
+ SDL_Rect src, dst;
+ src.x = src.y = 0;
+ dst.x = dst.y = 0;
+ src.w = dst.w = _videoMode.screenWidth;
+ src.h = dst.h = _videoMode.screenHeight;
+ if (SDL_BlitSurface(_screen, &src, _hwscreen, &dst) != 0)
+ error("SDL_BlitSurface failed: %s", SDL_GetError());
+
+ SDL_LockSurface(_hwscreen);
+ SDL_LockSurface(_overlayscreen);
+ Normal1x((byte *)(_hwscreen->pixels), _hwscreen->pitch,
+ (byte *)_overlayscreen->pixels, _overlayscreen->pitch, _videoMode.screenWidth, _videoMode.screenHeight);
+
+ SDL_UnlockSurface(_hwscreen);
+ SDL_UnlockSurface(_overlayscreen);
+
+ _forceFull = true;
+}
+
+void DispmanXSdlGraphicsManager::internUpdateScreen() {
+ SDL_Surface *srcSurf, *origSurf;
+ int height, width;
+
+ // If the shake position changed, fill the dirty area with blackness
+ if (_currentShakePos != _newShakePos ||
+ (_mouseNeedsRedraw && _mouseBackup.y <= _currentShakePos)) {
+ SDL_Rect blackrect = {0, 0, (Uint16)(_videoMode.screenWidth * _videoMode.scaleFactor), (Uint16)(_newShakePos * _videoMode.scaleFactor)};
+
+ if (_dispvars->aspectRatioCorrection && !_overlayVisible)
+ blackrect.h = real2Aspect(blackrect.h - 1) + 1;
+
+ SDL_FillRect(_hwscreen, &blackrect, 0);
+
+ _currentShakePos = _newShakePos;
+
+ _forceFull = true;
+ }
+
+ // Check whether the palette was changed in the meantime and update the
+ // screen surface accordingly.
+ if (_screen && _paletteDirtyEnd != 0) {
+ SDL_SetColors(_screen, _currentPalette + _paletteDirtyStart,
+ _paletteDirtyStart,
+ _paletteDirtyEnd - _paletteDirtyStart);
+
+ _paletteDirtyEnd = 0;
+
+ _forceFull = true;
+ }
+
+#ifdef USE_OSD
+ // OSD visible (i.e. non-transparent)?
+ if (_osdAlpha != SDL_ALPHA_TRANSPARENT) {
+ // Updated alpha value
+ const int diff = SDL_GetTicks() - _osdFadeStartTime;
+ if (diff > 0) {
+ if (diff >= kOSDFadeOutDuration) {
+ // Back to full transparency
+ _osdAlpha = SDL_ALPHA_TRANSPARENT;
+ } else {
+ // Do a linear fade out...
+ const int startAlpha = SDL_ALPHA_TRANSPARENT + kOSDInitialAlpha * (SDL_ALPHA_OPAQUE - SDL_ALPHA_TRANSPARENT) / 100;
+ _osdAlpha = startAlpha + diff * (SDL_ALPHA_TRANSPARENT - startAlpha) / kOSDFadeOutDuration;
+ }
+ SDL_SetAlpha(_osdSurface, SDL_RLEACCEL | SDL_SRCCOLORKEY | SDL_SRCALPHA, _osdAlpha);
+ _forceFull = true;
+ }
+ }
+#endif
+
+ if (!_overlayVisible) {
+ origSurf = _screen;
+ srcSurf = _hwscreen;
+ width = _videoMode.screenWidth;
+ height = _videoMode.screenHeight;
+ } else {
+ origSurf = _overlayscreen;
+ srcSurf = _hwscreen;
+ width = _videoMode.overlayWidth;
+ height = _videoMode.overlayHeight;
+ }
+
+ // Add the area covered by the mouse cursor to the list of dirty rects if
+ // we have to redraw the mouse.
+ if (_mouseNeedsRedraw)
+ undrawMouse();
+
+ // Force a full redraw if requested
+ if (_forceFull) {
+ _numDirtyRects = 1;
+ _dirtyRectList[0].x = 0;
+ _dirtyRectList[0].y = 0;
+ _dirtyRectList[0].w = width;
+ _dirtyRectList[0].h = height;
+ }
+
+ // Only draw anything if necessary
+ if (_numDirtyRects > 0 || _mouseNeedsRedraw) {
+ SDL_Rect *r;
+ SDL_Rect dst;
+ SDL_Rect *lastRect = _dirtyRectList + _numDirtyRects;
+
+ for (r = _dirtyRectList; r != lastRect; ++r) {
+ dst = *r;
+
+ if (SDL_BlitSurface(origSurf, r, srcSurf, &dst) != 0)
+ error("SDL_BlitSurface failed: %s", SDL_GetError());
+ }
+
+ // Readjust the dirty rect list in case we are doing a full update.
+ // This is necessary if shaking is active.
+ if (_forceFull) {
+ _dirtyRectList[0].y = 0;
+ _dirtyRectList[0].h = effectiveScreenHeight();
+ }
+
+ drawMouse();
+
+#ifdef USE_OSD
+ if (_osdAlpha != SDL_ALPHA_TRANSPARENT) {
+ SDL_BlitSurface(_osdSurface, 0, _hwscreen, 0);
+ }
+#endif
+
+ // Finally, blit all our changes to the screen
+ if (!_displayDisabled) {
+ SDL_UpdateRects(_hwscreen, _numDirtyRects, _dirtyRectList);
+ dispmanXUpdate();
+ }
+ }
+
+ _numDirtyRects = 0;
+ _forceFull = false;
+ _mouseNeedsRedraw = false;
+}
+
+bool DispmanXSdlGraphicsManager::handleScalerHotkeys(Common::KeyCode key) {
+
+ // Ctrl-Alt-a toggles aspect ratio correction
+ if (key == 'a') {
+ setFeatureState(OSystem::kFeatureAspectRatioCorrection, !_dispvars->aspectRatioCorrection);
+#ifdef USE_OSD
+ char buffer[128];
+ if (_dispvars->aspectRatioCorrection)
+ sprintf(buffer, "%s", ("Enabled aspect ratio correction"));
+ else
+ sprintf(buffer, "%s", ("Disabled aspect ratio correction"));
+ displayMessageOnOSD(buffer);
+#endif
+ internUpdateScreen();
+ return true;
+ }
+
+ return true;
+}
+
+bool DispmanXSdlGraphicsManager::hasFeature(OSystem::Feature f) {
+ if (f == OSystem::kFeatureFullscreenMode) {
+ return false;
+ } else {
+ return SurfaceSdlGraphicsManager::hasFeature(f);
+ }
+}
+
+void DispmanXSdlGraphicsManager::setFullscreenMode(bool enable) {
+ // Since we're always in fullscreen mode, we do nothing here.
+}
+
+void DispmanXSdlGraphicsManager::setAspectRatioCorrection(bool enable) {
+ Common::StackLock lock(_graphicsMutex);
+ // We simply take note on what's the aspect ratio correction activation state.
+ _dispvars->aspectRatioCorrection = enable;
+
+ // If we have a videomode setup already, call dispmanXSetup() again so aspect ratio
+ // correction activation/deactivation works from the menu.
+ if (_oldVideoMode.setup && _dispvars->aspectRatioCorrection == enable) {
+ dispmanXSetup(_videoMode.screenWidth, _videoMode.screenHeight);
+ }
+}
+
+#endif
diff --git a/backends/graphics/dispmanxsdl/dispmanxsdl-graphics.h b/backends/graphics/dispmanxsdl/dispmanxsdl-graphics.h
new file mode 100644
index 0000000000..6a2ede2383
--- /dev/null
+++ b/backends/graphics/dispmanxsdl/dispmanxsdl-graphics.h
@@ -0,0 +1,53 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * 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 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.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef BACKENDS_GRAPHICS_SDL_DISPMANX_H
+#define BACKENDS_GRAPHICS_SDL_DISPMANX_H
+
+#include "backends/graphics/surfacesdl/surfacesdl-graphics.h"
+
+struct dispvarsStruct;
+struct dispmanxPage;
+
+class DispmanXSdlGraphicsManager : public SurfaceSdlGraphicsManager {
+public:
+ DispmanXSdlGraphicsManager(SdlEventSource *sdlEventSource, SdlWindow *window);
+ ~DispmanXSdlGraphicsManager();
+ bool loadGFXMode();
+ void internUpdateScreen();
+ bool handleScalerHotkeys(Common::KeyCode key);
+ void setFullscreenMode(bool enable);
+ void setAspectRatioCorrection(bool enable);
+ void clearOverlay();
+ bool hasFeature(OSystem::Feature f);
+protected:
+ // Raspberry Pi Dispmanx API
+ void dispmanXSetup(int width, int height);
+ void dispmanXInit();
+ void dispmanXUpdate();
+ dispmanxPage *dispmanXGetFreePage();
+ void dispmanXFreeResources();
+ void dispmanXVideoQuit();
+ dispvarsStruct *_dispvars;
+};
+
+#endif /* BACKENDS_GRAPHICS_SDL_DISPMANX_H */
diff --git a/backends/module.mk b/backends/module.mk
index e5e2905781..7f2fb05489 100644
--- a/backends/module.mk
+++ b/backends/module.mk
@@ -129,6 +129,11 @@ MODULE_OBJS += \
mixer/sdl13/sdl13-mixer.o
endif
+ifdef DISPMANX
+MODULE_OBJS += \
+ graphics/dispmanxsdl/dispmanxsdl-graphics.o
+endif
+
ifeq ($(BACKEND),tizen)
MODULE_OBJS += \
timer/tizen/timer.o
diff --git a/backends/platform/sdl/module.mk b/backends/platform/sdl/module.mk
index 74dd506d31..65d12dceed 100644
--- a/backends/platform/sdl/module.mk
+++ b/backends/platform/sdl/module.mk
@@ -36,6 +36,12 @@ MODULE_OBJS += \
ps3/ps3.o
endif
+ifdef DISPMANX
+MODULE_OBJS += \
+ raspberrypi/raspberrypi-main.o \
+ raspberrypi/raspberrypi.o
+endif
+
# We don't use rules.mk but rather manually update OBJS and MODULE_DIRS.
MODULE_OBJS := $(addprefix $(MODULE)/, $(MODULE_OBJS))
OBJS := $(MODULE_OBJS) $(OBJS)
diff --git a/backends/platform/sdl/posix/posix-main.cpp b/backends/platform/sdl/posix/posix-main.cpp
index d07db11b0c..492da70eeb 100644
--- a/backends/platform/sdl/posix/posix-main.cpp
+++ b/backends/platform/sdl/posix/posix-main.cpp
@@ -22,7 +22,7 @@
#include "common/scummsys.h"
-#if defined(POSIX) && !defined(MACOSX) && !defined(SAMSUNGTV) && !defined(MAEMO) && !defined(WEBOS) && !defined(LINUXMOTO) && !defined(GPH_DEVICE) && !defined(GP2X) && !defined(DINGUX) && !defined(OPENPANDORA) && !defined(PLAYSTATION3)
+#if defined(POSIX) && !defined(MACOSX) && !defined(SAMSUNGTV) && !defined(MAEMO) && !defined(WEBOS) && !defined(LINUXMOTO) && !defined(GPH_DEVICE) && !defined(GP2X) && !defined(DINGUX) && !defined(OPENPANDORA) && !defined(PLAYSTATION3) && !defined(DISPMANX)
#include "backends/platform/sdl/posix/posix.h"
#include "backends/plugins/sdl/sdl-provider.h"
diff --git a/backends/platform/sdl/raspberrypi/README.RASPBERRYPI b/backends/platform/sdl/raspberrypi/README.RASPBERRYPI
new file mode 100644
index 0000000000..f8d872b519
--- /dev/null
+++ b/backends/platform/sdl/raspberrypi/README.RASPBERRYPI
@@ -0,0 +1,106 @@
+ScummVM-RASPBERRYPI README
+==============================================================================
+
+Notes
+============
+
+This version of ScummVM is specially tailored to use DispmanX, the native 2D
+API on the Raspberry Pi. The idea is that scaling and drawing on a double
+buffer with a non-blocking vsync wait is all done using the on-board VideoCore
+hardware, thus using only a small fraction of the CPU ScummVM uses when ran
+on a clunky, software-scaled and desynced X11 environment using the X11 API.
+Thus, running this version under an X11 session is not supported.
+
+Requirements
+============
+- Raspberry Pi 1 or 2 microcomputer.
+- Raspbian (Debian) installed on SD card. Other distros may be supported if
+ they include the VideoCore runtime libraries that Raspbian includes.
+-An attached keyboard and mouse, or alternatively joystick.
+
+Controls
+============
+
+The standard ScummVM keyboard and mouse controls are used as in any other
+GNU/Linux based system.
+Use the --joystick parameter if you want to use a joystick instead of the
+intended mouse for playing the games (not recommended).
+
+Installation from binaries
+==============================
+
+We have at least three methods to get the binaries into the Raspbian SD:
+
+1) Since Debian (Raspbian) includes an ssh service by default, I recommend
+keeping the SD card on the Raspberry Pi, and using scp to copy the package over
+to your home directory in the Debian filesystem.
+
+scp scummvm-rpi_<version>.zip pi@<raspberrypi_ip>:/home/pi
+
+2) If your RaspberryPi has internet access, you can simply use wget to
+download the package to your home folder:
+
+cd ~/
+wget <package_link>
+
+3) You could also connect the Raspbian SD card to your main PC and, after
+mounting it (or being automounted as it would be in most desktop GNU/Linux
+systems), copy the package file manually to your home directory.
+How to mount an SD and copy files to it is beyond the scope of this README.
+
+Once we have the package file in our home directory using one of the three
+aforementioned methods, we would need to uncompress it:
+
+unzip scummvm-rpi_<version>.zip
+
+As a result, a directory containing the scummvm along with this README will be
+created.
+We can run it by simply changing to our scummvm directory and executing the
+scummvm file.
+
+cd scummvm-rpi
+./scummvm
+
+I recommend copying the games to /home/pi/scummvm-rpi. Adding the games via the menu
+works as in any other system ScummVM runs on.
+
+Building from sources
+==============================
+
+We have two options to build once we have the sources in our main GNU/Linux desktop
+class PC or in our Raspberry Pi:
+
+1) Building on the Raspberry Pi itself, although possible, is an SLOW task for the
+little computer unless you use distributed gcc (or distcc for short).
+
+Local compilation would simply consist of the "standard" GNU/Linux building process:
+
+cd <sources_dir>
+
+./configure --enable-dispmanx -disable-debug --enable-release
+--enable-optimizations --disable-mt32emu --disable-flac --disable-mad --disable-vorbis
+--disable-tremor --disable-fluidsynth --disable-taskbar --disable-timidity --disable-alsa
+--disable-scalers --disable-hq-scalers --disable-savegame-timestamp --disable-eventrecorder
+
+make
+
+As you can see, we're manually disabling scalers because we prefer dispmanx for that, which
+makes scalers unnecessary on a CPU limited platform like this, timestamps because most people
+doesn't have an RTC on the Raspberry Pi, and event recorder to save SD card write cycles.
+All these are automatically disabled when we crosscompile by passing "--host=raspberrypi",
+which is not the case.
+
+ТЁТЁIt will be an SLOW process, taking several hours to complete, unless you
+are running distcc against a fast compilation server!!
+
+2) If we want to build by cross-compiling on a GNU/Linux X86-based computer,
+we can find concise instructions for this can be found on the ScummVM wiki:
+
+http://wiki.scummvm.org/index.php/Compiling_ScummVM/RPI
+
+NOTE: Distcc is my preferred method as it does cross-compiling totally transparent
+(we build ON the Pi but the actual CPU-intensive compilation is made on an external
+server), but it involves building a custom gcc version on the compilation server and
+configuring a server and client in both the Raspberry Pi and the server.
+
+Enjoy!
diff --git a/backends/platform/sdl/raspberrypi/raspberrypi-main.cpp b/backends/platform/sdl/raspberrypi/raspberrypi-main.cpp
new file mode 100644
index 0000000000..cddbcb7ec4
--- /dev/null
+++ b/backends/platform/sdl/raspberrypi/raspberrypi-main.cpp
@@ -0,0 +1,51 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * 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 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.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "backends/platform/sdl/raspberrypi/raspberrypi.h"
+#include "backends/plugins/sdl/sdl-provider.h"
+#include "common/scummsys.h"
+#include "base/main.h"
+
+#if defined(DISPMANX)
+int main(int argc, char* argv[]) {
+
+ // Create our OSystem instance
+ g_system = new OSystem_SDL_RaspberryPi();
+ assert(g_system);
+
+ // Pre initialize the backend
+ ((OSystem_SDL_RaspberryPi *)g_system)->init();
+
+#ifdef DYNAMIC_MODULES
+ PluginManager::instance().addPluginProvider(new SDLPluginProvider());
+#endif
+
+ // Invoke the actual ScummVM main entry point:
+ int res = scummvm_main(argc, argv);
+
+ // Free OSystem
+ delete (OSystem_SDL_RaspberryPi *)g_system;
+
+ return res;
+}
+
+#endif
diff --git a/backends/platform/sdl/raspberrypi/raspberrypi.cpp b/backends/platform/sdl/raspberrypi/raspberrypi.cpp
new file mode 100644
index 0000000000..206203d82e
--- /dev/null
+++ b/backends/platform/sdl/raspberrypi/raspberrypi.cpp
@@ -0,0 +1,42 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * 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 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.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#if defined(DISPMANX)
+
+#include "backends/platform/sdl/raspberrypi/raspberrypi.h"
+#include "backends/graphics/dispmanxsdl/dispmanxsdl-graphics.h"
+
+void OSystem_SDL_RaspberryPi::initBackend() {
+ // Create the events manager
+ if (_eventSource == 0)
+ _eventSource = new SdlEventSource();
+
+ // Create the graphics manager
+ if (_graphicsManager == 0) {
+ _graphicsManager = new DispmanXSdlGraphicsManager(_eventSource, _window);
+ }
+
+ // Call parent implementation of this method
+ OSystem_POSIX::initBackend();
+}
+
+#endif
diff --git a/backends/platform/sdl/raspberrypi/raspberrypi.h b/backends/platform/sdl/raspberrypi/raspberrypi.h
new file mode 100644
index 0000000000..45e2c505f6
--- /dev/null
+++ b/backends/platform/sdl/raspberrypi/raspberrypi.h
@@ -0,0 +1,35 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * 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 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.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef SDL_DISPMANX_COMMON_H
+#define SDL_DISPMANX_COMMON_H
+
+#if defined(DISPMANX)
+#include "backends/platform/sdl/posix/posix.h"
+
+class OSystem_SDL_RaspberryPi : public OSystem_POSIX {
+public:
+ void initBackend();
+};
+
+#endif /* DISPMANX */
+#endif /* SDL_DISPMANX_COMMON_H */
diff --git a/backends/platform/sdl/win32/win32-main.cpp b/backends/platform/sdl/win32/win32-main.cpp
index c6c15c00e8..c6339f0c8c 100644
--- a/backends/platform/sdl/win32/win32-main.cpp
+++ b/backends/platform/sdl/win32/win32-main.cpp
@@ -43,7 +43,12 @@ int __stdcall WinMain(HINSTANCE /*hInst*/, HINSTANCE /*hPrevInst*/, LPSTR /*lpC
#if !SDL_VERSION_ATLEAST(2, 0, 0)
SDL_SetModuleHandle(GetModuleHandle(NULL));
#endif
+// HACK: __argc, __argv are broken and return zero when using mingwrt 4.0+ on MinGW
+#if defined(__GNUC__) && defined(__MINGW32__) && !defined(__MINGW64__)
+ return main(_argc, _argv);
+#else
return main(__argc, __argv);
+#endif
}
int main(int argc, char *argv[]) {
diff --git a/backends/platform/symbian/mmp/config.mmh b/backends/platform/symbian/mmp/config.mmh
index f397e5ec64..da91117cf6 100644
--- a/backends/platform/symbian/mmp/config.mmh
+++ b/backends/platform/symbian/mmp/config.mmh
@@ -29,19 +29,6 @@
// Common EPOC MMP makefiles option storage for ScummVM
//
-/*
- * MACRO REMOVE_UNDEFINED used for bypass this bug -
- * http://sourceforge.net/p/scummvm/bugs/6437/
- * Requre change in epoc32\include\libc\sys\unistd.h by
- *
- * #ifndef REMOVE_UNDEFINED
- * #define remove(x) unlink(x)
- * #define wremove(x) wunlink(x)
- * #endif //REMOVE_UNDEFINED
- *
- * Affects Avalanche, CGE2 and Tsage
- */
-
// *** Definitions
OPTION MSVC /QIfist /Ob1 /Oy /GF // /QIfist disables use of __ftol2 to avoid linker probs with MS libc: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/vcrefQIfistSuppress_ftol.asp
diff --git a/backends/platform/symbian/mmp/scummvm_avalanche.mmp.in b/backends/platform/symbian/mmp/scummvm_avalanche.mmp.in
index 49c73222ca..6d44c66bf7 100644
--- a/backends/platform/symbian/mmp/scummvm_avalanche.mmp.in
+++ b/backends/platform/symbian/mmp/scummvm_avalanche.mmp.in
@@ -33,7 +33,6 @@
TARGET scummvm_avalanche.lib
TARGETTYPE lib
-MACRO REMOVE_UNDEFINED
#include "config.mmh"
//START_AUTO_MACROS_SLAVE//
diff --git a/backends/platform/symbian/mmp/scummvm_cge2.mmp.in b/backends/platform/symbian/mmp/scummvm_cge2.mmp.in
index 1561b0f479..7c78f47bfd 100644
--- a/backends/platform/symbian/mmp/scummvm_cge2.mmp.in
+++ b/backends/platform/symbian/mmp/scummvm_cge2.mmp.in
@@ -32,7 +32,6 @@
TARGET scummvm_cge2.lib
TARGETTYPE lib
-MACRO REMOVE_UNDEFINED
#include "config.mmh"
//START_AUTO_MACROS_SLAVE//
diff --git a/backends/platform/symbian/mmp/scummvm_tsage.mmp.in b/backends/platform/symbian/mmp/scummvm_tsage.mmp.in
index 93f278e279..6b57827e1e 100644
--- a/backends/platform/symbian/mmp/scummvm_tsage.mmp.in
+++ b/backends/platform/symbian/mmp/scummvm_tsage.mmp.in
@@ -32,7 +32,6 @@
TARGET scummvm_tsage.lib
TARGETTYPE lib
-MACRO REMOVE_UNDEFINED
#include "config.mmh"
//START_AUTO_MACROS_SLAVE//
diff --git a/backends/platform/symbian/src/SymbianOS.cpp b/backends/platform/symbian/src/SymbianOS.cpp
index e28b78900c..4d417b5a66 100644
--- a/backends/platform/symbian/src/SymbianOS.cpp
+++ b/backends/platform/symbian/src/SymbianOS.cpp
@@ -197,7 +197,3 @@ void* scumm_bsearch(const void *key, const void *base, size_t nmemb, size_t size
return NULL;
}
-int remove(const char *path)
-{
- return unlink(path);
-}
diff --git a/backends/platform/symbian/src/portdefs.h b/backends/platform/symbian/src/portdefs.h
index 1fb941963b..f9da09d3eb 100644
--- a/backends/platform/symbian/src/portdefs.h
+++ b/backends/platform/symbian/src/portdefs.h
@@ -58,11 +58,17 @@ typedef signed long int int32;
// re-define those data types.
#define SCUMMVM_DONT_DEFINE_TYPES
+// Hide the macro "remove" defined in unistd.h from anywere except where
+// we explicitly require it. This lets us use the name "remove" in engines.
+// Must be after including unistd.h .
+#ifndef SYMBIAN_USE_SYSTEM_REMOVE
+#undef remove
+#endif
+
#define SMALL_SCREEN_DEVICE
#define DISABLE_COMMAND_LINE
#define USE_RGB_COLOR
-int remove(const char *path);
#if defined(USE_TREMOR) && !defined(USE_VORBIS)
#define USE_VORBIS // make sure this one is defined together with USE_TREMOR!
diff --git a/backends/saves/default/default-saves.cpp b/backends/saves/default/default-saves.cpp
index 1b955a5021..4f7013724a 100644
--- a/backends/saves/default/default-saves.cpp
+++ b/backends/saves/default/default-saves.cpp
@@ -20,6 +20,11 @@
*
*/
+// This define lets us use the system function remove() on Symbian, which
+// is disabled by default due to a macro conflict.
+// See backends/platform/symbian/src/portdefs.h .
+#define SYMBIAN_USE_SYSTEM_REMOVE
+
#include "common/scummsys.h"
#if !defined(DISABLE_DEFAULT_SAVEFILEMANAGER)
diff --git a/common/algorithm.h b/common/algorithm.h
index 6453073ae5..cbd6eae708 100644
--- a/common/algorithm.h
+++ b/common/algorithm.h
@@ -177,7 +177,8 @@ T sortChoosePivot(T first, T last) {
template<typename T, class StrictWeakOrdering>
T sortPartition(T first, T last, T pivot, StrictWeakOrdering &comp) {
--last;
- SWAP(*pivot, *last);
+ if (pivot != last)
+ SWAP(*pivot, *last);
T sorted;
for (sorted = first; first != last; ++first) {
@@ -188,7 +189,8 @@ T sortPartition(T first, T last, T pivot, StrictWeakOrdering &comp) {
}
}
- SWAP(*last, *sorted);
+ if (last != sorted)
+ SWAP(*last, *sorted);
return sorted;
}
diff --git a/common/dcl.cpp b/common/dcl.cpp
index 5993c218cb..66dfb76b2a 100644
--- a/common/dcl.cpp
+++ b/common/dcl.cpp
@@ -449,6 +449,8 @@ bool DecompressorDCL::unpack(SeekableReadStream *sourceStream, WriteStream *targ
}
if (_targetFixedSize) {
+ if (_bytesWritten != _targetSize)
+ warning("DCL-INFLATE Error: Inconsistent bytes written (%d) and target buffer size (%d)", _bytesWritten, _targetSize);
return _bytesWritten == _targetSize;
}
return true; // For targets featuring dynamic size we always succeed
diff --git a/common/dcl.h b/common/dcl.h
index f90bc23c8d..ade7ebd985 100644
--- a/common/dcl.h
+++ b/common/dcl.h
@@ -25,6 +25,7 @@
* PKWARE DCL ("explode") ("PKWARE data compression library") decompressor used in engines:
* - agos (exclusively for Simon 2 setup.shr file)
* - mohawk
+ * - neverhood
* - sci
*/
diff --git a/common/scummsys.h b/common/scummsys.h
index 0c4687e03e..b8cf7678a4 100644
--- a/common/scummsys.h
+++ b/common/scummsys.h
@@ -46,7 +46,7 @@
#if defined(WIN32)
- #ifdef _MSC_VER
+ #if defined(_MSC_VER) && _MSC_VER <= 1800
// FIXME: The placement of the workaround functions for MSVC below
// require us to include stdio.h and stdarg.h for MSVC here. This
diff --git a/common/xmlparser.cpp b/common/xmlparser.cpp
index 67a3d36cec..da4f577e3c 100644
--- a/common/xmlparser.cpp
+++ b/common/xmlparser.cpp
@@ -97,36 +97,38 @@ bool XMLParser::parserError(const String &errStr) {
assert(_stream->pos() == startPosition);
currentPosition = startPosition;
- int keyOpening = 0;
- int keyClosing = 0;
-
- while (currentPosition-- && keyOpening == 0) {
- _stream->seek(-2, SEEK_CUR);
- c = _stream->readByte();
+ Common::String errorMessage = Common::String::format("\n File <%s>, line %d:\n", _fileName.c_str(), lineCount);
- if (c == '<')
- keyOpening = currentPosition - 1;
- else if (c == '>')
- keyClosing = currentPosition;
- }
+ if (startPosition > 1) {
+ int keyOpening = 0;
+ int keyClosing = 0;
- _stream->seek(startPosition, SEEK_SET);
- currentPosition = startPosition;
- while (keyClosing == 0 && c && currentPosition++) {
- c = _stream->readByte();
+ while (currentPosition-- && keyOpening == 0) {
+ _stream->seek(-2, SEEK_CUR);
+ c = _stream->readByte();
- if (c == '>')
- keyClosing = currentPosition;
- }
+ if (c == '<')
+ keyOpening = currentPosition - 1;
+ else if (c == '>')
+ keyClosing = currentPosition;
+ }
- Common::String errorMessage = Common::String::format("\n File <%s>, line %d:\n", _fileName.c_str(), lineCount);
+ _stream->seek(startPosition, SEEK_SET);
+ currentPosition = startPosition;
+ while (keyClosing == 0 && c && currentPosition++) {
+ c = _stream->readByte();
- currentPosition = (keyClosing - keyOpening);
- _stream->seek(keyOpening, SEEK_SET);
+ if (c == '>')
+ keyClosing = currentPosition;
+ }
- while (currentPosition--)
- errorMessage += (char)_stream->readByte();
+ currentPosition = (keyClosing - keyOpening);
+ _stream->seek(keyOpening, SEEK_SET);
+ while (currentPosition--)
+ errorMessage += (char)_stream->readByte();
+ }
+
errorMessage += "\n\nParser error: ";
errorMessage += errStr;
errorMessage += "\n\n";
diff --git a/configure b/configure
index a2f73644cf..ad513e0079 100755
--- a/configure
+++ b/configure
@@ -135,6 +135,7 @@ _faad=auto
_fluidsynth=auto
_opengl=auto
_opengles=auto
+_dispmanx=no
_readline=auto
_freetype2=auto
_taskbar=auto
@@ -867,6 +868,7 @@ Special configuration feature:
tizen for Samsung Tizen
caanoo for Caanoo
dingux for Dingux
+ raspberrypi for Raspberry Pi
dreamcast for Sega Dreamcast
ds for Nintendo DS
gamecube for Nintendo GameCube
@@ -1059,6 +1061,8 @@ for ac_option in $@; do
--disable-libunity) _libunity=no ;;
--enable-opengl) _opengl=yes ;;
--disable-opengl) _opengl=no ;;
+ --enable-dispmanx) _dispmanx=yes ;;
+ --disable-dispmanx) _dispmanx=no ;;
--enable-bink) _bink=yes ;;
--disable-bink) _bink=no ;;
--enable-verbose-build) _verbose_build=yes ;;
@@ -1305,6 +1309,13 @@ arm-riscos)
_host_os=riscos
_host_cpu=arm
;;
+raspberrypi)
+ _host_os=linux
+ _host_cpu=arm
+ # This tuple is the one used by the official Rpi toolchain.
+ # It may change in the future.
+ _host_alias=bcm2708hardfp
+ ;;
caanoo)
_host_os=gph-linux
_host_cpu=arm
@@ -2559,6 +2570,27 @@ if test -n "$_host"; then
_seq_midi=no
_port_mk="backends/platform/dingux/dingux.mk"
;;
+ raspberrypi)
+ # This is needed because the official cross compiler doesn't have multiarch enabled
+ # but Raspbian does.
+ # Be careful as it's the linker (LDFLAGS) which must know about sysroot.
+ # These are needed to build against Raspbian's libSDL even if we don't activate
+ # dispmanx support.
+ append_var LDFLAGS "--sysroot=$RPI_ROOT"
+ append_var LDFLAGS "-B$RPI_ROOT/usr/lib/arm-linux-gnueabihf"
+ append_var LDFLAGS "-Xlinker --rpath-link=$RPI_ROOT/usr/lib/arm-linux-gnueabihf"
+ append_var LDFLAGS "-Xlinker --rpath-link=$RPI_ROOT/lib/arm-linux-gnueabihf"
+ append_var LDFLAGS "-Xlinker --rpath-link=$RPI_ROOT/opt/vc/lib"
+ append_var LDFLAGS "-L$RPI_ROOT/opt/vc/lib"
+ append_var LDFLAGS "-L/opt/rpi_root/lib/arm-linux-gnueabihf -L$RPI_ROOT/usr/lib -L$RPI_ROOT/opt/vc/lib -lbcm_host -lvcos"
+ _savegame_timestamp=no
+ _eventrec=no
+ _build_scalers=no
+ _build_hq_scalers=no
+ # It makes no sense to have both GL and dispmanx rendering support.
+ _opengl=no
+ _opengles=no
+ ;;
dreamcast)
append_var DEFINES "-DDISABLE_DEFAULT_SAVEFILEMANAGER"
append_var DEFINES "-DDISABLE_TEXT_CONSOLE"
@@ -3139,7 +3171,6 @@ case $_backend in
;;
esac
-
#
# Determine whether host is POSIX compliant, or at least POSIX
# compatible enough to support our POSIX code (including dlsym(),
@@ -4073,6 +4104,34 @@ fi
define_in_config_if_yes "$_opengl" "USE_OPENGL"
define_in_config_if_yes "$_opengles" "USE_GLES"
+# Check if Raspberry Pi's Dispmanx graphics have been enabled and everything is in place.
+# If dispmanx is disabled, we fall back to plain SDL rendering.
+if test "$_dispmanx" = "yes" ; then
+ echocheck "DispmanX graphics"
+ _use_dispmanx=no
+
+ # These are only needed if, appart from cross-building for Raspberry Pi,
+ # we are activating dispmanx support.
+ DISPMANX_CXXFLAGS="-I$RPI_ROOT/usr/include -I$RPI_ROOT/usr/include/arm-linux-gnueabihf -I$RPI_ROOT/opt/vc/include -I$RPI_ROOT/opt/vc/include/interface/vmcs_host/linux -I$RPI_ROOT/opt/vc/include/interface/vcos/pthreads -I$RPI_ROOT/usr/include/SDL"
+ DISPMANX_LIBS="$RPI_LIBS -L/opt/rpi_root/lib/arm-linux-gnueabihf -L$RPI_ROOT/usr/lib -L$RPI_ROOT/opt/vc/lib -lbcm_host -lvcos -lvchiq_arm"
+
+ cat > $TMPC << EOF
+#include <bcm_host.h>
+
+ int main(int argc, char *argv[]) {
+ bcm_host_init();
+}
+EOF
+ cc_check $DISPMANX_CXXFLAGS $DISPMANX_LIBS && _use_dispmanx=yes
+ if test "$_use_dispmanx" = "yes"; then
+ append_var CXXFLAGS "$DISPMANX_CXXFLAGS"
+ append_var LIBS "$DISPMANX_LIBS"
+ append_var DEFINES "-DDISPMANX"
+ add_line_to_config_mk 'DISPMANX = 1'
+ echo $_use_dispmanx
+ else echo "no"
+ fi
+fi
#
# Check for nasm
diff --git a/devtools/README b/devtools/README
index 509048bfe0..e7ff94dc05 100644
--- a/devtools/README
+++ b/devtools/README
@@ -72,8 +72,8 @@ create_mort (Strangerke)
create_project (LordHoto, Littleboy)
--------------
- Creates project files for Visual Studio 2008, 2010, 2012, 2013, Xcode and
- Code::Blocks out of the configure / Makefile based build system.
+ Creates project files for Visual Studio 2008, 2010, 2012, 2013, 2015,
+ Xcode and Code::Blocks out of the configure / Makefile based build system.
It also offers a way to enable or disable certain engines and the use
of external libraries similar to configure. Run the tool without
any arguments for further help.
diff --git a/devtools/create_kyradat/create_kyradat.cpp b/devtools/create_kyradat/create_kyradat.cpp
index 441f315c8d..e064e899de 100644
--- a/devtools/create_kyradat/create_kyradat.cpp
+++ b/devtools/create_kyradat/create_kyradat.cpp
@@ -45,7 +45,7 @@
enum {
- kKyraDatVersion = 86
+ kKyraDatVersion = 87
};
const ExtractFilename extractFilenames[] = {
diff --git a/devtools/create_kyradat/resources/lok_pc98_japanese.h b/devtools/create_kyradat/resources/lok_pc98_japanese.h
index 0cbc96aeb9..0a70ab945e 100644
--- a/devtools/create_kyradat/resources/lok_pc98_japanese.h
+++ b/devtools/create_kyradat/resources/lok_pc98_japanese.h
@@ -222,10 +222,11 @@ static const char *const k1PoisonGoneStringPC98Japanese[2] = {
static const StringListProvider k1PoisonGoneStringPC98JapaneseProvider = { ARRAYSIZE(k1PoisonGoneStringPC98Japanese), k1PoisonGoneStringPC98Japanese };
-static const char *const k1ThePoisonStringsPC98Japanese[3] = {
+static const char *const k1ThePoisonStringsPC98Japanese[4] = {
"\x93\xC5\x82\xBE\x81""E""\x81""E""\x81""E",
"\x8C\xC4\x8B""z""\x82\xAA\x8F""o""\x97\x88\x82\xC8\x82\xA2\x81""E""\x81""E""\x81""E",
- "\x8B""C""\x95\xAA\x82\xAA\x88\xAB\x82\xA2\x81""E""\x81""E""\x81""E"
+ "\x8B""C""\x95\xAA\x82\xAA\x88\xAB\x82\xA2\x81""E""\x81""E""\x81""E",
+ "\x82\xA0\x82\xCC\x8E\xD6\x82\xCD""\r""\x93\xC5\x8E\xD6\x82\xC9\x82\xBF\x82\xAA\x82\xA2\x82\xC8\x82\xA2\x81""I"
};
static const StringListProvider k1ThePoisonStringsPC98JapaneseProvider = { ARRAYSIZE(k1ThePoisonStringsPC98Japanese), k1ThePoisonStringsPC98Japanese };
diff --git a/devtools/create_mortdat/create_mortdat.cpp b/devtools/create_mortdat/create_mortdat.cpp
index f6b2884005..2d7c9ad3b9 100644
--- a/devtools/create_mortdat/create_mortdat.cpp
+++ b/devtools/create_mortdat/create_mortdat.cpp
@@ -227,6 +227,7 @@ void writeMenuData(const char *menuData, int languageId) {
void writeMenuBlock() {
writeMenuData(menuDataEn, 1);
+ writeMenuData(menuDataFr, 0);
writeMenuData(menuDataDe, 2);
}
diff --git a/devtools/create_mortdat/menudata.h b/devtools/create_mortdat/menudata.h
index 2290666ffe..0d46f93329 100644
--- a/devtools/create_mortdat/menudata.h
+++ b/devtools/create_mortdat/menudata.h
@@ -76,6 +76,56 @@ const char *menuDataEn =
"@@@ @@@ @@@ @@@ "
" ";
+const char *menuDataFr =
+ " @@@ "
+ " @ "
+ " @ @ @@ @@@ @@@ "
+ " @ @ @ @ @ "
+ " @ @ @ @ @ "
+ " @ @ @ @ @ "
+ "@@@ @@@ @@ @@ "
+ " "
+ " @@@@@ @@ "
+ " @ @ @ "
+ " @ @ @@@ @ @@@ "
+ " @ @ @ @ @ @ "
+ " @ @ @@@@ @ @ "
+ " @ @ @ @@@@ "
+ "@@@@@ @@@ @ "
+ " @@@ "
+ " @ @ "
+ " @@ @ "
+ " @ @ @@@@ @@@@ "
+ " @ @ @ @ @ "
+ " @@@@@ @ @ "
+ " @ @ @ @ @ "
+ "@@@ @@@ @@@ @@ "
+ " "
+ " @@@@@ @@@ @@@"
+ " @ @ @ @ @"
+ " @ @@@ @ @ "
+ " @@@@ @ @ @ @@@ "
+ " @ @@@@@ @ @ "
+ " @ @ @ @ @ "
+ "@@@@@@ @@@ @@@ @@@ "
+ " "
+ " @@@@@ @ "
+ " @ @ "
+ " @ @ @@ @@@@ "
+ " @ @ @ @ "
+ " @ @ @ @@@ "
+ " @ @ @ @ "
+ "@@@@@ @@@ @@@@@ "
+ " "
+ " @@@@@@@ @ "
+ " @ @ "
+ " @ @ @@ @@@@ "
+ " @@@@ @ @ @ "
+ " @ @ @ @ "
+ " @ @ @ @ "
+ "@@@ @@@ @@@ "
+ " ";
+
const char *menuDataDe =
" @@@ @@ "
" @ @ "
diff --git a/devtools/create_project/create_project.cpp b/devtools/create_project/create_project.cpp
index e4cb67134a..0aba511491 100644
--- a/devtools/create_project/create_project.cpp
+++ b/devtools/create_project/create_project.cpp
@@ -124,7 +124,7 @@ int main(int argc, char *argv[]) {
setup.features = getAllFeatures();
ProjectType projectType = kProjectNone;
- int msvcVersion = 9;
+ int msvcVersion = 12;
bool useSDL2 = false;
// Parse command line arguments
@@ -176,7 +176,7 @@ int main(int argc, char *argv[]) {
msvcVersion = atoi(argv[++i]);
- if (msvcVersion != 9 && msvcVersion != 10 && msvcVersion != 11 && msvcVersion != 12) {
+ if (msvcVersion != 9 && msvcVersion != 10 && msvcVersion != 11 && msvcVersion != 12 && msvcVersion != 14) {
std::cerr << "ERROR: Unsupported version: \"" << msvcVersion << "\" passed to \"--msvc-version\"!\n";
return -1;
}
@@ -453,6 +453,9 @@ int main(int argc, char *argv[]) {
// 4250 ('class1' : inherits 'class2::member' via dominance)
// two or more members have the same name. Should be harmless
//
+ // 4267 ('var' : conversion from 'size_t' to 'type', possible loss of data)
+ // throws tons and tons of warnings (no immediate plan to fix all usages)
+ //
// 4310 (cast truncates constant value)
// used in some engines
//
@@ -468,6 +471,8 @@ int main(int argc, char *argv[]) {
// 4512 ('class' : assignment operator could not be generated)
// some classes use const items and the default assignment operator cannot be generated
//
+ // 4577 ('noexcept' used with no exception handling mode specified)
+ //
// 4702 (unreachable code)
// mostly thrown after error() calls (marked as NORETURN)
//
@@ -523,6 +528,11 @@ int main(int argc, char *argv[]) {
globalWarnings.push_back("6385");
globalWarnings.push_back("6386");
+ if (msvcVersion == 14) {
+ globalWarnings.push_back("4267");
+ globalWarnings.push_back("4577");
+ }
+
projectWarnings["agi"].push_back("4510");
projectWarnings["agi"].push_back("4610");
@@ -636,6 +646,7 @@ void displayHelp(const char *exe) {
" 10 stands for \"Visual Studio 2010\"\n"
" 11 stands for \"Visual Studio 2012\"\n"
" 12 stands for \"Visual Studio 2013\"\n"
+ " 14 stands for \"Visual Studio 2015\"\n"
" The default is \"9\", thus \"Visual Studio 2008\"\n"
" --build-events Run custom build events as part of the build\n"
" (default: false)\n"
@@ -658,9 +669,9 @@ void displayHelp(const char *exe) {
"Optional features settings:\n"
" --enable-<name> enable inclusion of the feature \"name\"\n"
" --disable-<name> disable inclusion of the feature \"name\"\n"
- "\n"
- "SDL settings:\n"
- " --sdl2 link to SDL 2.0, instead of SDL 1.2\n"
+ "\n"
+ "SDL settings:\n"
+ " --sdl2 link to SDL 2.0, instead of SDL 1.2\n"
"\n"
" There are the following features available:\n"
"\n";
@@ -921,7 +932,7 @@ const Feature s_features[] = {
{ "libz", "USE_ZLIB", "zlib", true, "zlib (compression) support" },
{ "mad", "USE_MAD", "libmad", true, "libmad (MP3) support" },
{ "vorbis", "USE_VORBIS", "libvorbisfile_static libvorbis_static libogg_static", true, "Ogg Vorbis support" },
- { "flac", "USE_FLAC", "libFLAC_static", true, "FLAC support" },
+ { "flac", "USE_FLAC", "libFLAC_static win_utf8_io_static", true, "FLAC support" },
{ "png", "USE_PNG", "libpng", true, "libpng support" },
{ "faad", "USE_FAAD", "libfaad", false, "AAC support" },
{ "mpeg2", "USE_MPEG2", "libmpeg2", false, "MPEG-2 support" },
@@ -1050,7 +1061,7 @@ bool producesObjectFile(const std::string &fileName) {
}
std::string toString(int num) {
- return static_cast<std::ostringstream*>(&(std::ostringstream() << num))->str();
+ return static_cast<std::ostringstream*>(&(std::ostringstream() << num))->str();
}
/**
diff --git a/devtools/create_project/msbuild.cpp b/devtools/create_project/msbuild.cpp
index 87c9066199..a326bd721a 100644
--- a/devtools/create_project/msbuild.cpp
+++ b/devtools/create_project/msbuild.cpp
@@ -55,9 +55,16 @@ int MSBuildProvider::getVisualStudioVersion() {
if (_version == 12)
return 2013;
+ if (_version == 14)
+ return 14;
+
error("Unsupported version passed to getVisualStudioVersion");
}
+int MSBuildProvider::getSolutionVersion() {
+ return (_version < 14) ? _version + 1 : _version;
+}
+
namespace {
inline void outputConfiguration(std::ostream &project, const std::string &config, const std::string &platform) {
@@ -116,7 +123,7 @@ void MSBuildProvider::createProjectFile(const std::string &name, const std::stri
// Shared configuration
project << "\t<Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.Default.props\" />\n";
- std::string version = "v" + toString(_version) + "0";
+ std::string version = "v" + toString(_version) + "0";
std::string llvm = "LLVM-vs" + toString(getVisualStudioVersion());
outputConfigurationType(setup, project, name, "Release|Win32", version);
@@ -177,6 +184,13 @@ void MSBuildProvider::createProjectFile(const std::string &name, const std::stri
project << "\t</ItemGroup>\n";
}
+ // Visual Studio 2015 automatically imports natvis files that are part of the project
+ if (name == PROJECT_NAME && _version == 14) {
+ project << "\t<ItemGroup>\n";
+ project << "\t\t<None Include=\"" << setup.srcDir << "/devtools/create_project/scripts/scummvm.natvis\" />\n";
+ project << "\t</ItemGroup>\n";
+ }
+
project << "\t<Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.targets\" />\n"
"\t<ImportGroup Label=\"ExtensionTargets\">\n"
"\t</ImportGroup>\n";
@@ -185,7 +199,7 @@ void MSBuildProvider::createProjectFile(const std::string &name, const std::stri
// We override the normal target to ignore the exit code (this allows us to have a clean output and not message about the command exit code)
project << "\t\t<Target Name=\"PostBuildEvent\">\n"
<< "\t\t\t<Message Text=\"Description: Run tests\" />\n"
- << "\t\t\t<Exec Command=\"$(TargetPath)\" IgnoreExitCode=\"true\" />\n"
+ << "\t\t\t<Exec Command=\"$(TargetPath)\" IgnoreExitCode=\"true\" />\n"
<< "\t\t</Target>\n";
}
@@ -305,6 +319,12 @@ void MSBuildProvider::outputProjectSettings(std::ofstream &project, const std::s
for (StringList::const_iterator i = setup.libraries.begin(); i != setup.libraries.end(); ++i)
libraries += *i + ".lib;";
+ if (_version == 14) {
+ std::string debug = isRelease ? "" : "d";
+ libraries += "libvcruntime" + debug + ".lib;";
+ libraries += "libucrt" + debug + ".lib;";
+ }
+
project << "\t\t<Link>\n"
"\t\t\t<OutputFile>$(OutDir)" << ((setup.devTools || setup.tests) ? name : setup.projectName) << ".exe</OutputFile>\n"
"\t\t\t<AdditionalDependencies>" << libraries << "%(AdditionalDependencies)</AdditionalDependencies>\n"
diff --git a/devtools/create_project/msbuild.h b/devtools/create_project/msbuild.h
index 829657beff..f92e68ede8 100644
--- a/devtools/create_project/msbuild.h
+++ b/devtools/create_project/msbuild.h
@@ -49,6 +49,7 @@ protected:
const char *getProjectExtension();
const char *getPropertiesExtension();
int getVisualStudioVersion();
+ int getSolutionVersion();
private:
struct FileEntry {
diff --git a/devtools/create_project/msvc.cpp b/devtools/create_project/msvc.cpp
index cdd2d8a7c1..dbfbcc128d 100644
--- a/devtools/create_project/msvc.cpp
+++ b/devtools/create_project/msvc.cpp
@@ -52,7 +52,7 @@ void MSVCProvider::createWorkspace(const BuildSetup &setup) {
if (!solution)
error("Could not open \"" + setup.outputDir + '/' + setup.projectName + ".sln\" for writing");
- solution << "Microsoft Visual Studio Solution File, Format Version " << _version + 1 << ".00\n";
+ solution << "Microsoft Visual Studio Solution File, Format Version " << getSolutionVersion() << ".00\n";
solution << "# Visual Studio " << getVisualStudioVersion() << "\n";
// Write main project
@@ -157,13 +157,17 @@ void MSVCProvider::createGlobalProp(const BuildSetup &setup) {
outputGlobalPropFile(setup, properties, 64, x64Defines, convertPathToWin(setup.filePrefix), setup.runBuildEvents);
}
+int MSVCProvider::getSolutionVersion() {
+ return _version + 1;
+}
+
std::string MSVCProvider::getPreBuildEvent() const {
std::string cmdLine = "";
cmdLine = "@echo off\n"
"echo Executing Pre-Build script...\n"
- "echo.\n"
- "@call &quot;$(SolutionDir)../../devtools/create_project/scripts/prebuild.cmd&quot; &quot;$(SolutionDir)/../..&quot; &quot;$(TargetDir)&quot;\n"
+ "echo.\n"
+ "@call &quot;$(SolutionDir)../../devtools/create_project/scripts/prebuild.cmd&quot; &quot;$(SolutionDir)/../..&quot; &quot;$(TargetDir)&quot;\n"
"EXIT /B0";
return cmdLine;
diff --git a/devtools/create_project/msvc.h b/devtools/create_project/msvc.h
index 3a3eb98034..e75e131bd1 100644
--- a/devtools/create_project/msvc.h
+++ b/devtools/create_project/msvc.h
@@ -83,6 +83,11 @@ protected:
virtual int getVisualStudioVersion() = 0;
/**
+ * Get the Solution version (used in the sln file header)
+ */
+ virtual int getSolutionVersion();
+
+ /**
* Get the command line for the revision tool (shared between all Visual Studio based providers)
*/
std::string getPreBuildEvent() const;
diff --git a/devtools/create_project/msvc14/create_project.sln b/devtools/create_project/msvc14/create_project.sln
new file mode 100644
index 0000000000..73f0b3569e
--- /dev/null
+++ b/devtools/create_project/msvc14/create_project.sln
@@ -0,0 +1,28 @@
+яЛП
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 14
+VisualStudioVersion = 14.0.22609.0
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "create_project", "create_project.vcxproj", "{CF177559-077D-4A08-AABE-BE0FD35F6C63}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Win32 = Debug|Win32
+ Debug|x64 = Debug|x64
+ Release|Win32 = Release|Win32
+ Release|x64 = Release|x64
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {CF177559-077D-4A08-AABE-BE0FD35F6C63}.Debug|Win32.ActiveCfg = Debug|Win32
+ {CF177559-077D-4A08-AABE-BE0FD35F6C63}.Debug|Win32.Build.0 = Debug|Win32
+ {CF177559-077D-4A08-AABE-BE0FD35F6C63}.Debug|x64.ActiveCfg = Debug|x64
+ {CF177559-077D-4A08-AABE-BE0FD35F6C63}.Debug|x64.Build.0 = Debug|x64
+ {CF177559-077D-4A08-AABE-BE0FD35F6C63}.Release|Win32.ActiveCfg = Release|Win32
+ {CF177559-077D-4A08-AABE-BE0FD35F6C63}.Release|Win32.Build.0 = Release|Win32
+ {CF177559-077D-4A08-AABE-BE0FD35F6C63}.Release|x64.ActiveCfg = Release|x64
+ {CF177559-077D-4A08-AABE-BE0FD35F6C63}.Release|x64.Build.0 = Release|x64
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/devtools/create_project/msvc14/create_project.vcxproj b/devtools/create_project/msvc14/create_project.vcxproj
new file mode 100644
index 0000000000..3c0345f49c
--- /dev/null
+++ b/devtools/create_project/msvc14/create_project.vcxproj
@@ -0,0 +1,223 @@
+яЛП<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{CF177559-077D-4A08-AABE-BE0FD35F6C63}</ProjectGuid>
+ <RootNamespace>create_project</RootNamespace>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <PlatformToolset>v140</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <PlatformToolset>v140</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ <PlatformToolset>v140</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ <PlatformToolset>v140</PlatformToolset>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(Configuration)\</IntDir>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(Configuration)\</IntDir>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <WarningLevel>Level4</WarningLevel>
+ <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+ <DisableLanguageExtensions>false</DisableLanguageExtensions>
+ <DisableSpecificWarnings>4003;4512;4127</DisableSpecificWarnings>
+ <ExceptionHandling>Sync</ExceptionHandling>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>Rpcrt4.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <TargetMachine>MachineX86</TargetMachine>
+ <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
+ </Link>
+ <PostBuildEvent>
+ <Command>@echo off
+xcopy /Y "$(TargetPath)" "$(SolutionDir)\..\..\..\dists\msvc14\"
+xcopy /Y "$(TargetPath)" "$(SolutionDir)\..\..\..\dists\msvc12\"
+xcopy /Y "$(TargetPath)" "$(SolutionDir)\..\..\..\dists\msvc11\"
+xcopy /Y "$(TargetPath)" "$(SolutionDir)\..\..\..\dists\msvc10\"
+xcopy /Y "$(TargetPath)" "$(SolutionDir)\..\..\..\dists\msvc9\"
+xcopy /Y "$(TargetPath)" "$(SolutionDir)\..\..\..\dists\msvc8\"
+xcopy /Y "$(TargetPath)" "$(SolutionDir)\..\..\..\dists\codeblocks\"
+xcopy /Y "$(TargetPath)" "$(SolutionDir)\..\..\..\dists\iphone\"</Command>
+ </PostBuildEvent>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <WarningLevel>Level4</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ <DisableLanguageExtensions>false</DisableLanguageExtensions>
+ <DisableSpecificWarnings>4003;4512;4127</DisableSpecificWarnings>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>Rpcrt4.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
+ </Link>
+ <PostBuildEvent>
+ <Command>@echo off
+xcopy /Y "$(TargetPath)" "$(SolutionDir)\..\..\..\dists\msvc14\"
+xcopy /Y "$(TargetPath)" "$(SolutionDir)\..\..\..\dists\msvc12\"
+xcopy /Y "$(TargetPath)" "$(SolutionDir)\..\..\..\dists\msvc11\"
+xcopy /Y "$(TargetPath)" "$(SolutionDir)\..\..\..\dists\msvc10\"
+xcopy /Y "$(TargetPath)" "$(SolutionDir)\..\..\..\dists\msvc9\"
+xcopy /Y "$(TargetPath)" "$(SolutionDir)\..\..\..\dists\msvc8\"
+xcopy /Y "$(TargetPath)" "$(SolutionDir)\..\..\..\dists\codeblocks\"
+xcopy /Y "$(TargetPath)" "$(SolutionDir)\..\..\..\dists\iphone\"</Command>
+ </PostBuildEvent>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <Optimization>MaxSpeed</Optimization>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ <DisableSpecificWarnings>4003;4512;4127</DisableSpecificWarnings>
+ <SDLCheck>true</SDLCheck>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>Rpcrt4.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ <PostBuildEvent>
+ <Command>@echo off
+xcopy /Y "$(TargetPath)" "$(SolutionDir)\..\..\..\dists\msvc14\"
+xcopy /Y "$(TargetPath)" "$(SolutionDir)\..\..\..\dists\msvc12\"
+xcopy /Y "$(TargetPath)" "$(SolutionDir)\..\..\..\dists\msvc11\"
+xcopy /Y "$(TargetPath)" "$(SolutionDir)\..\..\..\dists\msvc10\"
+xcopy /Y "$(TargetPath)" "$(SolutionDir)\..\..\..\dists\msvc9\"
+xcopy /Y "$(TargetPath)" "$(SolutionDir)\..\..\..\dists\msvc8\"
+xcopy /Y "$(TargetPath)" "$(SolutionDir)\..\..\..\dists\codeblocks\"
+xcopy /Y "$(TargetPath)" "$(SolutionDir)\..\..\..\dists\iphone\"</Command>
+ </PostBuildEvent>
+ <PreBuildEvent>
+ <Command>
+ </Command>
+ </PreBuildEvent>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <ClCompile>
+ <Optimization>MaxSpeed</Optimization>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ <DisableSpecificWarnings>4003;4512;4127</DisableSpecificWarnings>
+ <SDLCheck>true</SDLCheck>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>Rpcrt4.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ </Link>
+ <PostBuildEvent>
+ <Command>@echo off
+xcopy /Y "$(TargetPath)" "$(SolutionDir)\..\..\..\dists\msvc14\"
+xcopy /Y "$(TargetPath)" "$(SolutionDir)\..\..\..\dists\msvc12\"
+xcopy /Y "$(TargetPath)" "$(SolutionDir)\..\..\..\dists\msvc11\"
+xcopy /Y "$(TargetPath)" "$(SolutionDir)\..\..\..\dists\msvc10\"
+xcopy /Y "$(TargetPath)" "$(SolutionDir)\..\..\..\dists\msvc9\"
+xcopy /Y "$(TargetPath)" "$(SolutionDir)\..\..\..\dists\msvc8\"
+xcopy /Y "$(TargetPath)" "$(SolutionDir)\..\..\..\dists\codeblocks\"
+xcopy /Y "$(TargetPath)" "$(SolutionDir)\..\..\..\dists\iphone\"</Command>
+ </PostBuildEvent>
+ <PreBuildEvent>
+ <Command>
+ </Command>
+ </PreBuildEvent>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="..\codeblocks.cpp" />
+ <ClCompile Include="..\create_project.cpp" />
+ <ClCompile Include="..\msbuild.cpp" />
+ <ClCompile Include="..\msvc.cpp" />
+ <ClCompile Include="..\visualstudio.cpp" />
+ <ClCompile Include="..\xcode.cpp" />
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="..\codeblocks.h" />
+ <ClInclude Include="..\config.h" />
+ <ClInclude Include="..\create_project.h" />
+ <ClInclude Include="..\msbuild.h" />
+ <ClInclude Include="..\msvc.h" />
+ <ClInclude Include="..\visualstudio.h" />
+ <ClInclude Include="..\xcode.h" />
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="..\scripts\installer.vbs" />
+ <None Include="..\scripts\postbuild.cmd" />
+ <None Include="..\scripts\prebuild.cmd" />
+ <None Include="..\scripts\revision.vbs" />
+ </ItemGroup>
+ <ItemGroup>
+ <Natvis Include="..\scripts\scummvm.natvis" />
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/devtools/create_project/msvc14/create_project.vcxproj.filters b/devtools/create_project/msvc14/create_project.vcxproj.filters
new file mode 100644
index 0000000000..16c6df081d
--- /dev/null
+++ b/devtools/create_project/msvc14/create_project.vcxproj.filters
@@ -0,0 +1,76 @@
+яЛП<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <Filter Include="Header Files">
+ <UniqueIdentifier>{2e3580c8-ec3a-4c81-8351-b668c668db2a}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="Source Files">
+ <UniqueIdentifier>{31aaf58c-d3cb-4ed6-8eca-163b4a9b31a6}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="scripts">
+ <UniqueIdentifier>{f980f6fb-41b6-4161-b035-58b200c85cad}</UniqueIdentifier>
+ </Filter>
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="..\codeblocks.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\create_project.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\msvc.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\msbuild.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\visualstudio.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\xcode.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\config.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="..\codeblocks.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\create_project.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\msvc.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\msbuild.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\visualstudio.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\xcode.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="..\scripts\prebuild.cmd">
+ <Filter>scripts</Filter>
+ </None>
+ <None Include="..\scripts\revision.vbs">
+ <Filter>scripts</Filter>
+ </None>
+ <None Include="..\scripts\postbuild.cmd">
+ <Filter>scripts</Filter>
+ </None>
+ <None Include="..\scripts\installer.vbs">
+ <Filter>scripts</Filter>
+ </None>
+ </ItemGroup>
+ <ItemGroup>
+ <Natvis Include="..\scripts\scummvm.natvis">
+ <Filter>scripts</Filter>
+ </Natvis>
+ </ItemGroup>
+</Project> \ No newline at end of file
diff --git a/devtools/create_project/visualstudio.cpp b/devtools/create_project/visualstudio.cpp
index 9b928bf520..96fdbdf27a 100644
--- a/devtools/create_project/visualstudio.cpp
+++ b/devtools/create_project/visualstudio.cpp
@@ -230,7 +230,7 @@ void VisualStudioProvider::outputGlobalPropFile(const BuildSetup &setup, std::of
"\t\tDisableSpecificWarnings=\"" << warnings << "\"\n"
"\t\tAdditionalIncludeDirectories=\".\\;" << prefix << ";" << prefix << "\\engines;$(" << LIBS_DEFINE << ")\\include;$(" << LIBS_DEFINE << ")\\include\\SDL;" << (setup.tests ? prefix + "\\test\\cxxtest;" : "") << "$(TargetDir)\"\n"
"\t\tPreprocessorDefinitions=\"" << definesList << "\"\n"
- "\t\tExceptionHandling=\"" << ((setup.devTools || setup.tests) ? "1" : "0") << "\"\n";
+ "\t\tExceptionHandling=\"" << ((setup.devTools || setup.tests || _version == 14) ? "1" : "0") << "\"\n";
#if NEEDS_RTTI
properties << "\t\tRuntimeTypeInfo=\"true\"\n";
diff --git a/devtools/credits.pl b/devtools/credits.pl
index 41c2d4f162..f5d8542ae8 100755
--- a/devtools/credits.pl
+++ b/devtools/credits.pl
@@ -552,12 +552,21 @@ begin_credits("Credits");
add_person("Oliver Kiehl", "olki", "(retired)");
add_person("Ludvig Strigeus", "ludde", "(retired)");
end_section();
-
+
+ begin_section("Access");
+ add_person("Arnaud Boutonn&eacute;", "Strangerke", "");
+ add_person("Paul Gilbert", "dreammaster", "");
+ end_section();
+
begin_section("Avalanche");
add_person("Peter Bozs&oacute;", "uruk", "");
add_person("Arnaud Boutonn&eacute;", "Strangerke", "");
end_section();
+ begin_section("BBVS");
+ add_person("Benjamin Haisch", "john_doe", "");
+ end_section();
+
begin_section("CGE");
add_person("Arnaud Boutonn&eacute;", "Strangerke", "");
add_person("Paul Gilbert", "dreammaster", "");
@@ -710,6 +719,11 @@ begin_credits("Credits");
add_person("Lars Skovlund", "lskovlun", "");
end_section();
+ begin_section("Sherlock");
+ add_person("Paul Gilbert", "dreammaster", "");
+ add_person("Martin Kiewitz", "m_kiewitz", "");
+ end_section();
+
begin_section("Sky");
add_person("Robert G&ouml;ffringmann", "lavosspawn", "(retired)");
add_person("Oliver Kiehl", "olki", "(retired)");
@@ -877,6 +891,10 @@ begin_credits("Credits");
add_person("Andre Heider", "dhewg", "");
end_section();
+ begin_section("Raspberry Pi");
+ add_person("Manuel Alfayate", "vanfanel", "");
+ end_section();
+
end_section();
begin_section("Other subsystems");
@@ -1286,6 +1304,11 @@ begin_credits("Credits");
"Bob Bell, Michel Kripalani, Tommy Yune, from Presto Studios for ".
"providing the source code of The Journeyman Project: Pegasus Prime.");
+ add_paragraph(
+ "Electronic Arts IP Preservation Team, particularly Stefan Serbicki, and Vasyl Tsvirkunov of ".
+ "Electronic Arts for providing the source code of the two Lost Files of Sherlock Holmes games. ".
+ "James M. Ferguson and Barry Duncan for their tenacious efforts to recover the sources.");
+
end_section();
end_credits();
diff --git a/devtools/dist-scummvm.sh b/devtools/dist-scummvm.sh
index ac411c55a3..56e6b4e05e 100755
--- a/devtools/dist-scummvm.sh
+++ b/devtools/dist-scummvm.sh
@@ -4,6 +4,7 @@
#
# Largely based on dist-fink.sh, Copyright (c) 2001 Christoph Pfisterer.
# Modified to use Subversion instead of CVS by Max Horn in 2007.
+# Modified to use git by Eugene Sandulenko in 2015.
#
# ScummVM is the legal property of its developers, whose names
# are too numerous to list here. Please refer to the COPYRIGHT
@@ -26,25 +27,44 @@
### configuration
-svnroot='https://scummvm.svn.sourceforge.net/svnroot/scummvm'
+scummvmrepo='https://github.com/scummvm/scummvm.git'
+toolsrepo='https://github.com/scummvm/scummvm-tools.git'
### init
if [ $# -lt 2 ]; then
- echo "Usage: $0 <module> <version-number> [<temporary-directory> [<tag>]]"
+ echo "Usage: $0 <scummvm | scummvm-tools> <version-number> [<temporary-directory> [<tag>]]"
exit 1
fi
+echo_n() {
+ printf "$@"
+}
+
module=$1
version=$2
tmpdir=${3:-/tmp}
tag=$4
if [ -z "$tag" ]; then
- tag=release-`echo $version | sed 's/\./-/g'`
+ tag="v$version"
fi
fullname="$module-$version"
-echo "packaging $module release $version, SVN tag $tag"
+# Check modules
+case $module in
+scummvm)
+ gitrepo=$scummvmrepo
+;;
+scummvm-tools)
+ gitrepo=$toolsrepo
+;;
+*)
+ echo "Unknown module $module. Only scummvm or scummvm-tools are supported"
+ exit 1
+esac
+
+
+echo "packaging $module release $version, GIT tag $tag"
### setup temp directory
@@ -54,25 +74,39 @@ umask 022
if [ -d $fullname ]; then
echo "There is a left-over directory in $tmpdir."
- echo "Remove $fullname, then try again."
+ echo "Remove $tmpdir/$fullname, then try again."
exit 1
fi
-### check code out from SVN
-# TODO: Add support for making tarballs from trunk / branches?
+### check code out from GIT
-echo "Exporting module $module, tag $tag from SVN:"
-svn export "$svnroot/$module/tags/$tag" $fullname
+echo "Cloning module $module from GIT:"
+git clone $gitrepo $fullname
if [ ! -d $fullname ]; then
- echo "SVN export failed, directory $fullname doesn't exist!"
+ echo "GIT clone failed, directory $fullname doesn't exist!"
exit 1
fi
+cd $tmpdir/$fullname
+
+echo_n "Checking out tag $tag..."
+if git checkout $tag --quiet 2>/dev/null; then
+ echo done
+else
+ echo "checking out tag $tag failed."
+ exit 1
+fi
+
+cd $tmpdir
+
+echo "Cleaning up .git directory"
+rm -rf $fullname/.git
+
### roll the tarball
-echo "Creating tarball $fullname.tar:"
+echo "Creating tarball $fullname.tar..."
rm -f $fullname.tar $fullname.tar.gz
-tar -cvf $fullname.tar $fullname
+tar -cf $fullname.tar $fullname
echo "Compressing (using gzip) tarball $fullname.tar.gz..."
gzip -c9 $fullname.tar > $fullname.tar.gz
@@ -88,8 +122,15 @@ if [ ! -f $fullname.tar.bz2 ]; then
exit 1
fi
+echo "Compressing (using xz) tarball $fullname.tar.xz..."
+xz -c9 $fullname.tar > $fullname.tar.xz
+if [ ! -f $fullname.tar.xz ]; then
+ echo "Packaging to xz failed, $fullname.tar.xz doesn't exist!"
+ # But do not exit
+fi
+
echo "Zipping $fullname.zip..."
-zip -r9 $fullname.zip $fullname
+zip -r9 $fullname.zip $fullname >/dev/null
if [ ! -f $fullname.zip ]; then
echo "Packaging failed, $fullname.zip doesn't exist!"
exit 1
@@ -99,6 +140,7 @@ fi
### finish up
echo "Done:"
-ls -l $fullname.tar.gz $fullname.tar.bz2 $fullname.zip
+ls -l $fullname.tar.gz $fullname.tar.bz2 $fullname.tar.xz $fullname.zip
+md5sum $fullname.tar.gz $fullname.tar.bz2 $fullname.tar.xz $fullname.zip
exit 0
diff --git a/devtools/scumm-md5.txt b/devtools/scumm-md5.txt
index ffde276a3d..f4301ad0a3 100644
--- a/devtools/scumm-md5.txt
+++ b/devtools/scumm-md5.txt
@@ -492,8 +492,9 @@ freddi Freddi Fish 1: The Case of the Missing Kelp Seeds
5ebb57234b2fe5c5dff641e00184ad81 -1 fr Windows HE 73 - - gist974
cf8ef3a1fb483c5c4b1c584d1167b2c4 -1 de Windows HE 73 - - Oncer
1f2e62b5a9c50589fc342285a6bb3a27 -1 he Windows HE 73 - - e_orz
+ 64a22be96d679018696e5c8d3ca8b71d 26375 jp Windows HE 73 - - sev
507bb360688dc4180fdf0d7597352a69 26402 se Windows HE 73 - - Sven Arvidsson
- df047cc4792150f601290357566d36a6 -1 us All HE 90 Updated - khalek
+ df047cc4792150f601290357566d36a6 -1 en All HE 90 Updated - khalek
e44ea295a3f8fe4f41983080dab1e9ce -1 fr Mac HE 90 Updated - ThierryFR
746e88c172a5b7a1ae89ac0ee3ee681a -1 ru Windows HE 90 Updated - sev
a197a87ae77f3b3333f09a7a2c448fe2 -1 en Windows HE 99 Updated - Jonathan
@@ -522,9 +523,9 @@ freddi2 Freddi Fish 2: The Case of the Haunted Schoolhouse
5057fb0e99e5aa29df1836329232f101 -1 All Windows HE 80 - - sev
ac62d50e39492ee3738b4e83a5ac780f -1 nl Windows HE 80 - - joostp
151071053a1d0021198216713939521d -1 en Windows HE 80 - - vampir_raziel
- 51305e929e330e24a75a0351c8f9975e -1 us All HE 99 Updated - Kirben
+ 51305e929e330e24a75a0351c8f9975e -1 en All HE 99 Updated - Kirben
9c0ee9c252785e9fca0143e42ac4b256 -1 de Windows HE 99 Updated - George Kormendi
- 8ee63cafb1fe9d62aa0d5a23117e70e7 -1 us All HE 100 Updated - Kirben
+ 8ee63cafb1fe9d62aa0d5a23117e70e7 -1 en All HE 100 Updated - Kirben
e41de1c2a15abbcdbf9977e2d7e8a340 -1 ru Windows HE 100 Updated - sev
c20848f53c2d48bfacdc840993843765 -1 nl All HE 80 Demo - DarthBo
@@ -532,7 +533,7 @@ freddi2 Freddi Fish 2: The Case of the Haunted Schoolhouse
d37c55388294b66e53e7ced3af88fa68 -1 en All HE 100 Updated Demo - khalek
freddi3 Freddi Fish 3: The Case of the Stolen Conch Shell
- 8368f552b1e3eba559f8d559bcc4cadb -1 All All - - - Kirben, sev
+ 8368f552b1e3eba559f8d559bcc4cadb 55959 All All - - - Kirben, sev (US and ???)
0cccfa5223099a60e76cfcca57a1a141 -1 nl All - - - adutchguy, daniel9
008e76ec3ae58d0add637ea7aa299a2c -1 fr Mac - - - ThierryFR
898ce8eb1234a955ef75e87141902bb3 -1 ru Windows - - - sev
@@ -550,7 +551,7 @@ freddi3 Freddi Fish 3: The Case of the Stolen Conch Shell
d73c851b942af44deb9b6d5f416a0972 -1 he Windows HE 99 Demo - Ori Avtalion
freddi4 Freddi Fish 4: The Case of the Hogfish Rustlers of Briny Gulch
- 4f580a021eee026f3b4589e17d130d78 -1 All All - - - Kirben, sev
+ 4f580a021eee026f3b4589e17d130d78 44190 All All - - - Kirben, sev (US and ???)
14d48c95b43ddeb983254cf6c43851f1 -1 nl All - - - adutchguy, daniel9
3b832f4a90740bf22e9b8ed42ca0128c -1 gb All HE 99 - - Reckless
d74122362a77ec24525fdd50297dfd82 -1 fr Mac - - - ThierryFR
@@ -580,7 +581,7 @@ freddi4 Freddi Fish 4: The Case of the Hogfish Rustlers of Briny Gulch
47e041521d35c7a801bb1c010d84da9d -1 it Windows HE 99 Demo - Kirben
freddicove Freddi Fish 5: The Case of the Creature of Coral Cove
- 590e6546aacd0d374b7f3a4f53013ab1 -1 All All - - - cyx
+ 590e6546aacd0d374b7f3a4f53013ab1 41165 All All - - - cyx (US and ???)
21abe302e1b1e2b66d6f5c12e241ebfd -1 ru Windows unenc Unencrypted - sev
b8955d7d23b4972229060d1592489fef -1 nl All HE 100 - - adutchguy, daniel9
8f345db2f3f5a25ed6305001957e6f72 41182 nl All HE 100 - - Ben Castricum
@@ -650,12 +651,12 @@ moonbase Moonbase Commander
ef71a322b6530ac45b1a070f7c0795f7 -1 en Windows Demo Demo - Kirben
pajama Pajama Sam 1: No Need to Hide When It's Dark Outside
- 672dec94b82f7f0877ebb5b5cf7f4bc1 -1 us All - - - khalek
+ 672dec94b82f7f0877ebb5b5cf7f4bc1 -1 en All - - - khalek
1d7a2e1ddcade791e2de0cfceac86725 -1 fr All - - - gist974, ThierryFR
4fa6870d9bc8c313b65d54b1da5a1891 -1 nl All - - - joostp
a095e33061606d231ff37dca4c64c8ac -1 de All HE 99 - - Joachim Eberhard
898eaa21f79cf8d4f08db856244689ff 66505 en Windows HE 99 Updated - Joachim Eberhard
- 37aed3f91c1ef959e0bd265f9b13781f -1 us All HE 100 Updated - Kirben
+ 37aed3f91c1ef959e0bd265f9b13781f 66599 en All HE 100 Updated - Kirben
4aa93cb30e485b728504ba3a693f12bf -1 ru Windows HE 100 - - sev
782393c5934ecd0b536eaf5fd541bd26 -1 en Windows HE 101 Updated - Jonathan
c225bec1b6c0798a2b8c89ac226dc793 -1 en Wii HE 101 - - sanguinehearts
@@ -765,14 +766,14 @@ puttmoon Putt-Putt Goes to the Moon
puttcircus Putt-Putt Joins the Circus
ecc4340c2b801f5af8da4e00c0e432d9 -1 nl All - - - daniel9
- ab0693e9324cfcf498fdcbb12acf8bb4 -1 en All - - - sev
+ ab0693e9324cfcf498fdcbb12acf8bb4 36655 us All - - - sev
7bad72e332a59f9fcc1d437f4edad32a -1 ru All - - - sev
db74136c20557eca6ed3411bff39f7a1 -1 gb Windows - - - Reckless
d0ad929def3e9cfe39dea55bd12098d4 -1 fr Windows - - - gist974
febf4a983ea5faea1c9dd6c710ebb09c -1 de Windows - - - andy482
c8253da0f4626d2236b5291b99e33408 -1 he Windows HE 99 - - Matan Bareket
- a7cacad9c40c4dc9e1812abf6c8af9d5 -1 en All - Demo - Kirben, sev
+ a7cacad9c40c4dc9e1812abf6c8af9d5 -1 us All - Demo - Kirben, sev
1387d16aa620dc1c2d1fd87f8a9e7a09 -1 fr Windows - Demo - Mevi
3af61c5edf8e15b43dbafd285b2e9777 -1 he Windows - Demo - Ori Avtalion
@@ -799,7 +800,7 @@ puttzoo Putt-Putt Saves the Zoo
9781422e4288dbc090720e4563168ba7 -1 fr Windows - - - gist974
0f9d3317910ac7a9f449243118884ada 42070 de Windows - - - George Kormendi
92e7727e67f5cd979d8a1070e4eb8cb3 -1 en All HE 98.5 Updated - cyx
- 3a3e592b074f595489f7f11e150c398d -1 us Windows HE 99 Updated - Adrian
+ 3a3e592b074f595489f7f11e150c398d -1 en Windows HE 99 Updated - Adrian
c5cc7cba02a2fbd539c4439e775b0536 43470 de Windows HE 99 Updated - Lightkey
5c9cecbd2952ccec14c9ecebf5822a34 -1 en iOS HE 100 - - clone2727
7b4ee071eecadc2d8cd0c3509110825c -1 en Windows HE 100 Remastered - Kirben
@@ -815,7 +816,7 @@ puttzoo Putt-Putt Saves the Zoo
PuttTime Putt-Putt Travels Through Time
fcb78ebecab2757264c590890c319cc5 -1 nl All HE 85 - - adutchguy, daniel9
- 63fdcdc95cdeea00060883aed38e5504 -1 en All HE 85 - - iziku
+ 63fdcdc95cdeea00060883aed38e5504 62582 us All HE 85 - - iziku
db21a6e338fe3b70c2723b6530865bf2 -1 fr All HE 85 - - gist974, ThierryFR
84e3c23a49ded8a6f9197735c8eb3de7 -1 de Windows HE 85 - - oncer
2108d83dcf09f8adb4bc524669c8cf51 -1 us All HE 99 Updated - Kirben
@@ -840,9 +841,9 @@ balloon Putt-Putt and Pep's Balloon-O-Rama
bab0fb81dcb12b8930c5d850b8f2a7de 12800 de Windows HE 80 - - George Kormendi
145bd3373574feb668cc2eea2ec6cf86 -1 ru Windows HE 80 - - sev
27b2ef1653089fe5b897d9cc89ce784f -1 ru Windows HE 80 - - George Kormendi
- 2232b0b9411575b1f9961713ebc9de61 -1 nl Windows HE 80 - - Ben Castricum
- a22af0ad0e3126d19d22707b0267a37d -1 nl Windows HE 80 - - Ben Castricum
- a56a05c6b865b9956639f8c51269e5ab -1 nl Mac HE 80 - - Ben Castricum
+ 2232b0b9411575b1f9961713ebc9de61 12800 nl Windows HE 80 - - Ben Castricum
+ a22af0ad0e3126d19d22707b0267a37d 12800 nl Windows HE 80 - - Ben Castricum
+ a56a05c6b865b9956639f8c51269e5ab 12800 nl Mac HE 80 - - Ben Castricum
d7b247c26bf1f01f8f7daf142be84de3 -1 en Windows HE 99 Updated - iziku
8e3241ddd6c8dadf64305e8740d45e13 -1 en All HE 100 Updated - Kirben
@@ -869,40 +870,40 @@ PuttsFunShop Putt-Putt's One-Stop Fun Shop
5262a27afcaee04e5c4900220bd463e7 -1 us All - - - Kirben
spyfox SPY Fox 1: Dry Cereal
- 6bf70eee5de3d24d2403e0dd3d267e8a 49221 All Windows - - - khalek
+ 6bf70eee5de3d24d2403e0dd3d267e8a 49221 All Windows - - - khalek (US and ???)
100b4c8403ad6a83d4bf7dbf83e44dc4 -1 fr Windows - - - gist974
9bda5fee51d2fda5253d02c642016bf4 -1 nl All HE 98.5 - - daniel9, joostp
- 58436e634f4fae1d9973591c2ffa1fcb -1 en All HE 99 Updated - Joachim Eberhard
+ 58436e634f4fae1d9973591c2ffa1fcb -1 en All HE 99 Updated - Joachim Eberhard (GB or US?)
a28135a7ade38cc0208b04507c46efd1 -1 de All HE 99 - - nachbarnebenan
ee785fe2569bc9965526e774f7ab86f1 -1 fr Mac HE 99 - - ThierryFR
76b66b43e593ad4d2f1dfb5cc8f19700 -1 nl Windows HE 99 - - sugarcube
72ac6bc980d5101c2142189d746bd62f -1 ru Windows HE 99 - - sev
3de99ef0523f8ca7958faa3afccd035a -1 us All HE 100 Updated - Kirben
- 23394c8d29cc63c61313959431a12476 -1 en Windows HE 100 Updated - Jonathan
- 50b831f11b8c4b83784cf81f4dcc69ea -1 en Wii HE 101 - - sanguinehearts
- 15878e3bee2e1e759184abee98589eaa -1 en iOS HE 100 - - clone2727
+ 23394c8d29cc63c61313959431a12476 -1 en Windows HE 100 Updated - Jonathan (GB or US?)
+ 50b831f11b8c4b83784cf81f4dcc69ea -1 en Wii HE 101 - - sanguinehearts (GB or US?)
+ 15878e3bee2e1e759184abee98589eaa -1 en iOS HE 100 - - clone2727 (GB or US?)
- 53e94115b55dd51d4b8ff0871aa1df1e 20103 en All - Demo - khalek, sev
- fbdd947d21e8f5bac6d6f7a316af1c5a 15693 en All - Demo - sev
+ 53e94115b55dd51d4b8ff0871aa1df1e 20103 us All - Demo - khalek, sev
+ fbdd947d21e8f5bac6d6f7a316af1c5a 15693 us All - Demo - sev
ba888e6831517597859e91aa173f945c -1 fr All - Demo - Kirben
73b8197e236da4bf49adc99fe8f5fa1b -1 de All - Demo - Joachim Eberhard
4edbf9d03550f7ba01e7f34d69b678dd -1 nl All HE 98.5 Demo - Kirben
- f2ec78e50bdc63b70044e9758be10914 -1 nl Mac HE 98.5 Demo - Ben Castricum
- 9d4ab3e0e1d1ebc6ba8a6a4c470ed184 -1 en All HE 100 Demo - khalek
+ f2ec78e50bdc63b70044e9758be10914 20141 nl Mac HE 98.5 Demo - Ben Castricum
+ 9d4ab3e0e1d1ebc6ba8a6a4c470ed184 15943 us All HE 100 Demo - khalek
spyfox2 SPY Fox 2: Some Assembly Required
- f79e60c17cca601e411f1f75e8ee9b5a 51286 All All - - - Kirben
+ f79e60c17cca601e411f1f75e8ee9b5a 51286 All All - - - Kirben (US and ???)
90e2f0af4f779629695c6394a65bb702 -1 fr All - - - gist974, ThierryFR
bc4700bc0e12879f6d25d14d6be6cfdd -1 de All - - - Joachim Eberhard
3785fd25f7e02b5782bfc5072d8f77c8 -1 it All - - - Saleck
cea91e3dd47f2518ea418e41611aa77f -1 ru All - - - sev
- 9fd66fb3b04703bd50da4356e4202558 51295 en Mac - - - pix_climber
+ 9fd66fb3b04703bd50da4356e4202558 51295 en Mac - - - pix_climber (GB or US?)
71fe97c3108678cf604f14abe342341b 51286 nl All - - - adutchguy
1c792d28376d45e145cb916bca0400a2 -1 nl All - Demo - joostp
7222f260253f325c21fcfa68b5bfab67 -1 us All - Demo - Kirben
732845548b1d6c2da572cb6a1bf81b07 -1 de All - Demo - Joachim Eberhard
- e62056ba675ad65d8854ab3c5ad4b3c0 14689 en Windows - Mini Game - Trekky
+ e62056ba675ad65d8854ab3c5ad4b3c0 14689 gb Windows - Mini Game - Trekky
22c7432dc97a821fcfccd480e93e3911 14689 nl Windows - Mini Game - Ben Castricum
6b10c9977cad9de503642059359792b1 14689 fr Windows - Mini Game - Ben Castricum
9684c161258d68e0d464d6cab7024b9c 14689 it Windows - Mini Game - Ben Castricum
@@ -919,7 +920,7 @@ spyozon SPY Fox 3: Operation Ozone
7015b059ab72cff3a0ef9fb4d5e9889d -1 de Windows - - - andy482
be39a5d4db60e8aa736b9086778cb45c -1 gb Windows - - -
- ebd0b2c8a387f18887282afe6cad894a 15317 en All - Demo - Kirben
+ ebd0b2c8a387f18887282afe6cad894a 15317 us All - Demo - Kirben
a99c39ba65b6086be28aef576da69595 -1 fr Windows - Demo - Mevi
65563295c3a06493351870f20a1630cf 5235008 All All HE CUP Preview - sev
diff --git a/dists/engine-data/kyra.dat b/dists/engine-data/kyra.dat
index 3ad01b868f..1b42cfbadc 100644
--- a/dists/engine-data/kyra.dat
+++ b/dists/engine-data/kyra.dat
Binary files differ
diff --git a/dists/engine-data/mort.dat b/dists/engine-data/mort.dat
index 0d6a44206d..49d80b3922 100644
--- a/dists/engine-data/mort.dat
+++ b/dists/engine-data/mort.dat
Binary files differ
diff --git a/dists/engine-data/testbed-audiocd-files/TESTBED b/dists/engine-data/testbed-audiocd-files/TESTBED
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/dists/engine-data/testbed-audiocd-files/TESTBED
diff --git a/dists/msvc14/create_msvc14.bat b/dists/msvc14/create_msvc14.bat
new file mode 100644
index 0000000000..7082ac9680
--- /dev/null
+++ b/dists/msvc14/create_msvc14.bat
@@ -0,0 +1,105 @@
+@echo off
+
+echo.
+echo Automatic creation of the MSVC14 project files
+echo.
+
+if "%~1"=="/stable" goto stable
+if "%~1"=="/STABLE" goto stable
+if "%~1"=="/all" goto all
+if "%~1"=="/ALL" goto all
+if "%~1"=="/tools" goto tools
+if "%~1"=="/TOOLS" goto tools
+if "%~1"=="/tests" goto tests
+if "%~1"=="/TESTS" goto tests
+if "%~1"=="/clean" goto clean_check
+if "%~1"=="/CLEAN" goto clean_check
+if "%~1"=="/help" goto command_help
+if "%~1"=="/HELP" goto command_help
+if "%~1"=="/?" goto command_help
+
+if "%~1"=="" goto check_tool
+
+echo Invalid command parameter: %~1
+echo.
+
+:command_help
+echo Valid command parameters are:
+echo stable Generated stable engines project files
+echo all Generate all engines project files
+echo tools Generate project files for the devtools
+echo clean Clean generated project files
+echo help Show help message
+goto done
+
+:check_tool
+if not exist create_project.exe goto no_tool
+
+:question
+echo.
+set batchanswer=S
+set /p batchanswer="Enable stable engines only, or all engines? (S/a)"
+if "%batchanswer%"=="s" goto stable
+if "%batchanswer%"=="S" goto stable
+if "%batchanswer%"=="a" goto all
+if "%batchanswer%"=="A" goto all
+goto question
+
+:no_tool
+echo create_project.exe not found in the current folder.
+echo You need to build it first and copy it in this
+echo folder
+goto done
+
+:all
+echo.
+echo Creating project files with all engines enabled (stable and unstable)
+echo.
+create_project ..\.. --enable-all-engines --msvc --msvc-version 14 --build-events
+goto done
+
+:stable
+echo.
+echo Creating normal project files, with only the stable engines enabled
+echo.
+create_project ..\.. --msvc --msvc-version 14
+goto done
+
+:tools
+echo.
+echo Creating tools project files
+echo.
+create_project ..\.. --tools --msvc --msvc-version 14
+goto done
+
+:tests
+echo.
+echo Creating tests project files
+echo.
+create_project ..\.. --tests --msvc --msvc-version 14
+goto done
+
+:clean_check
+echo.
+set cleananswer=N
+set /p cleananswer="This will remove all project files. Are you sure you want to continue? (N/y)"
+if "%cleananswer%"=="n" goto done
+if "%cleananswer%"=="N" goto done
+if "%cleananswer%"=="y" goto clean
+if "%cleananswer%"=="Y" goto clean
+goto clean_check
+
+:clean
+echo.
+echo Removing all project files
+del /Q *.vcxproj* > NUL 2>&1
+del /Q *.props > NUL 2>&1
+del /Q *.sln* > NUL 2>&1
+del /Q scummvm* > NUL 2>&1
+del /Q devtools* > NUL 2>&1
+del /Q test_runner.cpp > NUL 2>&1
+goto done
+
+:done
+echo.
+pause
diff --git a/dists/msvc14/readme.txt b/dists/msvc14/readme.txt
new file mode 100644
index 0000000000..3d16c7b20b
--- /dev/null
+++ b/dists/msvc14/readme.txt
@@ -0,0 +1,6 @@
+The Visual Studio project files can now be created automatically from the GCC
+files using the create_project tool inside the /devtools/create_project folder.
+
+To create the default project files, build create_project.exe, copy it inside
+this folder and run the create_msvc14.bat file for a default build. You can run
+create_project.exe with no parameters to check the possible command-line options.
diff --git a/doc/de/Neues b/doc/de/Neues
index 2b67913359..3d155be825 100644
--- a/doc/de/Neues
+++ b/doc/de/Neues
@@ -17,7 +17,7 @@ Sie auf Englisch unter:
AGI:
- Es ist nun mУЖglich, die Maus-UnterstУМtzung zu deaktivieren (auУŸer bei
-Amiga-Versionen und Fan-Spielen, die eine Maus benУЖtigen).
+ Amiga-Versionen und Fan-Spielen, die eine Maus benУЖtigen).
- Fehlerhafte LautstУЄrke-DУЄmpfung im PCjr-Sound-Code behoben (Fehler #6858).
AGOS:
@@ -26,6 +26,8 @@ Amiga-Versionen und Fan-Spielen, die eine Maus benУЖtigen).
- Verb-Feld in der Amiga-Version von Simon the Sorcerer 1 repariert.
- Accolade AdLib- und MT32-Treiber fУМr folgende Spiele hinzugefУМgt:
Elvira 1, Elvira 2, Waxworks und Simon the Sorcerer 1 (Demoversion)
+ - AdLib-Ausgabe in Simon the Sorcerer 1 hinzugefУМgt. Dies verbessert die AdLib-
+ Ausgabe erheblich und erhУЖht die Originaltreue.
Baphomets Fluch 1:
- Erkennung der Byte-Reihenfolge der Sprachausgabe auf Big-Endian-Systemen
@@ -34,6 +36,9 @@ Amiga-Versionen und Fan-Spielen, die eine Maus benУЖtigen).
das Spiel in der Szene am Bull's Head Hill befindet, behoben
(Fehler #6728). Dieser Fehler trat womУЖglich auch in anderen Szenen auf.
+ CinE:
+ - UnterstУМtzung fУМr Musik in der CD-Version von Future Wars hinzugefУМgt.
+
MADE:
- UnterstУМtzung fУМr AdLib-Musik in Return to Zork verbessert.
diff --git a/engines/access/configure.engine b/engines/access/configure.engine
index b1defce946..0082430062 100644
--- a/engines/access/configure.engine
+++ b/engines/access/configure.engine
@@ -1,3 +1,3 @@
# This file is included from the main "configure" script
# add_engine [name] [desc] [build-by-default] [subengines] [base games] [deps]
-add_engine access "Access" no
+add_engine access "Access" yes
diff --git a/engines/bbvs/bbvs.cpp b/engines/bbvs/bbvs.cpp
index 11e4b6cea7..1d668f9c34 100644
--- a/engines/bbvs/bbvs.cpp
+++ b/engines/bbvs/bbvs.cpp
@@ -39,6 +39,8 @@
#include "common/error.h"
#include "common/fs.h"
#include "common/timer.h"
+#include "common/translation.h"
+#include "engines/advancedDetector.h"
#include "engines/util.h"
#include "graphics/cursorman.h"
#include "graphics/font.h"
@@ -116,9 +118,15 @@ BbvsEngine::BbvsEngine(OSystem *syst, const ADGameDescription *gd) :
Engine::syncSoundSettings();
+ _oldGUILanguage = TransMan.getCurrentLanguage();
+
+ if (gd->flags & GF_GUILANGSWITCH)
+ TransMan.setLanguage(getLanguageLocale(gd->language));
}
BbvsEngine::~BbvsEngine() {
+ if (TransMan.getCurrentLanguage() != _oldGUILanguage)
+ TransMan.setLanguage(_oldGUILanguage);
delete _random;
diff --git a/engines/bbvs/bbvs.h b/engines/bbvs/bbvs.h
index bbd8046a8b..d098aaf90b 100644
--- a/engines/bbvs/bbvs.h
+++ b/engines/bbvs/bbvs.h
@@ -63,6 +63,10 @@ class SoundMan;
#define BBVS_SAVEGAME_VERSION 0
enum {
+ GF_GUILANGSWITCH = (1 << 0) // If GUI language switch is required for menus
+};
+
+enum {
kVerbLook = 0,
kVerbUse = 1,
kVerbTalk = 2,
@@ -226,9 +230,12 @@ public:
void continueGameFromQuickSave();
void setNewSceneNum(int newSceneNum);
const Common::String getTargetName() { return _targetName; }
-private:
const ADGameDescription *_gameDescription;
+
+private:
Graphics::PixelFormat _pixelFormat;
+ Common::String _oldGUILanguage;
+
public:
Common::RandomSource *_random;
diff --git a/engines/bbvs/configure.engine b/engines/bbvs/configure.engine
index c1dc1ef924..8be3e078d9 100644
--- a/engines/bbvs/configure.engine
+++ b/engines/bbvs/configure.engine
@@ -1,3 +1,3 @@
# This file is included from the main "configure" script
# add_engine [name] [desc] [build-by-default] [subengines] [base games] [deps]
-add_engine bbvs "Beavis and Butthead in Virtual Stupidity" no
+add_engine bbvs "Beavis and Butthead in Virtual Stupidity" yes
diff --git a/engines/bbvs/detection.cpp b/engines/bbvs/detection.cpp
index 3e247aad99..d2e3ab8e42 100644
--- a/engines/bbvs/detection.cpp
+++ b/engines/bbvs/detection.cpp
@@ -30,7 +30,7 @@
#include "graphics/thumbnail.h"
static const PlainGameDescriptor bbvsGames[] = {
- { "bbvs", "Beavis and Butthead in Virtual Stupidity" },
+ { "bbvs", "Beavis and Butt-head in Virtual Stupidity" },
{ 0, 0 }
};
@@ -40,10 +40,19 @@ static const ADGameDescription gameDescriptions[] = {
{
"bbvs",
0,
- AD_ENTRY1s("game0001.vnm", "637e5411751c7065bc385dd73d224561", 64004),
+ AD_ENTRY1s("vspr0001.vnm", "7ffe9b9e7ca322db1d48e86f5130578e", 1166628),
Common::EN_ANY,
Common::kPlatformWindows,
- ADGF_NO_FLAGS,
+ ADGF_NO_FLAGS | ADGF_TESTING,
+ GUIO0()
+ },
+ {
+ "bbvs",
+ 0,
+ AD_ENTRY1s("vspr0001.vnm", "91c76b1048f93208cd7b1a05ebccb408", 1176976),
+ Common::RU_RUS,
+ Common::kPlatformWindows,
+ GF_GUILANGSWITCH | ADGF_TESTING,
GUIO0()
},
@@ -66,7 +75,7 @@ public:
}
virtual const char *getName() const {
- return "MTV's Beavis and Butt-Head in Virtual Stupidity";
+ return "MTV's Beavis and Butt-head in Virtual Stupidity";
}
virtual const char *getOriginalCopyright() const {
diff --git a/engines/bbvs/dialogs.cpp b/engines/bbvs/dialogs.cpp
index af95f06c1e..ef7f3c9320 100644
--- a/engines/bbvs/dialogs.cpp
+++ b/engines/bbvs/dialogs.cpp
@@ -24,6 +24,7 @@
#include "common/events.h"
#include "gui/gui-manager.h"
#include "gui/ThemeEval.h"
+#include "engines/advancedDetector.h"
namespace Bbvs {
@@ -53,6 +54,27 @@ static const MenuButton kMenuButtons[] = {
{"Back ..", kCmdBack}
};
+static const MenuButton kMenuButtonsRu[] = {
+ // Main menu
+ {"\xBD\xDE\xD2\xD0\xEF \xD8\xD3\xE0\xD0", kCmdNewGame},
+ {"\xBF\xE0\xDE\xD4\xDE\xDB\xD6\xD8\xE2\xEC", kCmdContinue},
+ {"\xB5\xE9\xD5 ..", kCmdOptions},
+ {"\xBC\xD8\xDD\xD8 \xB8\xD3\xE0\xEB", kCmdMiniGames},
+ {"\xB2\xEB\xE5\xDE\xD4", kCmdQuit},
+ // Options
+ {"\xB4\xD5\xD8\xDD\xE1\xE2\xD0\xDB\xDB\xEF\xE6\xD8\xEF", kCmdUninstall},
+ {"\xB0\xD2\xE2\xDE\xE0\xEB", kCmdCredits},
+ {"\xBF\xE0\xDE\xDB\xDE\xD3", kCmdOpening},
+ {"\xC0\xD5\xDA\xDB\xD0\xDC\xD0", kCmdChicksNStuff},
+ {"\xBD\xD0\xD7\xD0\xD4 ..", kCmdBack},
+ // Minigames
+ {"\xC1\xDD\xD0\xD9\xDF\xD5\xE0", kCmdHockALoogie},
+ {"\xB6\xE3\xDA\xDE\xD6\xD0\xE0\xDA\xD0", kCmdBugJustice},
+ {"\xBF\xE2\xD5\xDD\xD8\xE1", kCmdCourtChaos},
+ {"\xB6\xD8\xD0\xDE\xD9 \xB7\xD2\xE3\xDA", kCmdAirGuitar},
+ {"\xBD\xD0\xD7\xD0\xD4 ..", kCmdBack}
+};
+
MainMenu::MainMenu(BbvsEngine *vm) : Dialog(0, 0, 1, 1), _vm(vm) {
init();
}
@@ -160,7 +182,13 @@ void MainMenu::handleCommand(GUI::CommandSender *sender, uint32 command, uint32
void MainMenu::gotoMenuScreen(int screen) {
for (int i = 0; i < 5; ++i) {
- const MenuButton *btn = &kMenuButtons[screen * 5 + i];
+ const MenuButton *btn;
+
+ if (_vm->_gameDescription->language == Common::RU_RUS) {
+ btn = &kMenuButtonsRu[screen * 5 + i];
+ } else {
+ btn = &kMenuButtons[screen * 5 + i];
+ }
_buttons[i]->setLabel(btn->label);
_buttons[i]->setCmd(btn->cmd);
_buttons[i]->setEnabled(btn->cmd != 0);
diff --git a/engines/bbvs/minigames/bbairguitar.cpp b/engines/bbvs/minigames/bbairguitar.cpp
index 26e27a966f..04175f7290 100644
--- a/engines/bbvs/minigames/bbairguitar.cpp
+++ b/engines/bbvs/minigames/bbairguitar.cpp
@@ -27,6 +27,7 @@
#include "gui/dialog.h"
#include "gui/message.h"
+#include "gui/filebrowser-dialog.h"
namespace Bbvs {
@@ -1204,15 +1205,25 @@ void MinigameBbAirGuitar::stopNote(int noteNum) {
}
bool MinigameBbAirGuitar::getLoadFilename(Common::String &filename) {
- // TODO Run dialog and return actual filename
- filename = "test.air";
- return true;
+ GUI::FileBrowserDialog browser(0, "air", GUI::kFBModeLoad);
+
+ if (browser.runModal() > 0) {
+ filename = browser.getResult();
+ return true;
+ }
+
+ return false;
}
bool MinigameBbAirGuitar::getSaveFilename(Common::String &filename) {
- // TODO Run dialog and return actual filename
- filename = "test.air";
- return true;
+ GUI::FileBrowserDialog browser(0, "air", GUI::kFBModeSave);
+
+ if (browser.runModal() > 0) {
+ filename = browser.getResult();
+ return true;
+ }
+
+ return false;
}
bool MinigameBbAirGuitar::querySaveModifiedDialog() {
@@ -1240,7 +1251,7 @@ bool MinigameBbAirGuitar::loadTracks() {
if (!querySaveModifiedTracks())
return false;
-
+
Common::String filename;
if (!getLoadFilename(filename))
return false;
diff --git a/engines/bbvs/minigames/bbtennis.cpp b/engines/bbvs/minigames/bbtennis.cpp
index 7763548330..6c7d8cbf31 100644
--- a/engines/bbvs/minigames/bbtennis.cpp
+++ b/engines/bbvs/minigames/bbtennis.cpp
@@ -516,7 +516,7 @@ void MinigameBbTennis::updateObjs() {
}
obj->blinkCtr = _vm->getRandom(64) + 60;
_tennisPlayerDelay = _vm->getRandom(128) + 400 - _playerDecrease;
- if (_vm->getRandom(10) == 1 && !isAnySoundPlaying(kAllSounds, 0x11))
+ if (_vm->getRandom(10) == 1 && !isAnySoundPlaying(kAllSounds, 11))
playSound(kYuppieEnteringCourtSounds[_vm->getRandom(2)]);
}
diff --git a/engines/bbvs/videoplayer.cpp b/engines/bbvs/videoplayer.cpp
index 9ea73ad10b..1b721c434f 100644
--- a/engines/bbvs/videoplayer.cpp
+++ b/engines/bbvs/videoplayer.cpp
@@ -43,6 +43,8 @@ void BbvsEngine::playVideo(int videoNum) {
return;
}
+ debug(0, "Screen format: %s", _system->getScreenFormat().toString().c_str());
+
Video::VideoDecoder *videoDecoder = new Video::AVIDecoder();
if (!videoDecoder->loadFile(videoFilename)) {
delete videoDecoder;
@@ -58,7 +60,14 @@ void BbvsEngine::playVideo(int videoNum) {
if (videoDecoder->needsUpdate()) {
const Graphics::Surface *frame = videoDecoder->decodeNextFrame();
if (frame) {
- _system->copyRectToScreen(frame->getPixels(), frame->pitch, 0, 0, frame->w, frame->h);
+ if (frame->format.bytesPerPixel > 1) {
+ Graphics::Surface *frame1 = frame->convertTo(_system->getScreenFormat());
+ _system->copyRectToScreen(frame1->getPixels(), frame1->pitch, 0, 0, frame1->w, frame1->h);
+ frame1->free();
+ delete frame1;
+ } else {
+ _system->copyRectToScreen(frame->getPixels(), frame->pitch, 0, 0, frame->w, frame->h);
+ }
_system->updateScreen();
}
}
diff --git a/engines/cine/cine.cpp b/engines/cine/cine.cpp
index a4af8f2201..d2f088dcd8 100644
--- a/engines/cine/cine.cpp
+++ b/engines/cine/cine.cpp
@@ -22,10 +22,14 @@
#include "common/config-manager.h"
#include "common/debug-channels.h"
+#include "common/events.h"
#include "engines/util.h"
#include "graphics/cursorman.h"
+#include "graphics/palette.h"
+
+#include "image/iff.h"
#include "cine/cine.h"
#include "cine/bg_list.h"
@@ -89,9 +93,16 @@ void CineEngine::syncSoundSettings() {
}
Common::Error CineEngine::run() {
+ if (g_cine->getGameType() == GType_FW && (g_cine->getFeatures() & GF_CD)) {
+ showSplashScreen();
+ }
+
// Initialize backend
initGraphics(320, 200, false);
+ if (g_cine->getGameType() == GType_FW && (g_cine->getFeatures() & GF_CD))
+ checkCD();
+
if (getPlatform() == Common::kPlatformDOS) {
g_sound = new PCSound(_mixer, this);
} else {
@@ -236,4 +247,45 @@ void CineEngine::initialize() {
}
}
+void CineEngine::showSplashScreen() {
+ Common::File file;
+ if (!file.open("sony.lbm"))
+ return;
+
+ Image::IFFDecoder decoder;
+ if (!decoder.loadStream(file))
+ return;
+
+ const Graphics::Surface *surface = decoder.getSurface();
+ if (surface->w == 640 && surface->h == 480) {
+ initGraphics(640, 480, true);
+
+ const byte *palette = decoder.getPalette();
+ int paletteColorCount = decoder.getPaletteColorCount();
+ g_system->getPaletteManager()->setPalette(palette, 0, paletteColorCount);
+
+ g_system->copyRectToScreen(surface->getPixels(), 640, 0, 0, 640, 480);
+ g_system->updateScreen();
+
+ Common::EventManager *eventMan = g_system->getEventManager();
+
+ bool done = false;
+ uint32 now = g_system->getMillis();
+
+ while (!done && g_system->getMillis() - now < 2000) {
+ Common::Event event;
+ while (eventMan->pollEvent(event)) {
+ if (event.type == Common::EVENT_KEYDOWN && event.kbd.keycode == Common::KEYCODE_ESCAPE) {
+ done = true;
+ break;
+ }
+ if (shouldQuit())
+ done = true;
+ }
+ }
+ }
+
+ decoder.destroy();
+}
+
} // End of namespace Cine
diff --git a/engines/cine/cine.h b/engines/cine/cine.h
index e620d2ffa5..71a0c242b6 100644
--- a/engines/cine/cine.h
+++ b/engines/cine/cine.h
@@ -145,6 +145,7 @@ public:
private:
void initialize();
+ void showSplashScreen();
void resetEngine();
bool loadPlainSaveFW(Common::SeekableReadStream &in, CineSaveGameFormat saveGameFormat);
bool loadTempSaveOS(Common::SeekableReadStream &in);
diff --git a/engines/cine/main_loop.cpp b/engines/cine/main_loop.cpp
index 9ce683445f..e52fc464d5 100644
--- a/engines/cine/main_loop.cpp
+++ b/engines/cine/main_loop.cpp
@@ -31,6 +31,8 @@
#include "cine/bg_list.h"
#include "cine/sound.h"
+#include "backends/audiocd/audiocd.h"
+
namespace Cine {
struct MouseStatusStruct {
@@ -219,6 +221,8 @@ void manageEvents() {
mouseData.left = mouseLeft;
mouseData.right = mouseRight;
+
+ g_system->getAudioCDManager()->updateCD();
}
void getMouseData(uint16 param, uint16 *pButton, uint16 *pX, uint16 *pY) {
diff --git a/engines/cine/saveload.cpp b/engines/cine/saveload.cpp
index c707c60695..907086a9a1 100644
--- a/engines/cine/saveload.cpp
+++ b/engines/cine/saveload.cpp
@@ -543,6 +543,15 @@ bool CineEngine::loadTempSaveOS(Common::SeekableReadStream &in) {
loadRel(currentRelName);
}
+ // Reset background music in CD version of Future Wars
+ if (getGameType() == GType_FW && (getFeatures() & GF_CD)) {
+ if (strlen(bgNames[0])) {
+ char buffer[20];
+ removeExtention(buffer, bgNames[0]);
+ g_sound->setBgMusic(atoi(buffer + 1));
+ }
+ }
+
// Load first background (Uses loadBg)
if (strlen(bgNames[0])) {
loadBg(bgNames[0]);
diff --git a/engines/cine/script_fw.cpp b/engines/cine/script_fw.cpp
index c0b0c1f5da..6ad38f4433 100644
--- a/engines/cine/script_fw.cpp
+++ b/engines/cine/script_fw.cpp
@@ -1380,6 +1380,12 @@ int FWScript::o1_loadBg() {
debugC(5, kCineDebugScript, "Line: %d: loadBg(\"%s\")", _line, param);
+ if (g_cine->getGameType() == GType_FW && (g_cine->getFeatures() & GF_CD)) {
+ char buffer[20];
+ removeExtention(buffer, param);
+ g_sound->setBgMusic(atoi(buffer + 1));
+ }
+
loadBg(param);
g_cine->_bgIncrustList.clear();
bgVar0 = 0;
diff --git a/engines/cine/sound.cpp b/engines/cine/sound.cpp
index 0c788b816c..7cab067371 100644
--- a/engines/cine/sound.cpp
+++ b/engines/cine/sound.cpp
@@ -32,6 +32,8 @@
#include "cine/cine.h"
#include "cine/sound.h"
+#include "backends/audiocd/audiocd.h"
+
#include "audio/audiostream.h"
#include "audio/fmopl.h"
#include "audio/mididrv.h"
@@ -907,6 +909,10 @@ void PCSoundFxPlayer::unload() {
PCSound::PCSound(Audio::Mixer *mixer, CineEngine *vm)
: Sound(mixer, vm), _soundDriver(0) {
+ _currentMusic = 0;
+ _currentMusicStatus = 0;
+ _currentBgSlot = 0;
+
const MidiDriver::DeviceHandle dev = MidiDriver::detectDevice(MDT_MIDI | MDT_ADLIB);
const MusicType musicType = MidiDriver::getMusicType(dev);
if (musicType == MT_MT32 || musicType == MT_GM) {
@@ -940,23 +946,98 @@ PCSound::~PCSound() {
delete _soundDriver;
}
+static const char *const musicFileNames[11] = {
+ "DUGGER.DAT",
+ "SUITE21.DAT",
+ "FWARS.DAT",
+ "SUITE23.DAT",
+ "SUITE22.DAT",
+ "ESCAL",
+ "MOINES.DAT",
+ "MEDIAVAL.DAT",
+ "SFUTUR",
+ "ALIENS",
+ "TELESONG.DAT",
+};
+
+static uint8 musicCDTracks[11] = {
+ 20, 21, 22, 23, 24, 25, 26, 27, 28, 30, 22,
+};
+
void PCSound::loadMusic(const char *name) {
debugC(5, kCineDebugSound, "PCSound::loadMusic('%s')", name);
- _player->load(name);
+ if (_vm->getGameType() == GType_FW && (_vm->getFeatures() & GF_CD)) {
+ _currentMusic = 0;
+ _currentMusicStatus = 0;
+ for (int i = 0; i < 11; i++) {
+ if (!strcmp((const char *)name, musicFileNames[i])) {
+ _currentMusic = musicCDTracks[i];
+ _currentMusicStatus = musicCDTracks[i];
+ }
+ }
+ } else {
+ _player->load(name);
+ }
}
void PCSound::playMusic() {
debugC(5, kCineDebugSound, "PCSound::playMusic()");
- _player->play();
+ if (_vm->getGameType() == GType_FW && (_vm->getFeatures() & GF_CD)) {
+ g_system->getAudioCDManager()->stop();
+ g_system->getAudioCDManager()->play(_currentMusic - 1, -1, 0, 0);
+ } else {
+ _player->play();
+ }
+}
+
+static uint8 bgCDTracks[49] = {
+ 0, 21, 21, 23, 0, 29, 0, 0, 0, 0,
+ 0, 27, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 22, 22, 23, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0
+};
+
+void PCSound::setBgMusic(int num) {
+ debugC(5, kCineDebugSound, "PCSound::setBgMusic(%d)", num);
+ _currentBgSlot = num;
+ if (!bgCDTracks[_currentBgSlot])
+ return;
+
+ if ((_currentBgSlot == 1) || (_currentMusicStatus == 0 && _currentMusic != bgCDTracks[_currentBgSlot])) {
+ _currentMusic = bgCDTracks[_currentBgSlot];
+ g_system->getAudioCDManager()->stop();
+ g_system->getAudioCDManager()->play(bgCDTracks[_currentBgSlot] - 1, -1, 0, 0);
+ }
}
void PCSound::stopMusic() {
debugC(5, kCineDebugSound, "PCSound::stopMusic()");
+
+ if (_vm->getGameType() == GType_FW && (_vm->getFeatures() & GF_CD)) {
+ if (_currentBgSlot != 1)
+ g_system->getAudioCDManager()->stop();
+ }
_player->stop();
}
void PCSound::fadeOutMusic() {
debugC(5, kCineDebugSound, "PCSound::fadeOutMusic()");
+
+ if (_vm->getGameType() == GType_FW && (_vm->getFeatures() & GF_CD)) {
+ if (_currentMusicStatus) {
+ if (_currentBgSlot == 1) {
+ _currentMusicStatus = 0;
+ } else {
+ _currentMusic = 0;
+ _currentMusicStatus = 0;
+ g_system->getAudioCDManager()->stop();
+ if (bgCDTracks[_currentBgSlot]) {
+ g_system->getAudioCDManager()->play(_currentBgSlot - 1, -1, 0, 0);
+ }
+ }
+ }
+ }
_player->fadeOut();
}
@@ -1056,6 +1137,9 @@ void PaulaSound::stopMusic() {
_mixer->stopHandle(_moduleHandle);
}
+void PaulaSound::setBgMusic(int num) {
+}
+
void PaulaSound::fadeOutMusic() {
debugC(5, kCineDebugSound, "PaulaSound::fadeOutMusic()");
Common::StackLock lock(_musicMutex);
diff --git a/engines/cine/sound.h b/engines/cine/sound.h
index efb3811f9a..0149071ed7 100644
--- a/engines/cine/sound.h
+++ b/engines/cine/sound.h
@@ -48,6 +48,7 @@ public:
virtual void playSound(int channel, int frequency, const uint8 *data, int size, int volumeStep, int stepCount, int volume, int repeat) = 0;
virtual void stopSound(int channel) = 0;
+ virtual void setBgMusic(int num) = 0;
protected:
@@ -71,11 +72,14 @@ public:
virtual void playSound(int channel, int frequency, const uint8 *data, int size, int volumeStep, int stepCount, int volume, int repeat);
virtual void stopSound(int channel);
+ virtual void setBgMusic(int num);
protected:
PCSoundDriver *_soundDriver;
PCSoundFxPlayer *_player;
+
+ uint8 _currentMusic, _currentMusicStatus, _currentBgSlot;
};
class PaulaSound : public Sound {
@@ -91,6 +95,7 @@ public:
virtual void playSound(int channel, int frequency, const uint8 *data, int size, int volumeStep, int stepCount, int volume, int repeat);
virtual void stopSound(int channel);
+ virtual void setBgMusic(int num);
enum {
PAULA_FREQ = 3579545,
diff --git a/engines/fullpipe/gameloader.cpp b/engines/fullpipe/gameloader.cpp
index 7815475d37..68b63d398a 100644
--- a/engines/fullpipe/gameloader.cpp
+++ b/engines/fullpipe/gameloader.cpp
@@ -419,7 +419,7 @@ bool GameLoader::unloadScene(int sceneId) {
if (_sc2array[sceneTag]._isLoaded)
saveScenePicAniInfos(sceneId);
- _sc2array[sceneTag]._motionController->freeItems();
+ _sc2array[sceneTag]._motionController->detachAllObjects();
delete tag->_scene;
tag->_scene = 0;
diff --git a/engines/fullpipe/interaction.cpp b/engines/fullpipe/interaction.cpp
index 84e9688e30..4aac3485f4 100644
--- a/engines/fullpipe/interaction.cpp
+++ b/engines/fullpipe/interaction.cpp
@@ -311,7 +311,7 @@ LABEL_38:
if (abs(xpos - subj->_ox) > 1 || abs(ypos - subj->_oy) > 1
|| (inter->_staticsId2 != 0 && (subj->_statics == 0 || subj->_statics->_staticsId != inter->_staticsId2))) {
- mq = getSc2MctlCompoundBySceneId(g_fp->_currentScene->_sceneId)->method34(subj, xpos, ypos, 1, inter->_staticsId2);
+ mq = getSc2MctlCompoundBySceneId(g_fp->_currentScene->_sceneId)->startMove(subj, xpos, ypos, 1, inter->_staticsId2);
if (!mq)
return false;
diff --git a/engines/fullpipe/lift.cpp b/engines/fullpipe/lift.cpp
index 9a3d91540a..d066c89d4a 100644
--- a/engines/fullpipe/lift.cpp
+++ b/engines/fullpipe/lift.cpp
@@ -324,7 +324,7 @@ void FullpipeEngine::lift_walkAndGo() {
ExCommand *ex;
if (abs(_liftX - _aniMan->_ox) > 1 || abs(_liftY - _aniMan->_oy) > 1 || _aniMan->_movement || _aniMan->_statics->_staticsId != ST_MAN_UP) {
- mq = getCurrSceneSc2MotionController()->method34(_aniMan, _liftX, _liftY, 1, ST_MAN_UP);
+ mq = getCurrSceneSc2MotionController()->startMove(_aniMan, _liftX, _liftY, 1, ST_MAN_UP);
if (mq) {
ex = new ExCommand(0, 17, MSG_LIFT_CLICKBUTTON, 0, 0, 0, 1, 0, 0, 0);
diff --git a/engines/fullpipe/messagehandlers.cpp b/engines/fullpipe/messagehandlers.cpp
index d4f79d1dd8..94754ad22a 100644
--- a/engines/fullpipe/messagehandlers.cpp
+++ b/engines/fullpipe/messagehandlers.cpp
@@ -781,7 +781,7 @@ int MovGraph_messageHandler(ExCommand *cmd) {
int off = (node->_field_14 >> 16) & 0xFF;
double off2 = ((link->_movGraphNode2->_field_14 >> 8) & 0xff) - off;
- top = off + (int)(sqrt(sq) * off2 / link->_distance);
+ top = off + (int)(sqrt(sq) * off2 / link->_z);
} else {
top = (gr->calcOffset(ani->_ox, ani->_oy)->_field_14 >> 8) & 0xff;
}
diff --git a/engines/fullpipe/motion.cpp b/engines/fullpipe/motion.cpp
index 5845ad1501..1a61cb742a 100644
--- a/engines/fullpipe/motion.cpp
+++ b/engines/fullpipe/motion.cpp
@@ -88,7 +88,7 @@ bool MctlCompound::load(MfcArchive &file) {
for (int i = 0; i < count; i++) {
debug(6, "CompoundArray[%d]", i);
- MctlCompoundArrayItem *obj = new MctlCompoundArrayItem();
+ MctlItem *obj = new MctlItem();
obj->_motionControllerObj = (MotionController *)file.readClass();
@@ -114,14 +114,14 @@ bool MctlCompound::load(MfcArchive &file) {
return true;
}
-void MctlCompound::addObject(StaticANIObject *obj) {
+void MctlCompound::attachObject(StaticANIObject *obj) {
for (uint i = 0; i < _motionControllers.size(); i++)
- _motionControllers[i]->_motionControllerObj->addObject(obj);
+ _motionControllers[i]->_motionControllerObj->attachObject(obj);
}
-int MctlCompound::removeObject(StaticANIObject *obj) {
+int MctlCompound::detachObject(StaticANIObject *obj) {
for (uint i = 0; i < _motionControllers.size(); i++)
- _motionControllers[i]->_motionControllerObj->removeObject(obj);
+ _motionControllers[i]->_motionControllerObj->detachObject(obj);
return 1;
}
@@ -150,12 +150,12 @@ void MctlCompound::initMovGraph2() {
}
}
-void MctlCompound::freeItems() {
+void MctlCompound::detachAllObjects() {
for (uint i = 0; i < _motionControllers.size(); i++)
- _motionControllers[i]->_motionControllerObj->freeItems();
+ _motionControllers[i]->_motionControllerObj->detachAllObjects();
}
-MessageQueue *MctlCompound::method34(StaticANIObject *ani, int sourceX, int sourceY, int fuzzyMatch, int staticsId) {
+MessageQueue *MctlCompound::startMove(StaticANIObject *ani, int sourceX, int sourceY, int fuzzyMatch, int staticsId) {
int idx = -1;
int sourceIdx = -1;
@@ -187,7 +187,7 @@ MessageQueue *MctlCompound::method34(StaticANIObject *ani, int sourceX, int sour
return 0;
if (idx == sourceIdx)
- return _motionControllers[idx]->_motionControllerObj->method34(ani, sourceX, sourceY, fuzzyMatch, staticsId);
+ return _motionControllers[idx]->_motionControllerObj->startMove(ani, sourceX, sourceY, fuzzyMatch, staticsId);
double dist;
MctlConnectionPoint *cp = findClosestConnectionPoint(ani->_ox, ani->_oy, idx, sourceX, sourceY, sourceIdx, &dist);
@@ -195,7 +195,7 @@ MessageQueue *MctlCompound::method34(StaticANIObject *ani, int sourceX, int sour
if (!cp)
return 0;
- MessageQueue *mq = _motionControllers[idx]->_motionControllerObj->doWalkTo(ani, cp->_connectionX, cp->_connectionY, 1, cp->_field_14);
+ MessageQueue *mq = _motionControllers[idx]->_motionControllerObj->doWalkTo(ani, cp->_connectionX, cp->_connectionY, 1, cp->_mctlmirror);
if (!mq)
return 0;
@@ -264,7 +264,7 @@ MessageQueue *MctlCompound::doWalkTo(StaticANIObject *subj, int xpos, int ypos,
if (!closestP)
return 0;
- MessageQueue *mq = _motionControllers[match1]->_motionControllerObj->doWalkTo(subj, closestP->_connectionX, closestP->_connectionY, 1, closestP->_field_14);
+ MessageQueue *mq = _motionControllers[match1]->_motionControllerObj->doWalkTo(subj, closestP->_connectionX, closestP->_connectionY, 1, closestP->_mctlmirror);
ExCommand *ex;
@@ -287,7 +287,7 @@ MessageQueue *MctlCompound::doWalkTo(StaticANIObject *subj, int xpos, int ypos,
return mq;
}
-MctlCompoundArrayItem::~MctlCompoundArrayItem() {
+MctlItem::~MctlItem() {
delete _movGraphReactObj;
delete _motionControllerObj;
}
@@ -304,7 +304,7 @@ MctlLadder::MctlLadder() {
}
MctlLadder::~MctlLadder() {
- freeItems();
+ detachAllObjects();
}
int MctlLadder::collisionDetection(StaticANIObject *man) {
@@ -326,7 +326,7 @@ int MctlLadder::collisionDetection(StaticANIObject *man) {
return res;
}
-void MctlLadder::addObject(StaticANIObject *obj) {
+void MctlLadder::attachObject(StaticANIObject *obj) {
if (findObjectPos(obj) < 0) {
MctlLadderMovement *movement = new MctlLadderMovement;
@@ -391,7 +391,7 @@ bool MctlLadder::initMovement(StaticANIObject *ani, MctlLadderMovement *movement
return true;
}
-void MctlLadder::freeItems() {
+void MctlLadder::detachAllObjects() {
_mgm.clear();
for (uint i = 0; i < _ladmovements.size(); i++) {
@@ -402,7 +402,7 @@ void MctlLadder::freeItems() {
_ladmovements.clear();
}
-MessageQueue *MctlLadder::method34(StaticANIObject *subj, int xpos, int ypos, int fuzzyMatch, int staticsId) {
+MessageQueue *MctlLadder::startMove(StaticANIObject *subj, int xpos, int ypos, int fuzzyMatch, int staticsId) {
MessageQueue *mq = doWalkTo(subj, xpos, ypos, fuzzyMatch, staticsId);
if (mq) {
@@ -661,7 +661,7 @@ void MctlCompound::replaceNodeX(int from, int to) {
node->_x = to;
}
- gr->calcNodeDistancesAndAngles();
+ gr->recalcLinkParams();
}
}
}
@@ -669,10 +669,9 @@ void MctlCompound::replaceNodeX(int from, int to) {
MctlConnectionPoint::MctlConnectionPoint() {
_connectionX = 0;
_connectionY = 0;
- _field_C = 0;
- _field_10 = 0;
- _field_14 = 0;
- _field_16 = 0;
+ _mctlflags = 0;
+ _mctlstatic = 0;
+ _mctlmirror = 0;
_messageQueueObj = 0;
_motionControllerObj = 0;
}
@@ -779,7 +778,7 @@ bool MovGraph::load(MfcArchive &file) {
return true;
}
-void MovGraph::addObject(StaticANIObject *obj) {
+void MovGraph::attachObject(StaticANIObject *obj) {
_mgm.clear();
_mgm.addItem(obj->_id);
@@ -796,13 +795,13 @@ void MovGraph::addObject(StaticANIObject *obj) {
_mgm.addItem(obj->_id); // FIXME: Is it really needed?
}
-int MovGraph::removeObject(StaticANIObject *obj) {
- warning("STUB: MovGraph::removeObject()");
+int MovGraph::detachObject(StaticANIObject *obj) {
+ warning("STUB: MovGraph::detachObject()");
return 0;
}
-void MovGraph::freeItems() {
+void MovGraph::detachAllObjects() {
for (uint i = 0; i < _items.size(); i++) {
_items[i]->free();
@@ -812,7 +811,7 @@ void MovGraph::freeItems() {
_items.clear();
}
-Common::Array<MovItem *> *MovGraph::method28(StaticANIObject *ani, int x, int y, int flag1, int *rescount) {
+Common::Array<MovItem *> *MovGraph::getPaths(StaticANIObject *ani, int x, int y, int flag1, int *rescount) {
*rescount = 0;
if (_items.size() <= 0)
@@ -828,7 +827,7 @@ Common::Array<MovItem *> *MovGraph::method28(StaticANIObject *ani, int x, int y,
}
_items[idx]->free();
- calcNodeDistancesAndAngles();
+ recalcLinkParams();
_items[idx]->movarr._movSteps.clear();
@@ -838,7 +837,7 @@ Common::Array<MovItem *> *MovGraph::method28(StaticANIObject *ani, int x, int y,
point.y = ani->_oy;
if (!calcChunk(idx, ani->_ox, ani->_oy, &_items[idx]->movarr, 0))
- findClosestLink(idx, &point, &_items[idx]->movarr);
+ getNearestPoint(idx, &point, &_items[idx]->movarr);
_items[idx]->count = 0;
@@ -873,12 +872,12 @@ Common::Array<MovItem *> *MovGraph::method28(StaticANIObject *ani, int x, int y,
return 0;
}
-bool MovGraph::method2C(StaticANIObject *obj, int x, int y) {
+bool MovGraph::setPosImmediate(StaticANIObject *obj, int x, int y) {
obj->setOXY(x, y);
- return method3C(obj, 1);
+ return resetPosition(obj, 1);
}
-MessageQueue *MovGraph::method34(StaticANIObject *ani, int xpos, int ypos, int fuzzyMatch, int staticsId) {
+MessageQueue *MovGraph::startMove(StaticANIObject *ani, int xpos, int ypos, int fuzzyMatch, int staticsId) {
if (!ani) {
if (!_items.size())
return 0;
@@ -896,7 +895,7 @@ MessageQueue *MovGraph::method34(StaticANIObject *ani, int xpos, int ypos, int f
return 0;
int count;
- Common::Array<MovItem *> *movitems = method28(ani, xpos, ypos, fuzzyMatch, &count);
+ Common::Array<MovItem *> *movitems = getPaths(ani, xpos, ypos, fuzzyMatch, &count);
if (!movitems)
return 0;
@@ -941,9 +940,9 @@ MessageQueue *MovGraph::method34(StaticANIObject *ani, int xpos, int ypos, int f
int count2;
ani->setSomeDynamicPhaseIndex(ex->_field_14);
- method28(ani, xpos, ypos, fuzzyMatch, &count2);
+ getPaths(ani, xpos, ypos, fuzzyMatch, &count2);
- int idx = getItemIndexByStaticAni(ani);
+ int idx = getObjectIndex(ani);
count = _items[idx]->count;
movitems = _items[idx]->movitems;
}
@@ -951,12 +950,12 @@ MessageQueue *MovGraph::method34(StaticANIObject *ani, int xpos, int ypos, int f
return method50(ani, _callback1(ani, movitems, count), staticsId);
}
-void MovGraph::changeCallback(MovArr *(*callback1)(StaticANIObject *ani, Common::Array<MovItem *> *items, signed int counter)) {
+void MovGraph::setSelFunc(MovArr *(*callback1)(StaticANIObject *ani, Common::Array<MovItem *> *items, signed int counter)) {
_callback1 = callback1;
}
-bool MovGraph::method3C(StaticANIObject *ani, int flag) {
- int idx = getItemIndexByStaticAni(ani);
+bool MovGraph::resetPosition(StaticANIObject *ani, int flag) {
+ int idx = getObjectIndex(ani);
if (idx == -1)
return false;
@@ -967,7 +966,7 @@ bool MovGraph::method3C(StaticANIObject *ani, int flag) {
point.x = ani->_ox;
point.y = ani->_oy;
- findClosestLink(idx, &point, &movarr);
+ getNearestPoint(idx, &point, &movarr);
ani->setOXY(point.x, point.y);
if (flag) {
@@ -990,15 +989,15 @@ bool MovGraph::method3C(StaticANIObject *ani, int flag) {
return true;
}
-bool MovGraph::method44(StaticANIObject *ani, int x, int y) {
- int idx = getItemIndexByStaticAni(ani);
+bool MovGraph::canDropInventory(StaticANIObject *ani, int x, int y) {
+ int idx = getObjectIndex(ani);
MovArr m;
if (idx != -1) {
if (x != -1 || y != -1) {
int counter;
- Common::Array<MovItem *> *movitem = method28(ani, x, y, 0, &counter);
+ Common::Array<MovItem *> *movitem = getPaths(ani, x, y, 0, &counter);
if (movitem) {
MovArr *movarr = _callback1(ani, movitem, counter);
@@ -1021,13 +1020,13 @@ MessageQueue *MovGraph::doWalkTo(StaticANIObject *subj, int xpos, int ypos, int
PicAniInfo picAniInfo;
int ss;
- Common::Array<MovItem *> *movitem = method28(subj, xpos, ypos, fuzzyMatch, &ss);
+ Common::Array<MovItem *> *movitem = getPaths(subj, xpos, ypos, fuzzyMatch, &ss);
subj->getPicAniInfo(&picAniInfo);
if (movitem) {
MovArr *goal = _callback1(subj, movitem, ss);
- int idx = getItemIndexByStaticAni(subj);
+ int idx = getObjectIndex(subj);
for (int i = 0; i < _items[idx]->count; i++) {
if ((*_items[idx]->movitems)[i]->movarr == goal) {
@@ -1052,10 +1051,10 @@ MessageQueue *MovGraph::doWalkTo(StaticANIObject *subj, int xpos, int ypos, int
}
}
- movitem = method28(subj, xpos, ypos, fuzzyMatch, &ss);
+ movitem = getPaths(subj, xpos, ypos, fuzzyMatch, &ss);
if (movitem) {
MovArr *goal = _callback1(subj, movitem, ss);
- int idx = getItemIndexByStaticAni(subj);
+ int idx = getObjectIndex(subj);
if (_items[idx]->count > 0) {
int arridx = 0;
@@ -1106,7 +1105,7 @@ MessageQueue *MovGraph::sub1(StaticANIObject *ani, int x, int y, int stid, int x
int rescount;
- Common::Array<MovItem *> *movitems = method28(ani, x1, y1, flag1, &rescount);
+ Common::Array<MovItem *> *movitems = getPaths(ani, x1, y1, flag1, &rescount);
if (!movitems) {
ani->setPicAniInfo(&picinfo);
@@ -1117,7 +1116,7 @@ MessageQueue *MovGraph::sub1(StaticANIObject *ani, int x, int y, int stid, int x
MessageQueue *res = 0;
MovArr *goal = _callback1(ani, movitems, rescount);
- int idx = getItemIndexByStaticAni(ani);
+ int idx = getObjectIndex(ani);
MovGraphItem *movgitem = _items[idx];
int cnt = movgitem->count;
@@ -1177,16 +1176,16 @@ MessageQueue *MovGraph::fillMGMinfo(StaticANIObject *ani, MovArr *movarr, int st
if (i == movarr->_movStepCount - 1) {
nx = movarr->_point.x;
ny = movarr->_point.y;
- nd = st->link->_movGraphNode1->_distance;
+ nd = st->link->_movGraphNode1->_z;
} else {
if (st->sfield_0) {
nx = st->link->_movGraphNode1->_x;
ny = st->link->_movGraphNode1->_y;
- nd = st->link->_movGraphNode1->_distance;
+ nd = st->link->_movGraphNode1->_z;
} else {
nx = st->link->_movGraphNode2->_x;
ny = st->link->_movGraphNode2->_y;
- nd = st->link->_movGraphNode2->_distance;
+ nd = st->link->_movGraphNode2->_z;
}
}
@@ -1294,14 +1293,14 @@ double MovGraph::calcDistance(Common::Point *point, MovGraphLink *link, int fuzz
double dist2x = (double)(n2x - n1x);
double dist2y = (double)(n2y - n1y);
double dist1 = sqrt(dist1y * dist1y + dist1x * dist1x);
- double dist2 = ((double)(n1y - n2y) * dist1y + dist2x * dist1x) / link->_distance / dist1;
+ double dist2 = ((double)(n1y - n2y) * dist1y + dist2x * dist1x) / link->_z / dist1;
double distm = dist2 * dist1;
double res = sqrt(1.0 - dist2 * dist2) * dist1;
- if (dist2 <= 0.0 || distm >= link->_distance) {
+ if (dist2 <= 0.0 || distm >= link->_z) {
if (fuzzyMatch) {
if (dist2 > 0.0) {
- if (distm >= link->_distance) {
+ if (distm >= link->_z) {
point->x = n2x;
point->y = n2y;
}
@@ -1313,14 +1312,14 @@ double MovGraph::calcDistance(Common::Point *point, MovGraphLink *link, int fuzz
return -1.0;
}
} else {
- point->x = (int)(n1x + (dist2x * distm / link->_distance));
- point->y = (int)(n1y + (dist2y * distm / link->_distance));
+ point->x = (int)(n1x + (dist2x * distm / link->_z));
+ point->y = (int)(n1y + (dist2y * distm / link->_z));
}
return res;
}
-void MovGraph::calcNodeDistancesAndAngles() {
+void MovGraph::recalcLinkParams() {
for (ObList::iterator i = _links.begin(); i != _links.end(); ++i) {
assert(((CObject *)*i)->_objtype == kObjTypeMovGraphLink);
@@ -1328,11 +1327,11 @@ void MovGraph::calcNodeDistancesAndAngles() {
lnk->_flags &= 0x7FFFFFFF;
- lnk->calcNodeDistanceAndAngle();
+ lnk->recalcLength();
}
}
-bool MovGraph::findClosestLink(int unusedArg, Common::Point *p, MovArr *movarr) {
+bool MovGraph::getNearestPoint(int unusedArg, Common::Point *p, MovArr *movarr) {
MovGraphLink *link = 0;
double mindist = 1.0e20;
int resx = 0, resy = 0;
@@ -1348,7 +1347,7 @@ bool MovGraph::findClosestLink(int unusedArg, Common::Point *p, MovArr *movarr)
double dx3 = lnk->_movGraphNode2->_x - lnk->_movGraphNode1->_x;
double dy3 = lnk->_movGraphNode2->_y - lnk->_movGraphNode1->_y;
double sq1 = sqrt(dy1 * dy1 + dx1 * dx1);
- double sdist = (dy3 * dy1 + dx3 * dx1) / lnk->_distance / sq1;
+ double sdist = (dy3 * dy1 + dx3 * dx1) / lnk->_z / sq1;
double ldist = sdist * sq1;
double dist = sqrt(1.0 - sdist * sdist) * sq1;
@@ -1357,14 +1356,14 @@ bool MovGraph::findClosestLink(int unusedArg, Common::Point *p, MovArr *movarr)
dist = sqrt(dx1 * dx1 + dy1 * dy1);
}
- if (ldist > lnk->_distance) {
- ldist = lnk->_distance;
+ if (ldist > lnk->_z) {
+ ldist = lnk->_z;
dist = sqrt(dx2 * dx2 + dy2 * dy2);
}
- if (ldist >= 0.0 && ldist <= lnk->_distance && dist < mindist) {
- resx = lnk->_movGraphNode1->_x + (int)(dx3 * ldist / lnk->_distance);
- resy = lnk->_movGraphNode1->_y + (int)(dy3 * ldist / lnk->_distance);
+ if (ldist >= 0.0 && ldist <= lnk->_z && dist < mindist) {
+ resx = lnk->_movGraphNode1->_x + (int)(dx3 * ldist / lnk->_z);
+ resy = lnk->_movGraphNode1->_y + (int)(dy3 * ldist / lnk->_z);
mindist = dist;
link = lnk;
@@ -1387,7 +1386,7 @@ bool MovGraph::findClosestLink(int unusedArg, Common::Point *p, MovArr *movarr)
return false;
}
-int MovGraph::getItemIndexByStaticAni(StaticANIObject *ani) {
+int MovGraph::getObjectIndex(StaticANIObject *ani) {
for (uint i = 0; i < _items.size(); i++)
if (_items[i]->ani == ani)
return i;
@@ -1418,7 +1417,7 @@ Common::Array<MovArr *> *MovGraph::genMovArr(int x, int y, int *arrSize, int fla
movarr->_link = lnk;
movarr->_dist = ((double)(lnk->_movGraphNode1->_y - lnk->_movGraphNode2->_y) * (double)(lnk->_movGraphNode1->_y - point.y) +
(double)(lnk->_movGraphNode2->_x - lnk->_movGraphNode1->_x) * (double)(point.x - lnk->_movGraphNode1->_x)) /
- lnk->_distance / lnk->_distance;
+ lnk->_z / lnk->_z;
movarr->_point = point;
arr->push_back(movarr);
@@ -1447,7 +1446,7 @@ Common::Array<MovArr *> *MovGraph::genMovArr(int x, int y, int *arrSize, int fla
movarr->_link = lnk;
movarr->_dist = ((double)(lnk->_movGraphNode1->_y - lnk->_movGraphNode2->_y) * (double)(lnk->_movGraphNode1->_y - y) +
(double)(lnk->_movGraphNode2->_x - lnk->_movGraphNode1->_x) * (double)(x - lnk->_movGraphNode1->_x)) /
- lnk->_distance / lnk->_distance;
+ lnk->_z / lnk->_z;
movarr->_point.x = x;
movarr->_point.y = y;
@@ -1548,7 +1547,7 @@ bool MovGraph::calcChunk(int idx, int x, int y, MovArr *arr, int a6) {
Common::Array<MovArr *> *movarr = genMovArr(x, y, &arrSize, 0, 1);
if (!movarr)
- return findClosestLink(idx, 0, arr);
+ return getNearestPoint(idx, 0, arr);
bool res = false;
@@ -1777,8 +1776,8 @@ bool MovGraph2::initDirections(StaticANIObject *obj, MovGraph2Item *item) {
return true;
}
-void MovGraph2::addObject(StaticANIObject *obj) {
- MovGraph::addObject(obj);
+void MovGraph2::attachObject(StaticANIObject *obj) {
+ MovGraph::attachObject(obj);
int id = getItemIndexByGameObjectId(obj->_id);
@@ -2031,20 +2030,20 @@ MessageQueue *MovGraph2::buildMovInfo1MessageQueue(MovInfo1 *movInfo) {
return mq;
}
-int MovGraph2::removeObject(StaticANIObject *obj) {
- warning("STUB: MovGraph2::removeObject()");
+int MovGraph2::detachObject(StaticANIObject *obj) {
+ warning("STUB: MovGraph2::detachObject()");
return 0;
}
-void MovGraph2::freeItems() {
+void MovGraph2::detachAllObjects() {
for (uint i = 0; i < _items2.size(); i++)
delete _items2[i];
_items2.clear();
}
-MessageQueue *MovGraph2::method34(StaticANIObject *ani, int xpos, int ypos, int fuzzyMatch, int staticsId) {
+MessageQueue *MovGraph2::startMove(StaticANIObject *ani, int xpos, int ypos, int fuzzyMatch, int staticsId) {
if (!ani->isIdle())
return 0;
@@ -2240,9 +2239,9 @@ MessageQueue *MovGraph2::doWalkTo(StaticANIObject *obj, int xpos, int ypos, int
int dx2, dy2;
if (linkInfoSource.node)
- movInfo1.distance1 = linkInfoSource.node->_distance;
+ movInfo1.distance1 = linkInfoSource.node->_z;
else
- movInfo1.distance1 = linkInfoSource.link->_movGraphNode1->_distance;
+ movInfo1.distance1 = linkInfoSource.link->_movGraphNode1->_z;
if (linkInfoDest.node) {
dx2 = linkInfoDest.node->_x;
@@ -2251,16 +2250,16 @@ MessageQueue *MovGraph2::doWalkTo(StaticANIObject *obj, int xpos, int ypos, int
movInfo1.pt2.x = linkInfoDest.node->_x;
movInfo1.pt2.y = linkInfoDest.node->_y;
- movInfo1.distance2 = linkInfoDest.node->_distance;
+ movInfo1.distance2 = linkInfoDest.node->_z;
} else {
movInfo1.pt2.x = xpos;
movInfo1.pt2.y = ypos;
MovGraphNode *nod = linkInfoDest.link->_movGraphNode1;
double dst1 = sqrt((double)((ypos - nod->_y) * (ypos - nod->_y) + (xpos - nod->_x) * (xpos - nod->_x)));
- int dst = linkInfoDest.link->_movGraphNode2->_distance - nod->_distance;
+ int dst = linkInfoDest.link->_movGraphNode2->_z - nod->_z;
- movInfo1.distance2 = (int)(nod->_distance + (dst1 * (double)dst / linkInfoDest.link->_distance));
+ movInfo1.distance2 = (int)(nod->_z + (dst1 * (double)dst / linkInfoDest.link->_z));
calcDistance(&movInfo1.pt2, linkInfoDest.link, 1);
@@ -2397,8 +2396,8 @@ int MovGraph2::findLink(Common::Array<MovGraphLink *> *linkList, int idx, Common
rect->bottom = node2->_y;
}
if (point) {
- point->x = node3->_distance;
- point->y = node2->_distance;
+ point->x = node3->_z;
+ point->y = node2->_z;
}
if (abs(node3->_x - node2->_x) <= abs(node3->_y - node2->_y))
@@ -2659,7 +2658,7 @@ MovGraphLink *MovGraph2::findLink2(int x, int y) {
double n1dx = n1x - x;
double n1dy = n1y - y;
double dst1 = sqrt(n1dy * n1dy + n1dx * n1dx);
- double coeff1 = ((n1y - n2y) * n1dy + (n2x - n1x) * n1dx) / lnk->_distance / dst1;
+ double coeff1 = ((n1y - n2y) * n1dy + (n2x - n1x) * n1dx) / lnk->_z / dst1;
double dst3 = coeff1 * dst1;
double dst2 = sqrt(1.0 - coeff1 * coeff1) * dst1;
@@ -2667,11 +2666,11 @@ MovGraphLink *MovGraph2::findLink2(int x, int y) {
dst3 = 0.0;
dst2 = sqrt(n1dy * n1dy + n1dx * n1dx);
}
- if (dst3 > lnk->_distance) {
- dst3 = lnk->_distance;
+ if (dst3 > lnk->_z) {
+ dst3 = lnk->_z;
dst2 = sqrt((n2x - x) * (n2x - x) + (n2y - y) * (n2y - y));
}
- if (dst3 >= 0.0 && dst3 <= lnk->_distance && dst2 < mindist) {
+ if (dst3 >= 0.0 && dst3 <= lnk->_z && dst2 < mindist) {
mindist = dst2;
res = lnk;
}
@@ -2704,11 +2703,11 @@ double MovGraph2::findMinPath(LinkInfo *linkInfoSource, LinkInfo *linkInfoDest,
double newDistance = findMinPath(&linkInfoWorkSource, linkInfoDest, &tmpList);
- if (newDistance >= 0.0 && (minDistance < 0.0 || newDistance + lnk->_distance < minDistance)) {
+ if (newDistance >= 0.0 && (minDistance < 0.0 || newDistance + lnk->_z < minDistance)) {
listObj->clear();
listObj->push_back(tmpList);
- minDistance = newDistance + lnk->_distance;
+ minDistance = newDistance + lnk->_z;
}
lnk->_flags &= 0x7FFFFFFF;
@@ -2775,7 +2774,7 @@ MovGraphNode *MovGraph::calcOffset(int ox, int oy) {
}
MovGraphLink::MovGraphLink() {
- _distance = 0;
+ _z = 0;
_angle = 0;
_flags = 0x10000000;
_movGraphNode2 = 0;
@@ -2809,10 +2808,10 @@ bool MovGraphLink::load(MfcArchive &file) {
debug(8, "GraphNode2");
_movGraphNode2 = (MovGraphNode *)file.readClass();
- _distance = file.readDouble();
+ _z = file.readDouble();
_angle = file.readDouble();
- debug(8, "distance: %g, angle: %g", _distance, _angle);
+ debug(8, "distance: %g, angle: %g", _z, _angle);
_movGraphReact = (MovGraphReact *)file.readClass();
_name = file.readPascalString();
@@ -2820,12 +2819,12 @@ bool MovGraphLink::load(MfcArchive &file) {
return true;
}
-void MovGraphLink::calcNodeDistanceAndAngle() {
+void MovGraphLink::recalcLength() {
if (_movGraphNode1) {
double dx = _movGraphNode2->_x - _movGraphNode1->_x;
double dy = _movGraphNode2->_y - _movGraphNode1->_y;
- _distance = sqrt(dy * dy + dx * dx);
+ _z = sqrt(dy * dy + dx * dx);
_angle = atan2(dx, dy);
}
}
@@ -2836,7 +2835,7 @@ bool MovGraphNode::load(MfcArchive &file) {
_field_14 = file.readUint32LE();
_x = file.readUint32LE();
_y = file.readUint32LE();
- _distance = file.readUint32LE();
+ _z = file.readUint32LE();
return true;
}
@@ -3032,7 +3031,7 @@ int startWalkTo(int objId, int objKey, int x, int y, int fuzzyMatch) {
MctlCompound *mc = getCurrSceneSc2MotionController();
if (mc)
- return (mc->method34(g_fp->_currentScene->getStaticANIObject1ById(objId, objKey), x, y, fuzzyMatch, 0) != 0);
+ return (mc->startMove(g_fp->_currentScene->getStaticANIObject1ById(objId, objKey), x, y, fuzzyMatch, 0) != 0);
return 0;
}
@@ -3042,7 +3041,7 @@ bool doSomeAnimation(int objId, int objKey, int a3) {
MctlCompound *cmp = getCurrSceneSc2MotionController();
if (ani && cmp)
- return cmp->method3C(ani, a3);
+ return cmp->resetPosition(ani, a3);
return false;
}
diff --git a/engines/fullpipe/motion.h b/engines/fullpipe/motion.h
index c488039e22..a40d810ffa 100644
--- a/engines/fullpipe/motion.h
+++ b/engines/fullpipe/motion.h
@@ -48,19 +48,19 @@ public:
virtual bool load(MfcArchive &file);
virtual void methodC() {}
virtual void method10() {}
- virtual void clearEnabled() { _isEnabled = false; }
- virtual void setEnabled() { _isEnabled = true; }
- virtual void addObject(StaticANIObject *obj) {}
- virtual int removeObject(StaticANIObject *obj) { return 0; }
- virtual void freeItems() {}
- virtual Common::Array<MovItem *> *method28(StaticANIObject *ani, int x, int y, int flag1, int *rescount) { return 0; }
- virtual bool method2C(StaticANIObject *obj, int x, int y) { return false; }
+ virtual void deactivate() { _isEnabled = false; }
+ virtual void activate() { _isEnabled = true; }
+ virtual void attachObject(StaticANIObject *obj) {}
+ virtual int detachObject(StaticANIObject *obj) { return 0; }
+ virtual void detachAllObjects() {}
+ virtual Common::Array<MovItem *> *getPaths(StaticANIObject *ani, int x, int y, int flag1, int *rescount) { return 0; }
+ virtual bool setPosImmediate(StaticANIObject *obj, int x, int y) { return false; }
virtual int method30() { return 0; }
- virtual MessageQueue *method34(StaticANIObject *subj, int xpos, int ypos, int fuzzyMatch, int staticsId) { return 0; }
- virtual void changeCallback(MovArr *(*_callback1)(StaticANIObject *ani, Common::Array<MovItem *> *items, signed int counter)) {}
- virtual bool method3C(StaticANIObject *ani, int flag) { return 0; }
+ virtual MessageQueue *startMove(StaticANIObject *subj, int xpos, int ypos, int fuzzyMatch, int staticsId) { return 0; }
+ virtual void setSelFunc(MovArr *(*_callback1)(StaticANIObject *ani, Common::Array<MovItem *> *items, signed int counter)) {}
+ virtual bool resetPosition(StaticANIObject *ani, int flag) { return 0; }
virtual int method40() { return 0; }
- virtual bool method44(StaticANIObject *ani, int x, int y) { return false; }
+ virtual bool canDropInventory(StaticANIObject *ani, int x, int y) { return false; }
virtual int method48() { return -1; }
virtual MessageQueue *doWalkTo(StaticANIObject *subj, int xpos, int ypos, int fuzzyMatch, int staticsId) { return 0; }
@@ -82,7 +82,7 @@ public:
virtual bool pointInRegion(int x, int y);
};
-class MctlCompoundArrayItem : public CObject {
+class MctlItem : public CObject {
public:
MotionController *_motionControllerObj;
MovGraphReact *_movGraphReactObj;
@@ -92,11 +92,11 @@ public:
int _field_28;
public:
- MctlCompoundArrayItem() : _movGraphReactObj(0), _motionControllerObj(0), _field_20(0), _field_24(0), _field_28(0) {}
- ~MctlCompoundArrayItem();
+ MctlItem() : _movGraphReactObj(0), _motionControllerObj(0), _field_20(0), _field_24(0), _field_28(0) {}
+ ~MctlItem();
};
-class MctlCompoundArray : public Common::Array<MctlCompoundArrayItem *>, public CObject {
+class MctlCompoundArray : public Common::Array<MctlItem *>, public CObject {
public:
virtual bool load(MfcArchive &file);
};
@@ -109,10 +109,10 @@ public:
virtual bool load(MfcArchive &file);
- virtual void addObject(StaticANIObject *obj);
- virtual int removeObject(StaticANIObject *obj);
- virtual void freeItems();
- virtual MessageQueue *method34(StaticANIObject *subj, int xpos, int ypos, int fuzzyMatch, int staticsId);
+ virtual void attachObject(StaticANIObject *obj);
+ virtual int detachObject(StaticANIObject *obj);
+ virtual void detachAllObjects();
+ virtual MessageQueue *startMove(StaticANIObject *subj, int xpos, int ypos, int fuzzyMatch, int staticsId);
virtual MessageQueue *doWalkTo(StaticANIObject *subj, int xpos, int ypos, int fuzzyMatch, int staticsId);
void initMovGraph2();
@@ -156,10 +156,10 @@ public:
virtual ~MctlLadder();
int collisionDetection(StaticANIObject *man);
- virtual void addObject(StaticANIObject *obj);
- virtual int removeObject(StaticANIObject *obj) { return 1; }
- virtual void freeItems();
- virtual MessageQueue *method34(StaticANIObject *subj, int xpos, int ypos, int fuzzyMatch, int staticsId);
+ virtual void attachObject(StaticANIObject *obj);
+ virtual int detachObject(StaticANIObject *obj) { return 1; }
+ virtual void detachAllObjects();
+ virtual MessageQueue *startMove(StaticANIObject *subj, int xpos, int ypos, int fuzzyMatch, int staticsId);
virtual MessageQueue *doWalkTo(StaticANIObject *subj, int xpos, int ypos, int fuzzyMatch, int staticsId);
MessageQueue *controllerWalkTo(StaticANIObject *ani, int off);
@@ -173,12 +173,12 @@ class MovGraphNode : public CObject {
public:
int _x;
int _y;
- int _distance;
+ int _z;
int16 _field_10;
int _field_14;
public:
- MovGraphNode() : _x(0), _y(0), _distance(0), _field_10(0), _field_14(0) { _objtype = kObjTypeMovGraphNode; }
+ MovGraphNode() : _x(0), _y(0), _z(0), _field_10(0), _field_14(0) { _objtype = kObjTypeMovGraphNode; }
virtual bool load(MfcArchive &file);
};
@@ -225,7 +225,7 @@ class MovGraphLink : public CObject {
int _flags;
int _field_38;
int _field_3C;
- double _distance;
+ double _z;
double _angle;
MovGraphReact *_movGraphReact;
char *_name;
@@ -236,7 +236,7 @@ class MovGraphLink : public CObject {
virtual bool load(MfcArchive &file);
- void calcNodeDistanceAndAngle();
+ void recalcLength();
};
struct MovStep {
@@ -290,23 +290,23 @@ public:
virtual bool load(MfcArchive &file);
- virtual void addObject(StaticANIObject *obj);
- virtual int removeObject(StaticANIObject *obj);
- virtual void freeItems();
- virtual Common::Array<MovItem *> *method28(StaticANIObject *ani, int x, int y, int flag1, int *rescount);
- virtual bool method2C(StaticANIObject *obj, int x, int y);
- virtual MessageQueue *method34(StaticANIObject *subj, int xpos, int ypos, int fuzzyMatch, int staticsId);
- virtual void changeCallback(MovArr *(*_callback1)(StaticANIObject *ani, Common::Array<MovItem *> *items, signed int counter));
- virtual bool method3C(StaticANIObject *ani, int flag);
- virtual bool method44(StaticANIObject *ani, int x, int y);
+ virtual void attachObject(StaticANIObject *obj);
+ virtual int detachObject(StaticANIObject *obj);
+ virtual void detachAllObjects();
+ virtual Common::Array<MovItem *> *getPaths(StaticANIObject *ani, int x, int y, int flag1, int *rescount);
+ virtual bool setPosImmediate(StaticANIObject *obj, int x, int y);
+ virtual MessageQueue *startMove(StaticANIObject *subj, int xpos, int ypos, int fuzzyMatch, int staticsId);
+ virtual void setSelFunc(MovArr *(*_callback1)(StaticANIObject *ani, Common::Array<MovItem *> *items, signed int counter));
+ virtual bool resetPosition(StaticANIObject *ani, int flag);
+ virtual bool canDropInventory(StaticANIObject *ani, int x, int y);
virtual MessageQueue *doWalkTo(StaticANIObject *subj, int xpos, int ypos, int fuzzyMatch, int staticsId);
virtual MessageQueue *method50(StaticANIObject *ani, MovArr *movarr, int staticsId);
double calcDistance(Common::Point *point, MovGraphLink *link, int fuzzyMatch);
- void calcNodeDistancesAndAngles();
- bool findClosestLink(int unusedArg, Common::Point *p, MovArr *movarr);
+ void recalcLinkParams();
+ bool getNearestPoint(int unusedArg, Common::Point *p, MovArr *movarr);
MovGraphNode *calcOffset(int ox, int oy);
- int getItemIndexByStaticAni(StaticANIObject *ani);
+ int getObjectIndex(StaticANIObject *ani);
Common::Array<MovArr *> *genMovArr(int x, int y, int *arrSize, int flag1, int flag2);
void findAllPaths(MovGraphLink *lnk, MovGraphLink *lnk2, Common::Array<MovGraphLink *> &tempObList1, Common::Array<MovGraphLink *> &tempObList2);
Common::Array<MovItem *> *calcMovItems(MovArr *movarr1, MovArr *movarr2, int *listCount);
@@ -374,10 +374,10 @@ public:
Common::Array<MovGraph2Item *> _items2;
public:
- virtual void addObject(StaticANIObject *obj);
- virtual int removeObject(StaticANIObject *obj);
- virtual void freeItems();
- virtual MessageQueue *method34(StaticANIObject *subj, int xpos, int ypos, int fuzzyMatch, int staticsId);
+ virtual void attachObject(StaticANIObject *obj);
+ virtual int detachObject(StaticANIObject *obj);
+ virtual void detachAllObjects();
+ virtual MessageQueue *startMove(StaticANIObject *subj, int xpos, int ypos, int fuzzyMatch, int staticsId);
virtual MessageQueue *doWalkTo(StaticANIObject *subj, int xpos, int ypos, int fuzzyMatch, int staticsId);
int getItemIndexByGameObjectId(int objectId);
@@ -404,10 +404,9 @@ class MctlConnectionPoint : public CObject {
public:
int _connectionX;
int _connectionY;
- int _field_C;
- int _field_10;
- int16 _field_14;
- int16 _field_16;
+ int _mctlflags;
+ int _mctlstatic;
+ int16 _mctlmirror;
MessageQueue *_messageQueueObj;
int _motionControllerObj;
diff --git a/engines/fullpipe/scenes.cpp b/engines/fullpipe/scenes.cpp
index 13c653ad09..32aa955a61 100644
--- a/engines/fullpipe/scenes.cpp
+++ b/engines/fullpipe/scenes.cpp
@@ -583,8 +583,8 @@ bool FullpipeEngine::sceneSwitcher(EntranceInfo *entrance) {
_aniMan2 = _aniMan;
MctlCompound *cmp = getSc2MctlCompoundBySceneId(entrance->_sceneId);
cmp->initMovGraph2();
- cmp->addObject(_aniMan);
- cmp->setEnabled();
+ cmp->attachObject(_aniMan);
+ cmp->activate();
getGameLoaderInteractionController()->enableFlag24();
setInputDisabled(0);
diff --git a/engines/fullpipe/scenes/scene04.cpp b/engines/fullpipe/scenes/scene04.cpp
index 4a87ae5b87..c0f0960aba 100644
--- a/engines/fullpipe/scenes/scene04.cpp
+++ b/engines/fullpipe/scenes/scene04.cpp
@@ -275,7 +275,7 @@ void sceneHandler04_clickButton() {
}
void sceneHandler04_downLadder(int x, int y) {
- g_vars->scene04_ladder->method34(g_fp->_aniMan, x + g_vars->scene04_ladder->_ladder_field_20, y + g_vars->scene04_ladder->_ladder_field_24, 0, 0);
+ g_vars->scene04_ladder->startMove(g_fp->_aniMan, x + g_vars->scene04_ladder->_ladder_field_20, y + g_vars->scene04_ladder->_ladder_field_24, 0, 0);
}
void sceneHandler04_walkClimbLadder(ExCommand *ex) {
@@ -321,7 +321,7 @@ void sceneHandler04_walkClimbLadder(ExCommand *ex) {
g_vars->scene04_ladder->_ladder_field_20 = 0;
g_vars->scene04_ladder->_ladder_field_24 = -60;
- g_vars->scene04_ladder->addObject(g_fp->_aniMan);
+ g_vars->scene04_ladder->attachObject(g_fp->_aniMan);
if (g_vars->scene04_soundPlaying) {
g_vars->scene04_ladder->_ladmovements.front()->movVars->varUpStart = MV_MAN_STARTLADDER2;
@@ -337,7 +337,7 @@ void sceneHandler04_walkClimbLadder(ExCommand *ex) {
g_fp->_aniMan->_priority = 12;
- getSc2MctlCompoundBySceneId(g_fp->_currentScene->_sceneId)->clearEnabled();
+ getSc2MctlCompoundBySceneId(g_fp->_currentScene->_sceneId)->deactivate();
getGameLoaderInteractionController()->disableFlag24();
}
@@ -368,7 +368,7 @@ void sceneHandler04_clickLadder() {
} else {
if (g_fp->_aniMan->isIdle() && !(g_fp->_aniMan->_flags & 0x100)) {
if (abs(1095 - g_vars->scene04_dudePosX) > 1 || abs(434 - g_vars->scene04_dudePosY) > 1) {
- MessageQueue *mq = getSc2MctlCompoundBySceneId(g_fp->_currentScene->_sceneId)->method34(g_fp->_aniMan, 1095, 434, 1, ST_MAN_UP);
+ MessageQueue *mq = getSc2MctlCompoundBySceneId(g_fp->_currentScene->_sceneId)->startMove(g_fp->_aniMan, 1095, 434, 1, ST_MAN_UP);
if (mq) {
ExCommand *ex = new ExCommand(0, 17, MSG_SC4_CLICKLADDER, 0, 0, 0, 1, 0, 0, 0);
@@ -533,7 +533,7 @@ void sceneHandler04_manFromBottle() {
g_vars->scene04_ladder = 0;
- getSc2MctlCompoundBySceneId(g_fp->_currentScene->_sceneId)->setEnabled();
+ getSc2MctlCompoundBySceneId(g_fp->_currentScene->_sceneId)->activate();
getGameLoaderInteractionController()->enableFlag24();
}
@@ -1120,7 +1120,7 @@ void sceneHandler04_leaveLadder(ExCommand *ex) {
ex->_messageKind = 0;
- mc->setEnabled();
+ mc->activate();
getGameLoaderInteractionController()->enableFlag24();
} else {
delete mq;
@@ -1275,7 +1275,7 @@ void sceneHandler04_winArcade() {
g_vars->scene04_objectIsTaken = false;
g_vars->scene04_soundPlaying = false;
- getSc2MctlCompoundBySceneId(g_fp->_currentScene->_sceneId)->setEnabled();
+ getSc2MctlCompoundBySceneId(g_fp->_currentScene->_sceneId)->activate();
getGameLoaderInteractionController()->enableFlag24();
diff --git a/engines/fullpipe/scenes/scene06.cpp b/engines/fullpipe/scenes/scene06.cpp
index 06ec20dcb5..e9cecc42f0 100644
--- a/engines/fullpipe/scenes/scene06.cpp
+++ b/engines/fullpipe/scenes/scene06.cpp
@@ -118,7 +118,7 @@ void sceneHandler06_winArcade() {
sceneHandler06_setExits(g_fp->_currentScene);
- getCurrSceneSc2MotionController()->setEnabled();
+ getCurrSceneSc2MotionController()->activate();
getGameLoaderInteractionController()->enableFlag24();
}
@@ -300,7 +300,7 @@ void sceneHandler06_startAiming() {
if (getCurrSceneSc2MotionController()->_isEnabled)
g_fp->_updateScreenCallback = sceneHandler06_updateScreenCallback;
- getCurrSceneSc2MotionController()->clearEnabled();
+ getCurrSceneSc2MotionController()->deactivate();
getGameLoaderInteractionController()->disableFlag24();
g_vars->scene06_ballDrop->queueMessageQueue(0);
@@ -313,7 +313,7 @@ void sceneHandler06_takeBall() {
|| abs(452 - g_fp->_aniMan->_oy) > 1
|| g_fp->_aniMan->_movement
|| g_fp->_aniMan->_statics->_staticsId != (0x4000 | ST_MAN_RIGHT)) {
- MessageQueue *mq = getCurrSceneSc2MotionController()->method34(g_fp->_aniMan, 1158, 452, 1, (0x4000 | ST_MAN_RIGHT));
+ MessageQueue *mq = getCurrSceneSc2MotionController()->startMove(g_fp->_aniMan, 1158, 452, 1, (0x4000 | ST_MAN_RIGHT));
if (mq) {
ExCommand *ex = new ExCommand(0, 17, MSG_SC6_TAKEBALL, 0, 0, 0, 1, 0, 0, 0);
@@ -562,7 +562,7 @@ int sceneHandler06(ExCommand *ex) {
case MSG_SC6_RESTORESCROLL:
g_fp->_aniMan2 = g_fp->_aniMan;
- getCurrSceneSc2MotionController()->setEnabled();
+ getCurrSceneSc2MotionController()->activate();
getGameLoaderInteractionController()->enableFlag24();
sceneHandler06_setExits(g_fp->_currentScene);
break;
diff --git a/engines/fullpipe/scenes/scene08.cpp b/engines/fullpipe/scenes/scene08.cpp
index a5f5a8b389..d64df8688e 100644
--- a/engines/fullpipe/scenes/scene08.cpp
+++ b/engines/fullpipe/scenes/scene08.cpp
@@ -224,7 +224,7 @@ void sceneHandler08_startArcade() {
g_vars->scene08_onBelly = false;
getGameLoaderInteractionController()->disableFlag24();
- getCurrSceneSc2MotionController()->clearEnabled();
+ getCurrSceneSc2MotionController()->deactivate();
g_vars->scene08_batuta->stopAnim_maybe();
@@ -276,7 +276,7 @@ void sceneHandler08_finishArcade() {
g_vars->scene08_inArcade = false;
getGameLoaderInteractionController()->enableFlag24();
- getCurrSceneSc2MotionController()->setEnabled();
+ getCurrSceneSc2MotionController()->activate();
}
void sceneHandler08_jumpOff(ExCommand *cmd) {
diff --git a/engines/fullpipe/scenes/scene09.cpp b/engines/fullpipe/scenes/scene09.cpp
index 99cf0b20fd..ffe8a1b2de 100644
--- a/engines/fullpipe/scenes/scene09.cpp
+++ b/engines/fullpipe/scenes/scene09.cpp
@@ -271,7 +271,7 @@ void sceneHandler09_spitterClick() {
g_vars->scene09_spitter->setPicAniInfo(&info);
if (ABS(x - g_fp->_aniMan->_ox) > 1 || ABS(y - g_fp->_aniMan->_oy) > 1) {
- MessageQueue *mq = getCurrSceneSc2MotionController()->method34(g_fp->_aniMan, x, y, 1, ST_MAN_UP);
+ MessageQueue *mq = getCurrSceneSc2MotionController()->startMove(g_fp->_aniMan, x, y, 1, ST_MAN_UP);
if (mq) {
ExCommand *ex = new ExCommand(0, 17, MSG_SC9_PLVCLICK, 0, 0, 0, 1, 0, 0, 0);
@@ -602,14 +602,14 @@ int sceneHandler09(ExCommand *cmd) {
break;
case MSG_SC9_FROMLADDER:
- getCurrSceneSc2MotionController()->setEnabled();
+ getCurrSceneSc2MotionController()->activate();
getGameLoaderInteractionController()->enableFlag24();
g_vars->scene09_dudeIsOnLadder = false;
break;
case MSG_SC9_TOLADDER:
- getCurrSceneSc2MotionController()->clearEnabled();
+ getCurrSceneSc2MotionController()->deactivate();
getGameLoaderInteractionController()->disableFlag24();
g_vars->scene09_dudeIsOnLadder = true;
diff --git a/engines/fullpipe/scenes/scene10.cpp b/engines/fullpipe/scenes/scene10.cpp
index 8c9e0b67d0..3e2a918b64 100644
--- a/engines/fullpipe/scenes/scene10.cpp
+++ b/engines/fullpipe/scenes/scene10.cpp
@@ -82,7 +82,7 @@ void sceneHandler10_clickGum() {
int y = g_vars->scene10_gum->_oy - 48;
if (abs(x - g_fp->_aniMan->_ox) > 1 || abs(y - g_fp->_aniMan->_oy) > 1) {
- MessageQueue *mq = getCurrSceneSc2MotionController()->method34(g_fp->_aniMan, x, y, 1, ST_MAN_RIGHT);
+ MessageQueue *mq = getCurrSceneSc2MotionController()->startMove(g_fp->_aniMan, x, y, 1, ST_MAN_RIGHT);
if (mq) {
ExCommand *ex = new ExCommand(0, 17, MSG_SC10_CLICKGUM, 0, 0, 0, 1, 0, 0, 0);
ex->_excFlags = 2;
diff --git a/engines/fullpipe/scenes/scene11.cpp b/engines/fullpipe/scenes/scene11.cpp
index 0ce82f5d5f..1fa5cabc15 100644
--- a/engines/fullpipe/scenes/scene11.cpp
+++ b/engines/fullpipe/scenes/scene11.cpp
@@ -191,7 +191,7 @@ void sceneHandler11_restartMan() {
chainObjQueue(0, QU_SC11_RESTARTMAN, 1);
getGameLoaderInteractionController()->enableFlag24();
- getCurrSceneSc2MotionController()->setEnabled();
+ getCurrSceneSc2MotionController()->activate();
g_vars->scene11_scrollIsEnabled = false;
}
@@ -234,7 +234,7 @@ int sceneHandler11_updateScreenCallback() {
void sceneHandler11_manToSwing() {
g_vars->scene11_arcadeIsOn = true;
- getCurrSceneSc2MotionController()->clearEnabled();
+ getCurrSceneSc2MotionController()->deactivate();
getGameLoaderInteractionController()->disableFlag24();
g_fp->_aniMan2->hide();
@@ -271,7 +271,7 @@ void sceneHandler11_putABoot() {
void sceneHandler11_putBoot() {
if (abs(353 - g_fp->_aniMan->_ox) > 1 || abs(498 - g_fp->_aniMan->_oy) > 1
|| g_fp->_aniMan->_movement || g_fp->_aniMan->_statics->_staticsId != ST_MAN_RIGHT) {
- MessageQueue *mq = getCurrSceneSc2MotionController()->method34(g_fp->_aniMan, 353, 498, 1, ST_MAN_RIGHT);
+ MessageQueue *mq = getCurrSceneSc2MotionController()->startMove(g_fp->_aniMan, 353, 498, 1, ST_MAN_RIGHT);
if (mq) {
ExCommand *ex = new ExCommand(0, 17, MSG_SC11_PUTBOOT, 0, 0, 0, 1, 0, 0, 0);
@@ -299,7 +299,7 @@ void sceneHandler11_jumpFromSwing() {
g_vars->scene11_hint->_flags &= 0xFFFB;
g_vars->scene11_scrollIsEnabled = false;
- getCurrSceneSc2MotionController()->setEnabled();
+ getCurrSceneSc2MotionController()->activate();
getGameLoaderInteractionController()->enableFlag24();
g_vars->scene11_swingOldAngle = 0.0;
diff --git a/engines/fullpipe/scenes/scene14.cpp b/engines/fullpipe/scenes/scene14.cpp
index 446f477133..dc919c6d7f 100644
--- a/engines/fullpipe/scenes/scene14.cpp
+++ b/engines/fullpipe/scenes/scene14.cpp
@@ -174,7 +174,7 @@ void sceneHandler14_exitScene() {
chainQueue(QU_SC14_ENDARCADE, 0);
getGameLoaderInteractionController()->disableFlag24();
- getCurrSceneSc2MotionController()->clearEnabled();
+ getCurrSceneSc2MotionController()->deactivate();
}
void sceneHandler14_showBallMan() {
@@ -284,7 +284,7 @@ void sceneHandler14_endArcade() {
setInputDisabled(0);
getGameLoaderInteractionController()->enableFlag24();
- getCurrSceneSc2MotionController()->setEnabled();
+ getCurrSceneSc2MotionController()->activate();
BehaviorEntryInfo *beh = g_fp->_behaviorManager->getBehaviorEntryInfoByMessageQueueDataId(g_vars->scene14_grandma, ST_GMA_SIT, QU_GMA_BLINK);
if (beh)
@@ -365,7 +365,7 @@ void sceneHandler14_startArcade() {
g_fp->_aniMan->_priority = 25;
}
- getCurrSceneSc2MotionController()->clearEnabled();
+ getCurrSceneSc2MotionController()->deactivate();
getGameLoaderInteractionController()->disableFlag24();
g_fp->_aniMan2 = 0;
@@ -458,7 +458,7 @@ bool sceneHandler14_arcadeProcessClick(ExCommand *cmd) {
if (cmd->_sceneClickX > 1237)
return false;
- MessageQueue *mq = getCurrSceneSc2MotionController()->method34(g_fp->_aniMan, 1237, 451, 1, 0);
+ MessageQueue *mq = getCurrSceneSc2MotionController()->startMove(g_fp->_aniMan, 1237, 451, 1, 0);
if (!mq)
return false;
@@ -473,7 +473,7 @@ bool sceneHandler14_arcadeProcessClick(ExCommand *cmd) {
cmd->_messageKind = 0;
- getCurrSceneSc2MotionController()->clearEnabled();
+ getCurrSceneSc2MotionController()->deactivate();
getGameLoaderInteractionController()->disableFlag24();
return true;
}
diff --git a/engines/fullpipe/scenes/scene16.cpp b/engines/fullpipe/scenes/scene16.cpp
index df005950d2..5079863b4e 100644
--- a/engines/fullpipe/scenes/scene16.cpp
+++ b/engines/fullpipe/scenes/scene16.cpp
@@ -298,7 +298,7 @@ void sceneHandler16_drink() {
void sceneHandler16_mugClick() {
if (abs(310 - g_fp->_aniMan->_ox) >= 1 || abs(449 - g_fp->_aniMan->_oy) >= 1
|| g_fp->_aniMan->_movement || g_fp->_aniMan->_statics->_staticsId != ST_MAN_RIGHT) {
- MessageQueue *mq = getCurrSceneSc2MotionController()->method34(g_fp->_aniMan, 310, 449, 1, ST_MAN_RIGHT);
+ MessageQueue *mq = getCurrSceneSc2MotionController()->startMove(g_fp->_aniMan, 310, 449, 1, ST_MAN_RIGHT);
if (mq) {
ExCommand *ex = new ExCommand(0, 17, MSG_SC16_MUGCLICK, 0, 0, 0, 1, 0, 0, 0);
diff --git a/engines/fullpipe/scenes/scene18and19.cpp b/engines/fullpipe/scenes/scene18and19.cpp
index 4f6677876b..5af7ef9043 100644
--- a/engines/fullpipe/scenes/scene18and19.cpp
+++ b/engines/fullpipe/scenes/scene18and19.cpp
@@ -379,7 +379,7 @@ int scene19_updateCursor() {
void sceneHandler18_clickBoard() {
if (ABS(967 - g_fp->_aniMan->_ox) > 1 || ABS(379 - g_fp->_aniMan->_oy) > 1 || g_fp->_aniMan->_statics->_staticsId != ST_MAN_RIGHT) {
- MessageQueue *mq = getCurrSceneSc2MotionController()->method34(g_fp->_aniMan, 967, 379, 1, ST_MAN_RIGHT);
+ MessageQueue *mq = getCurrSceneSc2MotionController()->startMove(g_fp->_aniMan, 967, 379, 1, ST_MAN_RIGHT);
ExCommand *ex = new ExCommand(0, 17, MSG_SC18_MANREADY, 0, 0, 0, 1, 0, 0, 0);
ex->_excFlags = 2;
diff --git a/engines/fullpipe/scenes/scene22.cpp b/engines/fullpipe/scenes/scene22.cpp
index 542834b51a..f51469da69 100644
--- a/engines/fullpipe/scenes/scene22.cpp
+++ b/engines/fullpipe/scenes/scene22.cpp
@@ -191,7 +191,7 @@ void sceneHandler22_stoolLogic(ExCommand *cmd) {
xpos = 841;
manId = ST_MAN_RIGHT;
LABEL_31:
- mq = getCurrSceneSc2MotionController()->method34(g_fp->_aniMan, xpos, 449, 1, manId);
+ mq = getCurrSceneSc2MotionController()->startMove(g_fp->_aniMan, xpos, 449, 1, manId);
if (!mq)
return;
@@ -278,7 +278,7 @@ void sceneHandler22_stoolLogic(ExCommand *cmd) {
}
}
- mq = getCurrSceneSc2MotionController()->method34(g_fp->_aniMan, 1010, 443, 1, ST_MAN_UP);
+ mq = getCurrSceneSc2MotionController()->startMove(g_fp->_aniMan, 1010, 443, 1, ST_MAN_UP);
if (mq) {
mq->addExCommandToEnd(cmd->createClone());
@@ -318,13 +318,13 @@ int sceneHandler22(ExCommand *cmd) {
g_vars->scene22_dudeIsOnStool = false;
g_vars->scene22_interactionIsDisabled = false;
- getCurrSceneSc2MotionController()->setEnabled();
+ getCurrSceneSc2MotionController()->activate();
g_fp->_behaviorManager->setFlagByStaticAniObject(g_fp->_aniMan, 1);
break;
case MSG_SC22_ONSTOOL:
g_vars->scene22_dudeIsOnStool = true;
- getCurrSceneSc2MotionController()->clearEnabled();
+ getCurrSceneSc2MotionController()->deactivate();
g_fp->_behaviorManager->setFlagByStaticAniObject(g_fp->_aniMan, 0);
break;
diff --git a/engines/fullpipe/scenes/scene23.cpp b/engines/fullpipe/scenes/scene23.cpp
index ded467e438..d6075c271b 100644
--- a/engines/fullpipe/scenes/scene23.cpp
+++ b/engines/fullpipe/scenes/scene23.cpp
@@ -296,7 +296,7 @@ void sceneHandler23_pushButton(ExCommand *cmd) {
if (g_fp->_msgX == 276 && g_fp->_msgY == 438 )
return;
- MessageQueue *mq = getCurrSceneSc2MotionController()->method34(g_fp->_aniMan, 276, 438, 1, ST_MAN_RIGHT);
+ MessageQueue *mq = getCurrSceneSc2MotionController()->startMove(g_fp->_aniMan, 276, 438, 1, ST_MAN_RIGHT);
if (mq) {
mq->addExCommandToEnd(cmd->createClone());
@@ -424,7 +424,7 @@ int sceneHandler23(ExCommand *cmd) {
case MSG_SC23_FROMSTOOL:
g_vars->scene23_isOnStool = false;
- getCurrSceneSc2MotionController()->setEnabled();
+ getCurrSceneSc2MotionController()->activate();
getGameLoaderInteractionController()->enableFlag24();
g_fp->_behaviorManager->setFlagByStaticAniObject(g_fp->_aniMan, 1);
@@ -438,7 +438,7 @@ int sceneHandler23(ExCommand *cmd) {
case MSG_SC23_ONSTOOL:
g_vars->scene23_isOnStool = true;
- getCurrSceneSc2MotionController()->clearEnabled();
+ getCurrSceneSc2MotionController()->deactivate();
getGameLoaderInteractionController()->disableFlag24();
g_fp->_behaviorManager->setFlagByStaticAniObject(g_fp->_aniMan, 0);
diff --git a/engines/fullpipe/scenes/scene25.cpp b/engines/fullpipe/scenes/scene25.cpp
index a07330f057..07eda73cf2 100644
--- a/engines/fullpipe/scenes/scene25.cpp
+++ b/engines/fullpipe/scenes/scene25.cpp
@@ -153,7 +153,7 @@ void sceneHandler25_enterMan() {
if (g_vars->scene25_waterIsPresent) {
chainQueue(QU_SC25_ENTERUP_WATER, 1);
- getCurrSceneSc2MotionController()->clearEnabled();
+ getCurrSceneSc2MotionController()->deactivate();
} else {
chainQueue(QU_SC25_ENTERUP_FLOOR, 1);
}
diff --git a/engines/fullpipe/scenes/scene26.cpp b/engines/fullpipe/scenes/scene26.cpp
index b9d9161e7d..baed928d00 100644
--- a/engines/fullpipe/scenes/scene26.cpp
+++ b/engines/fullpipe/scenes/scene26.cpp
@@ -257,7 +257,7 @@ void sceneHandler26_clickVent(StaticANIObject *ani, ExCommand *cmd) {
int y = ani->_oy + 61;
if (abs(x - g_fp->_aniMan->_ox) > 1 || abs(y - g_fp->_aniMan->_oy) > 1 || g_fp->_aniMan->_movement || g_fp->_aniMan->_statics->_staticsId != ST_MAN_UP) {
- MessageQueue *mq = getCurrSceneSc2MotionController()->method34(g_fp->_aniMan, x, y, 1, ST_MAN_UP);
+ MessageQueue *mq = getCurrSceneSc2MotionController()->startMove(g_fp->_aniMan, x, y, 1, ST_MAN_UP);
if (mq) {
ExCommand *ex = new ExCommand(0, 17, MSG_SC26_CLICKVENT, 0, 0, 0, 1, 0, 0, 0);
diff --git a/engines/fullpipe/scenes/scene27.cpp b/engines/fullpipe/scenes/scene27.cpp
index 8ec05caaff..9570d30913 100644
--- a/engines/fullpipe/scenes/scene27.cpp
+++ b/engines/fullpipe/scenes/scene27.cpp
@@ -159,7 +159,7 @@ void sceneHandler27_driverGiveVent() {
g_vars->scene27_driverHasVent = false;
- getCurrSceneSc2MotionController()->setEnabled();
+ getCurrSceneSc2MotionController()->activate();
getGameLoaderInteractionController()->enableFlag24();
g_fp->_behaviorManager->setFlagByStaticAniObject(g_fp->_aniMan, 1);
@@ -226,7 +226,7 @@ void sceneHandler27_throwBat() {
g_fp->_aniMan->startAnim(MV_MAN27_THROWBET, 0, -1);
- getCurrSceneSc2MotionController()->clearEnabled();
+ getCurrSceneSc2MotionController()->deactivate();
getGameLoaderInteractionController()->disableFlag24();
g_fp->_behaviorManager->setFlagByStaticAniObject(g_fp->_aniMan, 0);
@@ -247,7 +247,7 @@ void sceneHandler27_clickBat(ExCommand *cmd) {
if (ABS(bx - g_fp->_aniMan->_ox) > 1 || ABS(by - g_fp->_aniMan->_oy) > 1
|| g_fp->_aniMan->_movement || g_fp->_aniMan->_statics->_staticsId != ST_MAN_RIGHT) {
- MessageQueue *mq = getCurrSceneSc2MotionController()->method34(g_fp->_aniMan, bx, by, 1, ST_MAN_RIGHT);
+ MessageQueue *mq = getCurrSceneSc2MotionController()->startMove(g_fp->_aniMan, bx, by, 1, ST_MAN_RIGHT);
if (mq) {
mq->addExCommandToEnd(cmd->createClone());
@@ -501,7 +501,7 @@ void sceneHandler27_batLogic() {
default:
chainQueue(QU_SC27_RESTARTBETS, 1);
- getCurrSceneSc2MotionController()->setEnabled();
+ getCurrSceneSc2MotionController()->activate();
getGameLoaderInteractionController()->enableFlag24();
g_fp->_behaviorManager->setFlagByStaticAniObject(g_fp->_aniMan, 1);
diff --git a/engines/fullpipe/scenes/scene28.cpp b/engines/fullpipe/scenes/scene28.cpp
index de5a96e70d..75ba2567b2 100644
--- a/engines/fullpipe/scenes/scene28.cpp
+++ b/engines/fullpipe/scenes/scene28.cpp
@@ -258,7 +258,7 @@ void sceneHandler28_clickLift(int keycode) {
if (abs(x - g_fp->_aniMan->_ox) > 1 || abs(472 - g_fp->_aniMan->_oy) > 1
|| g_fp->_aniMan->_movement
|| g_fp->_aniMan->_statics->_staticsId != ST_MAN_UP) {
- MessageQueue *mq = getCurrSceneSc2MotionController()->method34(g_fp->_aniMan, x, 472, 1, ST_MAN_UP);
+ MessageQueue *mq = getCurrSceneSc2MotionController()->startMove(g_fp->_aniMan, x, 472, 1, ST_MAN_UP);
if (mq) {
ExCommand *ex = new ExCommand(0, 17, MSG_SC28_CLICKLIFT, 0, 0, 0, 1, 0, 0, 0);
ex->_excFlags |= 3;
diff --git a/engines/fullpipe/scenes/scene29.cpp b/engines/fullpipe/scenes/scene29.cpp
index 222a541554..a03671a4d0 100644
--- a/engines/fullpipe/scenes/scene29.cpp
+++ b/engines/fullpipe/scenes/scene29.cpp
@@ -687,7 +687,7 @@ void sceneHandler29_ballHitCheck() {
void sceneHandler29_manFromL() {
if (g_vars->scene29_manX < 497 && !g_vars->scene29_scrollingDisabled) {
- getCurrSceneSc2MotionController()->setEnabled();
+ getCurrSceneSc2MotionController()->activate();
getGameLoaderInteractionController()->enableFlag24();
g_fp->_aniMan->changeStatics2(ST_MAN_RIGHT | 0x4000);
@@ -700,7 +700,7 @@ void sceneHandler29_manFromL() {
}
void sceneHandler29_manFromR() {
- getCurrSceneSc2MotionController()->setEnabled();
+ getCurrSceneSc2MotionController()->activate();
getGameLoaderInteractionController()->enableFlag24();
chainQueue(QU_SC29_MANFROM_R, 1);
@@ -721,7 +721,7 @@ int sceneHandler29_updateScreenCallback() {
}
void sceneHandler29_manToL() {
- getCurrSceneSc2MotionController()->clearEnabled();
+ getCurrSceneSc2MotionController()->deactivate();
getGameLoaderInteractionController()->disableFlag24();
chainQueue(QU_SC29_MANTO_L, 1);
@@ -737,7 +737,7 @@ void sceneHandler29_manToL() {
}
void sceneHandler29_manToR() {
- getCurrSceneSc2MotionController()->clearEnabled();
+ getCurrSceneSc2MotionController()->deactivate();
getGameLoaderInteractionController()->disableFlag24();
chainQueue(QU_SC29_MANTO_R, 1);
@@ -763,7 +763,7 @@ void sceneHandler29_clickPorter(ExCommand *cmd) {
if (ABS(351 - g_vars->scene29_manX) > 1 || ABS(443 - g_vars->scene29_manY) > 1
|| g_fp->_aniMan->_movement || g_fp->_aniMan->_statics->_staticsId != ST_MAN_RIGHT) {
if (g_fp->_msgX != 351 || g_fp->_msgY != 443) {
- MessageQueue *mq = getCurrSceneSc2MotionController()->method34(g_fp->_aniMan, 351, 443, 1, ST_MAN_RIGHT);
+ MessageQueue *mq = getCurrSceneSc2MotionController()->startMove(g_fp->_aniMan, 351, 443, 1, ST_MAN_RIGHT);
if (mq) {
mq->addExCommandToEnd(cmd->createClone());
@@ -781,7 +781,7 @@ void sceneHandler29_clickPorter(ExCommand *cmd) {
if (ABS(1582 - g_vars->scene29_manX) > 1 || ABS(445 - g_fp->_aniMan->_oy) > 1
|| g_fp->_aniMan->_movement || g_fp->_aniMan->_statics->_staticsId != (0x4000 | ST_MAN_RIGHT)) {
if (g_fp->_msgX != 1582 || g_fp->_msgY != 445) {
- MessageQueue *mq = getCurrSceneSc2MotionController()->method34(g_fp->_aniMan, 1582, 445, 1, (0x4000 | ST_MAN_RIGHT));
+ MessageQueue *mq = getCurrSceneSc2MotionController()->startMove(g_fp->_aniMan, 1582, 445, 1, (0x4000 | ST_MAN_RIGHT));
if (mq) {
mq->addExCommandToEnd(cmd->createClone());
@@ -1001,7 +1001,7 @@ int sceneHandler29(ExCommand *cmd) {
g_vars->scene29_reachedFarRight = false;
g_vars->scene29_rideBackEnabled = false;
- getCurrSceneSc2MotionController()->setEnabled();
+ getCurrSceneSc2MotionController()->activate();
getGameLoaderInteractionController()->enableFlag24();
break;
diff --git a/engines/fullpipe/scenes/scene32.cpp b/engines/fullpipe/scenes/scene32.cpp
index 9279db7513..05b78efb3d 100644
--- a/engines/fullpipe/scenes/scene32.cpp
+++ b/engines/fullpipe/scenes/scene32.cpp
@@ -189,7 +189,7 @@ void sceneHandler32_trySit(ExCommand *cmd) {
g_vars->scene32_dudeIsSitting = true;
- getCurrSceneSc2MotionController()->clearEnabled();
+ getCurrSceneSc2MotionController()->deactivate();
getGameLoaderInteractionController()->disableFlag24();
}
}
@@ -236,7 +236,7 @@ void sceneHandler32_ladderLogic(ExCommand *cmd) {
g_vars->scene32_dudeOnLadder = false;
- getCurrSceneSc2MotionController()->setEnabled();
+ getCurrSceneSc2MotionController()->activate();
getGameLoaderInteractionController()->enableFlag24();
}
@@ -258,7 +258,7 @@ void sceneHandler32_potLogic(ExCommand *cmd) {
mq->setFlags(mq->getFlags() | 1);
mq->chain(0);
- getCurrSceneSc2MotionController()->setEnabled();
+ getCurrSceneSc2MotionController()->activate();
getGameLoaderInteractionController()->enableFlag24();
g_vars->scene32_dudeIsSitting = false;
@@ -330,7 +330,7 @@ int sceneHandler32(ExCommand *cmd) {
case MSG_SC32_ONLADDER:
g_vars->scene32_dudeOnLadder = true;
- getCurrSceneSc2MotionController()->clearEnabled();
+ getCurrSceneSc2MotionController()->deactivate();
getGameLoaderInteractionController()->disableFlag24();
break;
diff --git a/engines/fullpipe/scenes/scene34.cpp b/engines/fullpipe/scenes/scene34.cpp
index 1c8c8b4855..32fb192756 100644
--- a/engines/fullpipe/scenes/scene34.cpp
+++ b/engines/fullpipe/scenes/scene34.cpp
@@ -115,7 +115,7 @@ int scene34_updateCursor() {
}
void sceneHandler34_leaveBoard() {
- getCurrSceneSc2MotionController()->setEnabled();
+ getCurrSceneSc2MotionController()->activate();
getGameLoaderInteractionController()->enableFlag24();
g_fp->_behaviorManager->setFlagByStaticAniObject(g_fp->_aniMan, 1);
@@ -124,7 +124,7 @@ void sceneHandler34_leaveBoard() {
}
void sceneHandler34_onBoard() {
- getCurrSceneSc2MotionController()->clearEnabled();
+ getCurrSceneSc2MotionController()->deactivate();
getGameLoaderInteractionController()->disableFlag24();
g_fp->_behaviorManager->setFlagByStaticAniObject(g_fp->_aniMan, 0);
@@ -149,7 +149,7 @@ void sceneHandler34_hideStool() {
}
void sceneHandler34_climb() {
- getCurrSceneSc2MotionController()->clearEnabled();
+ getCurrSceneSc2MotionController()->deactivate();
getGameLoaderInteractionController()->disableFlag24();
g_fp->_behaviorManager->setFlagByStaticAniObject(g_fp->_aniMan, 0);
@@ -287,7 +287,7 @@ void sceneHandler34_showStool() {
}
void sceneHandler34_unclimb() {
- getCurrSceneSc2MotionController()->setEnabled();
+ getCurrSceneSc2MotionController()->activate();
getGameLoaderInteractionController()->enableFlag24();
g_fp->_behaviorManager->setFlagByStaticAniObject(g_fp->_aniMan, 1);
@@ -323,7 +323,7 @@ int sceneHandler34(ExCommand *cmd) {
case MSG_SC34_FROMCACTUS:
g_vars->scene34_dudeOnCactus = false;
- getCurrSceneSc2MotionController()->setEnabled();
+ getCurrSceneSc2MotionController()->activate();
getGameLoaderInteractionController()->enableFlag24();
g_fp->_behaviorManager->setFlagByStaticAniObject(g_fp->_aniMan, 1);
@@ -381,7 +381,7 @@ int sceneHandler34(ExCommand *cmd) {
case MSG_SC34_ONCACTUS:
g_vars->scene34_dudeOnCactus = true;
- getCurrSceneSc2MotionController()->clearEnabled();
+ getCurrSceneSc2MotionController()->deactivate();
getGameLoaderInteractionController()->disableFlag24();
g_fp->_behaviorManager->setFlagByStaticAniObject(g_fp->_aniMan, 0);
diff --git a/engines/fullpipe/scenes/sceneFinal.cpp b/engines/fullpipe/scenes/sceneFinal.cpp
index d0040463ef..8b3ecb1025 100644
--- a/engines/fullpipe/scenes/sceneFinal.cpp
+++ b/engines/fullpipe/scenes/sceneFinal.cpp
@@ -97,7 +97,7 @@ void sceneHandlerFinal_goto2() {
void sceneHandlerFinal_startFinal() {
g_vars->sceneFinal_var01 = 1;
- getCurrSceneSc2MotionController()->clearEnabled();
+ getCurrSceneSc2MotionController()->deactivate();
getGameLoaderInteractionController()->disableFlag24();
g_fp->_aniMan2 = 0;
diff --git a/engines/gob/sound/cdrom.cpp b/engines/gob/sound/cdrom.cpp
index eca6ca4c9e..b862ca96fb 100644
--- a/engines/gob/sound/cdrom.cpp
+++ b/engines/gob/sound/cdrom.cpp
@@ -91,7 +91,10 @@ void CDROM::startTrack(const char *trackName) {
return;
}
- Common::strlcpy(_curTrack, trackName, 16);
+ Common::String curTrack(trackName);
+ curTrack.toUppercase();
+
+ Common::strlcpy(_curTrack, curTrack.c_str(), 16);
stopPlaying();
_curTrackBuffer = matchPtr;
diff --git a/engines/groovie/music.cpp b/engines/groovie/music.cpp
index c00290b155..cf65e012c8 100644
--- a/engines/groovie/music.cpp
+++ b/engines/groovie/music.cpp
@@ -934,16 +934,18 @@ bool MusicPlayerIOS::load(uint32 fileref, bool loop) {
}
// Create the audio stream
- Audio::AudioStream *audStream = Audio::SeekableAudioStream::openStreamFile(info.filename);
+ Audio::SeekableAudioStream *seekStream = Audio::SeekableAudioStream::openStreamFile(info.filename);
- if (!audStream) {
+ if (!seekStream) {
warning("Could not play audio file '%s'", info.filename.c_str());
return false;
}
+ Audio::AudioStream *audStream = seekStream;
+
// Loop if requested
if (loop)
- audStream = Audio::makeLoopingAudioStream((Audio::RewindableAudioStream *)audStream, 0);
+ audStream = Audio::makeLoopingAudioStream(seekStream, 0);
// MIDI player handles volume reset on load, IOS player doesn't - force update here
updateVolume();
diff --git a/engines/hopkins/computer.cpp b/engines/hopkins/computer.cpp
index 18b16cb4c8..16977e0cb8 100644
--- a/engines/hopkins/computer.cpp
+++ b/engines/hopkins/computer.cpp
@@ -325,13 +325,13 @@ static const char _spanishText[] =
"% **** ORDENADOR DEL FBI NUMERO 4985 **** ORDENADOR J.HOPKINS *****\n"
"% **** ORDENADOR DEL FBI NUMERO 4998 **** ORDENADOR S.COLLINS *****\n"
"% *** ORDENADOR DEL FBI NUMERO 4997 *** ORDENADOR DE ACCESO LIBRE ***\n"
-"% LA CONTRASE\0245A ES: ALLFREE\n"
-"% ESCRIBE CONTRASE\0245A ACTUAL\n"
+"% LA CONTRASE\xA5" "A ES: ALLFREE\n"
+"% ESCRIBE CONTRASE\xA5" "A ACTUAL\n"
"% **** ACCESO DENEGADO ****\n"
"% 1) *** JUEGO ***\n"
"% 0) SALIR DEL ORDENADOR\n"
-"% 2) CADAVER EXTRA\0245O\n"
-"% 3) CADAVER EXTRA\0245O\n"
+"% 2) CADAVER EXTRA\xA5" "O\n"
+"% 3) CADAVER EXTRA\xA5" "O\n"
"% 4) SENADOR FERGUSSON\n"
"% 5) MATAPERROS\n"
"% 2) CIENTIFICO SECUESTRADO.\n"
diff --git a/engines/kyra/sound_intern.h b/engines/kyra/sound_intern.h
index 007ca3d3f5..4b77bf1351 100644
--- a/engines/kyra/sound_intern.h
+++ b/engines/kyra/sound_intern.h
@@ -151,7 +151,7 @@ private:
uint8 *_sfxFileData;
uint8 _sfxChannel;
- TownsEuphonyDriver *_driver;
+ EuphonyPlayer *_player;
bool _cdaPlaying;
diff --git a/engines/kyra/sound_towns.cpp b/engines/kyra/sound_towns.cpp
index 725dedae3f..65ab4f31ef 100644
--- a/engines/kyra/sound_towns.cpp
+++ b/engines/kyra/sound_towns.cpp
@@ -37,13 +37,13 @@ SoundTowns::SoundTowns(KyraEngine_v1 *vm, Audio::Mixer *mixer)
: Sound(vm, mixer), _lastTrack(-1), _musicTrackData(0), _sfxFileData(0), _cdaPlaying(0),
_sfxFileIndex((uint)-1), _musicFadeTable(0), _sfxWDTable(0), _sfxBTTable(0), _sfxChannel(0x46), _currentResourceSet(0) {
memset(&_resInfo, 0, sizeof(_resInfo));
- _driver = new TownsEuphonyDriver(_mixer);
+ _player = new EuphonyPlayer(_mixer);
}
SoundTowns::~SoundTowns() {
g_system->getAudioCDManager()->stop();
haltTrack();
- delete _driver;
+ delete _player;
delete[] _musicTrackData;
delete[] _sfxFileData;
for (int i = 0; i < 3; i++)
@@ -58,15 +58,15 @@ bool SoundTowns::init() {
_sfxBTTable = _vm->staticres()->loadRawData(k1TownsSFXbtTable, unused);
_musicTrackData = new uint8[50570];
- if (!_driver->init())
+ if (!_player->init())
return false;
if (!loadInstruments())
return false;
- _driver->intf()->callback(68);
- _driver->intf()->callback(70, 0x33);
- _driver->setOutputVolume(1, 118, 118);
+ /*_player->driver()->intf()->callback(68);
+ _player->driver()->intf()->callback(70, 0x33);*/
+ _player->driver()->setOutputVolume(1, 118, 118);
return true;
}
@@ -93,7 +93,7 @@ void SoundTowns::playTrack(uint8 track) {
beginFadeOut();
if (_musicEnabled == 2 && trackNum != -1) {
- _driver->setOutputVolume(1, 118, 118);
+ _player->driver()->setOutputVolume(1, 118, 118);
g_system->getAudioCDManager()->play(trackNum + 1, loop ? -1 : 1, 0, 0);
g_system->getAudioCDManager()->updateCD();
_cdaPlaying = true;
@@ -112,12 +112,12 @@ void SoundTowns::haltTrack() {
_cdaPlaying = false;
for (int i = 0; i < 6; i++)
- _driver->chanVolume(i, 0);
+ _player->driver()->channelVolume(i, 0);
for (int i = 0x40; i < 0x46; i++)
- _driver->chanVolume(i, 0);
+ _player->driver()->channelVolume(i, 0);
for (int i = 0; i < 32; i++)
- _driver->configChan_enable(i, 0);
- _driver->stopParser();
+ _player->configPart_enable(i, 0);
+ _player->stop();
}
void SoundTowns::initAudioResourceInfo(int set, void *info) {
@@ -179,11 +179,11 @@ void SoundTowns::playSoundEffect(uint8 track, uint8) {
if (offset == -1)
return;
- if (!_driver->soundEffectIsPlaying(_sfxChannel ^ 1)) {
+ if (!_player->driver()->soundEffectIsPlaying(_sfxChannel ^ 1)) {
_sfxChannel ^= 1;
- } else if (_driver->soundEffectIsPlaying(_sfxChannel)) {
+ } else if (_player->driver()->soundEffectIsPlaying(_sfxChannel)) {
_sfxChannel ^= 1;
- _driver->stopSoundEffect(_sfxChannel);
+ _player->driver()->stopSoundEffect(_sfxChannel);
}
uint32 *sfxHeader = (uint32 *)(fileBody + offset);
@@ -221,57 +221,57 @@ void SoundTowns::playSoundEffect(uint8 track, uint8) {
}
}
- _driver->chanVolume(_sfxChannel, 127);
- _driver->chanPanPos(_sfxChannel, 0x40);
- _driver->chanPitch(_sfxChannel, 0);
- _driver->playSoundEffect(_sfxChannel, note, 127, sfxPlaybackBuffer);
+ _player->driver()->channelVolume(_sfxChannel, 127);
+ _player->driver()->channelPan(_sfxChannel, 0x40);
+ _player->driver()->channelPitch(_sfxChannel, 0);
+ _player->driver()->playSoundEffect(_sfxChannel, note, 127, sfxPlaybackBuffer);
delete[] sfxPlaybackBuffer;
}
void SoundTowns::updateVolumeSettings() {
- if (!_driver)
+ if (!_player)
return;
bool mute = false;
- _driver->setSoundEffectVolume(ConfMan.getInt("sfx_volume"));
+ _player->driver()->setSoundEffectVolume(ConfMan.getInt("sfx_volume"));
if (ConfMan.hasKey("mute"))
mute = ConfMan.getBool("mute");
- _driver->setMusicVolume((mute ? 0 : ConfMan.getInt("music_volume")));
- _driver->setSoundEffectVolume((mute ? 0 : ConfMan.getInt("sfx_volume")));
+ _player->driver()->setMusicVolume((mute ? 0 : ConfMan.getInt("music_volume")));
+ _player->driver()->setSoundEffectVolume((mute ? 0 : ConfMan.getInt("sfx_volume")));
}
void SoundTowns::stopAllSoundEffects() {
- _driver->chanVolume(0x46, 0);
- _driver->chanVolume(0x47, 0);
- _driver->stopSoundEffect(0x46);
- _driver->stopSoundEffect(0x47);
+ _player->driver()->channelVolume(0x46, 0);
+ _player->driver()->channelVolume(0x47, 0);
+ _player->driver()->stopSoundEffect(0x46);
+ _player->driver()->stopSoundEffect(0x47);
_sfxChannel = 0x46;
}
void SoundTowns::beginFadeOut() {
if (_cdaPlaying) {
for (int i = 118; i > 103; i--) {
- _driver->setOutputVolume(1, i, i);
+ _player->driver()->setOutputVolume(1, i, i);
_vm->delay(2 * _vm->tickLength());
}
for (int i = 103; i > 83; i -= 2) {
- _driver->setOutputVolume(1, i, i);
+ _player->driver()->setOutputVolume(1, i, i);
_vm->delay(2 * _vm->tickLength());
}
for (int i = 83; i > 58; i -= 2) {
- _driver->setOutputVolume(1, i, i);
+ _player->driver()->setOutputVolume(1, i, i);
_vm->delay(_vm->tickLength());
}
for (int i = 58; i > 0; i--) {
- _driver->setOutputVolume(1, i, i);
+ _player->driver()->setOutputVolume(1, i, i);
_vm->delay(1);
}
- _driver->setOutputVolume(1, 0, 0);
+ _player->driver()->setOutputVolume(1, 0, 0);
} else {
if (_lastTrack == -1)
@@ -292,9 +292,9 @@ void SoundTowns::beginFadeOut() {
for (int i = 0; i < 12; i++) {
for (int ii = 0; ii < 6; ii++)
- _driver->chanVolume(ii, fadeVolCur[ii]);
+ _player->driver()->channelVolume(ii, fadeVolCur[ii]);
for (int ii = 0x40; ii < 0x46; ii++)
- _driver->chanVolume(ii, fadeVolCur[ii - 0x3A]);
+ _player->driver()->channelVolume(ii, fadeVolCur[ii - 0x3A]);
for (int ii = 0; ii < 6; ii++) {
fadeVolCur[ii] -= fadeVolStep[ii];
@@ -323,20 +323,20 @@ bool SoundTowns::loadInstruments() {
Screen::decodeFrame4(twm, _musicTrackData, 50570);
for (int i = 0; i < 128; i++)
- _driver->loadInstrument(0, i, &_musicTrackData[i * 48 + 8]);
+ _player->driver()->loadInstrument(0, i, &_musicTrackData[i * 48 + 8]);
Screen::decodeFrame4(twm + 3232, _musicTrackData, 50570);
for (int i = 0; i < 32; i++)
- _driver->loadInstrument(0x40, i, &_musicTrackData[i * 128 + 8]);
+ _player->driver()->loadInstrument(0x40, i, &_musicTrackData[i * 128 + 8]);
- _driver->unloadWaveTable(-1);
+ _player->driver()->unloadWaveTable(-1);
uint8 *src = &_musicTrackData[32 * 128 + 8];
for (int i = 0; i < 10; i++) {
- _driver->loadWaveTable(src);
+ _player->driver()->loadWaveTable(src);
src = src + READ_LE_UINT16(&src[12]) + 32;
}
- _driver->reserveSoundEffectChannels(2);
+ _player->driver()->reserveSoundEffectChannels(2);
delete[] twm;
@@ -350,26 +350,26 @@ void SoundTowns::playEuphonyTrack(uint32 offset, int loop) {
const uint8 *src = _musicTrackData + 852;
for (int i = 0; i < 32; i++)
- _driver->configChan_enable(i, *src++);
+ _player->configPart_enable(i, *src++);
for (int i = 0; i < 32; i++)
- _driver->configChan_setMode(i, *src++);
+ _player->configPart_setType(i, *src++);
for (int i = 0; i < 32; i++)
- _driver->configChan_remap(i, *src++);
+ _player->configPart_remap(i, *src++);
for (int i = 0; i < 32; i++)
- _driver->configChan_adjustVolume(i, *src++);
+ _player->configPart_adjustVolume(i, *src++);
for (int i = 0; i < 32; i++)
- _driver->configChan_setTranspose(i, *src++);
+ _player->configPart_setTranspose(i, *src++);
src = _musicTrackData + 1748;
for (int i = 0; i < 6; i++)
- _driver->assignChannel(i, *src++);
+ _player->driver()->assignPartToChannel(i, *src++);
for (int i = 0x40; i < 0x46; i++)
- _driver->assignChannel(i, *src++);
+ _player->driver()->assignPartToChannel(i, *src++);
uint32 trackSize = READ_LE_UINT32(_musicTrackData + 2048);
uint8 startTick = _musicTrackData[2052];
- _driver->setMusicTempo(_musicTrackData[2053]);
+ _player->setTempo(_musicTrackData[2053]);
src = _musicTrackData + 2054;
uint32 l = READ_LE_UINT32(src + trackSize);
@@ -377,14 +377,14 @@ void SoundTowns::playEuphonyTrack(uint32 offset, int loop) {
l = READ_LE_UINT32(src + trackSize);
trackSize += (l + 4);
- _driver->setMusicLoop(loop);
- _driver->startMusicTrack(src, trackSize, startTick);
+ _player->setLoopStatus(loop);
+ _player->startTrack(src, trackSize, startTick);
}
void SoundTowns::fadeOutSoundEffects() {
for (int i = 127; i > 0; i-= 12) {
- _driver->chanVolume(0x46, i);
- _driver->chanVolume(0x47, i);
+ _player->driver()->channelVolume(0x46, i);
+ _player->driver()->channelVolume(0x47, i);
_vm->delay(_vm->tickLength());
}
stopAllSoundEffects();
diff --git a/engines/kyra/staticres.cpp b/engines/kyra/staticres.cpp
index 731f2f4ce5..1a2e2c093c 100644
--- a/engines/kyra/staticres.cpp
+++ b/engines/kyra/staticres.cpp
@@ -39,7 +39,7 @@
namespace Kyra {
-#define RESFILE_VERSION 86
+#define RESFILE_VERSION 87
namespace {
bool checkKyraDat(Common::SeekableReadStream *file) {
diff --git a/engines/lastexpress/data/snd.cpp b/engines/lastexpress/data/snd.cpp
index 2a221afadc..e310bafd18 100644
--- a/engines/lastexpress/data/snd.cpp
+++ b/engines/lastexpress/data/snd.cpp
@@ -442,7 +442,7 @@ void SimpleSound::loadHeader(Common::SeekableReadStream *in) {
_blockSize = _size / _blocks;
}
-Audio::AudioStream *SimpleSound::makeDecoder(Common::SeekableReadStream *in, uint32 size, int32 filterId) const {
+LastExpress_ADPCMStream *SimpleSound::makeDecoder(Common::SeekableReadStream *in, uint32 size, int32 filterId) const {
return new LastExpress_ADPCMStream(in, DisposeAfterUse::YES, size, _blockSize, filterId);
}
@@ -489,7 +489,7 @@ void StreamedSound::setFilterId(int32 filterId) {
if (!_as)
return;
- ((LastExpress_ADPCMStream *)_as)->setFilterId(filterId);
+ _as->setFilterId(filterId);
}
//////////////////////////////////////////////////////////////////////////
@@ -525,8 +525,8 @@ void AppendableSound::queueBuffer(Common::SeekableReadStream *bufferIn) {
// Setup the ADPCM decoder
uint32 sizeIn = (uint32)bufferIn->size();
- Audio::AudioStream *adpcm = makeDecoder(bufferIn, sizeIn);
- ((LastExpress_ADPCMStream *)adpcm)->setFilterId(16);
+ LastExpress_ADPCMStream *adpcm = makeDecoder(bufferIn, sizeIn);
+ adpcm->setFilterId(16);
// Queue the stream
_as->queueAudioStream(adpcm);
diff --git a/engines/lastexpress/data/snd.h b/engines/lastexpress/data/snd.h
index f489304ff3..19e5fda9c9 100644
--- a/engines/lastexpress/data/snd.h
+++ b/engines/lastexpress/data/snd.h
@@ -49,6 +49,8 @@ class SeekableReadStream;
namespace LastExpress {
+class LastExpress_ADPCMStream;
+
class SimpleSound {
public:
SimpleSound();
@@ -59,7 +61,7 @@ public:
protected:
void loadHeader(Common::SeekableReadStream *in);
- Audio::AudioStream *makeDecoder(Common::SeekableReadStream *in, uint32 size, int32 filterId = -1) const;
+ LastExpress_ADPCMStream *makeDecoder(Common::SeekableReadStream *in, uint32 size, int32 filterId = -1) const;
void play(Audio::AudioStream *as);
uint32 _size; ///< data size
@@ -82,7 +84,7 @@ public:
void setFilterId(int32 filterId);
private:
- Audio::AudioStream *_as;
+ LastExpress_ADPCMStream *_as;
bool _loaded;
};
diff --git a/engines/lure/res.cpp b/engines/lure/res.cpp
index 6b2705463d..7a79f48b87 100644
--- a/engines/lure/res.cpp
+++ b/engines/lure/res.cpp
@@ -44,6 +44,10 @@ Resources::Resources() : _rnd(LureEngine::getReference().rnd()) {
MemoryBlock *mb = Disk::getReference().getEntry(STRING_LIST_RESOURCE_ID);
_stringList.load(mb);
delete mb;
+
+ // WORKAROUND: In Spanish the look "Obsevar" should be "Observar"
+ if (!Common::String(_stringList.getString(LOOK)).compareTo("Obsevar"))
+ _stringList.setString(LOOK, "Observar");
}
Resources::~Resources() {
diff --git a/engines/lure/res_struct.cpp b/engines/lure/res_struct.cpp
index 5a4761c87b..ec1a546d05 100644
--- a/engines/lure/res_struct.cpp
+++ b/engines/lure/res_struct.cpp
@@ -1217,26 +1217,19 @@ void BarmanLists::loadFromStream(Common::ReadStream *stream) {
// String list resource class
void StringList::load(MemoryBlock *data) {
- _data = Memory::allocate(data->size());
- _data->copyFrom(data);
+ // Get the number of entries
+ uint numEntries = READ_LE_UINT16(data->data());
- _numEntries = READ_LE_UINT16(_data->data());
- char *p = (char *) _data->data() + sizeof(uint16);
-
- _entries = (char **) Memory::alloc(_numEntries * sizeof(char *));
-
- for (int index = 0; index < _numEntries; ++index) {
- _entries[index] = p;
+ // Iterate through loading the strings one at a time
+ const char *p = (const char *)data->data() + sizeof(uint16);
+ for (uint index = 0; index < numEntries; ++index) {
+ _entries.push_back(p);
p += strlen(p) + 1;
}
}
void StringList::clear() {
- if (_numEntries != 0) {
- Memory::dealloc(_entries);
- delete _data;
- _numEntries = 0;
- }
+ _entries.clear();
}
// Field list and miscellaneous variables
diff --git a/engines/lure/res_struct.h b/engines/lure/res_struct.h
index 9190912f5b..685c55ab13 100644
--- a/engines/lure/res_struct.h
+++ b/engines/lure/res_struct.h
@@ -28,6 +28,7 @@
#include "common/list.h"
#include "common/file.h"
#include "common/ptr.h"
+#include "common/str-array.h"
#include "common/textconsole.h"
namespace Lure {
@@ -850,22 +851,19 @@ enum StringEnum {S_CREDITS = 25, S_RESTART_GAME = 26, S_SAVE_GAME = 27, S_RESTOR
class StringList {
private:
- MemoryBlock *_data;
- int _numEntries;
- char **_entries;
+ Common::StringArray _entries;
public:
- StringList() { _numEntries = 0; }
- ~StringList() { clear(); }
+ StringList() {}
void load(MemoryBlock *data);
void clear();
- int count() { return _numEntries; }
+ int count() { return _entries.size(); }
const char *getString(int index) {
- if ((index < 0) || (index >= _numEntries)) error("Invalid index specified to String List");
- return _entries[index];
+ return _entries[index].c_str();
}
const char *getString(Action action) { return getString((int) action - 1); }
const char *getString(StringEnum sEnum) { return getString((int) sEnum); }
+ void setString(Action action, const Common::String &s) { _entries[(int)action - 1] = s; }
};
// The following class holds the field list used by the script engine as
diff --git a/engines/mads/configure.engine b/engines/mads/configure.engine
index 60d833e9e8..412d65e180 100644
--- a/engines/mads/configure.engine
+++ b/engines/mads/configure.engine
@@ -1,3 +1,3 @@
# This file is included from the main "configure" script
# add_engine [name] [desc] [build-by-default] [subengines] [base games] [deps]
-add_engine mads "Rex Nebular and the Cosmic Gender Bender" no
+add_engine mads "Rex Nebular and the Cosmic Gender Bender" yes
diff --git a/engines/mads/detection_tables.h b/engines/mads/detection_tables.h
index 56df09577c..f0eb21f5d9 100644
--- a/engines/mads/detection_tables.h
+++ b/engines/mads/detection_tables.h
@@ -55,7 +55,7 @@ static const MADSGameDescription gameDescriptions[] = {
},
Common::EN_ANY,
Common::kPlatformDOS,
- ADGF_TESTING,
+ ADGF_NO_FLAGS,
GUIO5(GUIO_NOSPEECH, GAMEOPTION_EASY_MOUSE, GAMEOPTION_ANIMATED_INVENTORY, GAMEOPTION_ANIMATED_INTERFACE, GAMEOPTION_NAUGHTY_MODE)
},
GType_RexNebular,
@@ -73,7 +73,7 @@ static const MADSGameDescription gameDescriptions[] = {
},
Common::EN_ANY,
Common::kPlatformDOS,
- ADGF_TESTING,
+ ADGF_NO_FLAGS,
GUIO5(GUIO_NOSPEECH, GAMEOPTION_EASY_MOUSE, GAMEOPTION_ANIMATED_INVENTORY, GAMEOPTION_ANIMATED_INTERFACE, GAMEOPTION_NAUGHTY_MODE)
},
GType_RexNebular,
diff --git a/engines/mads/nebular/game_nebular.cpp b/engines/mads/nebular/game_nebular.cpp
index 1976bcb928..5526845552 100644
--- a/engines/mads/nebular/game_nebular.cpp
+++ b/engines/mads/nebular/game_nebular.cpp
@@ -118,6 +118,10 @@ void GameNebular::startGame() {
initializeGlobals();
+ if (_loadGameSlot >= 0)
+ // User selected to resume a savegame
+ return;
+
// Check copy protection
ProtectionResult protectionResult = checkCopyProtection();
diff --git a/engines/mads/nebular/menu_nebular.cpp b/engines/mads/nebular/menu_nebular.cpp
index 6fe17f3beb..0520294b29 100644
--- a/engines/mads/nebular/menu_nebular.cpp
+++ b/engines/mads/nebular/menu_nebular.cpp
@@ -48,6 +48,7 @@ MainMenu::MainMenu(MADSEngine *vm): MenuView(vm) {
_highlightedIndex = -1;
_selectedIndex = -1;
_buttonDown = false;
+ _showEvolve = _showSets = false;
for (int i = 0; i < 7; ++i)
_menuItems[i] = nullptr;
@@ -137,12 +138,14 @@ void MainMenu::doFrame() {
}
_vm->_events->showCursor();
+ showBonusItems();
} else {
if ((_menuItemIndex == -1) || (_frameIndex == 0)) {
if (++_menuItemIndex == 6) {
// Reached end of display animation
_vm->_events->showCursor();
+ showBonusItems();
return;
} else if (_menuItemIndex == 4 && !shouldShowQuotes()) {
++_menuItemIndex;
@@ -180,6 +183,17 @@ void MainMenu::addSpriteSlot() {
_redrawFlag = true;
}
+void MainMenu::showBonusItems() {
+ Scene &scene = _vm->_game->_scene;
+ _showEvolve = Common::File::exists("SECTION0.HAG") && Common::File::exists("evolve.res");
+ _showSets = Common::File::exists("SECTION0.HAG") && Common::File::exists("sets.res");
+
+ if (_showSets)
+ scene._kernelMessages.add(Common::Point(290, 143), 0x4140, 0, 0, 0, "S");
+ if (_showEvolve)
+ scene._kernelMessages.add(Common::Point(305, 143), 0x4140, 0, 0, 0, "E");
+}
+
bool MainMenu::onEvent(Common::Event &event) {
Scene &scene = _vm->_game->_scene;
if (_selectedIndex != -1)
@@ -280,6 +294,10 @@ bool MainMenu::onEvent(Common::Event &event) {
_selectedIndex = _highlightedIndex;
unhighlightItem();
_frameIndex = 0;
+ } else if (_showSets && Common::Rect(290, 165, 300, 185).contains(event.mouse)) {
+ handleAction(SETS);
+ } else if (_showEvolve && Common::Rect(305, 165, 315, 185).contains(event.mouse)) {
+ handleAction(EVOLVE);
}
return true;
@@ -334,6 +352,14 @@ void MainMenu::handleAction(MADSGameAction action) {
TextView::execute(_vm, "quotes");
return;
+ case SETS:
+ AnimationView::execute(_vm, "sets");
+ break;
+
+ case EVOLVE:
+ AnimationView::execute(_vm, "evolve");
+ break;
+
case EXIT:
_vm->_dialogs->_pendingDialog = DIALOG_ADVERT;
break;
diff --git a/engines/mads/nebular/menu_nebular.h b/engines/mads/nebular/menu_nebular.h
index 35af0bb34f..8a0cc3575d 100644
--- a/engines/mads/nebular/menu_nebular.h
+++ b/engines/mads/nebular/menu_nebular.h
@@ -35,7 +35,10 @@ class MADSEngine;
namespace Nebular {
-enum MADSGameAction { START_GAME, RESUME_GAME, SHOW_INTRO, CREDITS, QUOTES, EXIT };
+enum MADSGameAction {
+ START_GAME, RESUME_GAME, SHOW_INTRO, CREDITS, QUOTES, EXIT,
+ SETS, EVOLVE
+};
class MainMenu: public MenuView {
private:
@@ -45,6 +48,7 @@ private:
int _frameIndex;
uint32 _delayTimeout;
bool _skipFlag;
+ bool _showEvolve, _showSets;
/**
* Currently highlighted menu item
@@ -81,7 +85,16 @@ private:
*/
void addSpriteSlot();
+ /**
+ * Returns true if the Quotes item should be shown.
+ * i.e. if the player has completed the game
+ */
bool shouldShowQuotes();
+
+ /**
+ * Show the bonus item icons, if available
+ */
+ void showBonusItems();
protected:
/**
* Display the menu
diff --git a/engines/mads/nebular/nebular_scenes1.cpp b/engines/mads/nebular/nebular_scenes1.cpp
index c33ce7f780..9207d87be7 100644
--- a/engines/mads/nebular/nebular_scenes1.cpp
+++ b/engines/mads/nebular/nebular_scenes1.cpp
@@ -84,7 +84,7 @@ void Scene1xx::setPlayerSpritesPrefix() {
} else if (_scene->_nextSceneId == 112)
_game._player._spritesPrefix = "";
- if (oldName == _game._player._spritesPrefix)
+ if (oldName != _game._player._spritesPrefix)
_game._player._spritesChanged = true;
if (_scene->_nextSceneId == 105 || (_scene->_nextSceneId == 109 && _globals[kHoovicAlive])) {
diff --git a/engines/mads/nebular/sound_nebular.cpp b/engines/mads/nebular/sound_nebular.cpp
index 711f82a05b..4c360b23d5 100644
--- a/engines/mads/nebular/sound_nebular.cpp
+++ b/engines/mads/nebular/sound_nebular.cpp
@@ -216,6 +216,8 @@ ASound::ASound(Audio::Mixer *mixer, OPL::OPL *opl, const Common::String &filenam
}
ASound::~ASound() {
+ _opl->stop();
+
Common::List<CachedDataEntry>::iterator i;
for (i = _dataCache.begin(); i != _dataCache.end(); ++i)
delete[] (*i)._data;
@@ -2025,8 +2027,8 @@ const ASound4::CommandPtr ASound4::_commandList[61] = {
&ASound4::nullCommand, &ASound4::nullCommand, &ASound4::nullCommand, &ASound4::command43,
&ASound4::nullCommand, &ASound4::nullCommand, &ASound4::nullCommand, &ASound4::nullCommand,
&ASound4::nullCommand, &ASound4::nullCommand, &ASound4::nullCommand, &ASound4::nullCommand,
- &ASound4::nullCommand, &ASound4::nullCommand, &ASound4::nullCommand, &ASound4::nullCommand,
- &ASound4::nullCommand, &ASound4::command57, &ASound4::nullCommand, &ASound4::command59,
+ &ASound4::command52, &ASound4::command53, &ASound4::command54, &ASound4::command55,
+ &ASound4::command56, &ASound4::command57, &ASound4::command58, &ASound4::command59,
&ASound4::command60
};
diff --git a/engines/mads/resources.cpp b/engines/mads/resources.cpp
index d5352fb205..3b7cf2cab0 100644
--- a/engines/mads/resources.cpp
+++ b/engines/mads/resources.cpp
@@ -151,7 +151,7 @@ void HagArchive::loadIndex(MADSEngine *vm) {
Common::File hagFile;
for (int sectionIndex = -1; sectionIndex < 11; ++sectionIndex) {
- if (sectionIndex == 0)
+ if (sectionIndex == 0 && !Common::File::exists("SECTION0.HAG"))
continue;
// Dragonsphere does not have some sections - skip them
@@ -239,7 +239,7 @@ Common::String HagArchive::getResourceFilename(const Common::String &resourceNam
int value = atoi(resourceName.c_str() + 2);
int hagFileNum = (resType == RESTYPE_ROOM) ? value / 100 : value;
- if (hagFileNum > 0)
+ if (hagFileNum >= 0)
outputFilename = Common::String::format("SECTION%d.HAG", hagFileNum);
}
diff --git a/engines/mohawk/sound.cpp b/engines/mohawk/sound.cpp
index 6f18d7178e..198627e012 100644
--- a/engines/mohawk/sound.cpp
+++ b/engines/mohawk/sound.cpp
@@ -77,8 +77,8 @@ void Sound::initMidi() {
_midiParser->setTimerRate(_midiDriver->getBaseTempo());
}
-Audio::AudioStream *Sound::makeAudioStream(uint16 id, CueList *cueList) {
- Audio::AudioStream *audStream = NULL;
+Audio::RewindableAudioStream *Sound::makeAudioStream(uint16 id, CueList *cueList) {
+ Audio::RewindableAudioStream *audStream = NULL;
switch (_vm->getGameType()) {
case GType_MYST:
@@ -109,17 +109,18 @@ Audio::AudioStream *Sound::makeAudioStream(uint16 id, CueList *cueList) {
Audio::SoundHandle *Sound::playSound(uint16 id, byte volume, bool loop, CueList *cueList) {
debug (0, "Playing sound %d", id);
- Audio::AudioStream *audStream = makeAudioStream(id, cueList);
+ Audio::RewindableAudioStream *rewindStream = makeAudioStream(id, cueList);
- if (audStream) {
+ if (rewindStream) {
SndHandle *handle = getHandle();
handle->type = kUsedHandle;
handle->id = id;
- handle->samplesPerSecond = audStream->getRate();
+ handle->samplesPerSecond = rewindStream->getRate();
// Set the stream to loop here if it's requested
+ Audio::AudioStream *audStream = rewindStream;
if (loop)
- audStream = Audio::makeLoopingAudioStream((Audio::RewindableAudioStream *)audStream, 0);
+ audStream = Audio::makeLoopingAudioStream(rewindStream, 0);
_vm->_mixer->playStream(Audio::Mixer::kPlainSoundType, &handle->handle, audStream, -1, volume);
return &handle->handle;
@@ -335,11 +336,12 @@ void Sound::playSLSTSound(uint16 id, bool fade, bool loop, uint16 volume, int16
sndHandle.id = id;
_currentSLSTSounds.push_back(sndHandle);
- Audio::AudioStream *audStream = makeMohawkWaveStream(_vm->getResource(ID_TWAV, id));
+ Audio::RewindableAudioStream *rewindStream = makeMohawkWaveStream(_vm->getResource(ID_TWAV, id));
// Loop here if necessary
+ Audio::AudioStream *audStream = rewindStream;
if (loop)
- audStream = Audio::makeLoopingAudioStream((Audio::RewindableAudioStream *)audStream, 0);
+ audStream = Audio::makeLoopingAudioStream(rewindStream, 0);
// TODO: Handle fading, possibly just raise the volume of the channel in increments?
@@ -363,7 +365,7 @@ void Sound::resumeSLST() {
_vm->_mixer->pauseHandle(*_currentSLSTSounds[i].handle, false);
}
-Audio::AudioStream *Sound::makeMohawkWaveStream(Common::SeekableReadStream *stream, CueList *cueList) {
+Audio::RewindableAudioStream *Sound::makeMohawkWaveStream(Common::SeekableReadStream *stream, CueList *cueList) {
uint32 tag = 0;
ADPCMStatus adpcmStatus;
DataChunk dataChunk;
@@ -507,7 +509,7 @@ Audio::AudioStream *Sound::makeMohawkWaveStream(Common::SeekableReadStream *stre
return NULL;
}
-Audio::AudioStream *Sound::makeLivingBooksWaveStream_v1(Common::SeekableReadStream *stream) {
+Audio::RewindableAudioStream *Sound::makeLivingBooksWaveStream_v1(Common::SeekableReadStream *stream) {
uint16 header = stream->readUint16BE();
uint16 rate = 0;
uint32 size = 0;
@@ -646,15 +648,15 @@ Audio::SoundHandle *Sound::replaceBackgroundMyst(uint16 id, uint16 volume) {
stopBackgroundMyst();
// Play new sound
- Audio::AudioStream *audStream = makeAudioStream(id);
+ Audio::RewindableAudioStream *rewindStream = makeAudioStream(id);
- if (audStream) {
+ if (rewindStream) {
_mystBackgroundSound.type = kUsedHandle;
_mystBackgroundSound.id = id;
- _mystBackgroundSound.samplesPerSecond = audStream->getRate();
+ _mystBackgroundSound.samplesPerSecond = rewindStream->getRate();
// Set the stream to loop
- audStream = Audio::makeLoopingAudioStream((Audio::RewindableAudioStream *)audStream, 0);
+ Audio::AudioStream *audStream = Audio::makeLoopingAudioStream(rewindStream, 0);
_vm->_mixer->playStream(Audio::Mixer::kPlainSoundType, &_mystBackgroundSound.handle, audStream, -1, volume >> 8);
return &_mystBackgroundSound.handle;
diff --git a/engines/mohawk/sound.h b/engines/mohawk/sound.h
index 49f6751072..75c9492d96 100644
--- a/engines/mohawk/sound.h
+++ b/engines/mohawk/sound.h
@@ -156,13 +156,13 @@ private:
MidiParser *_midiParser;
byte *_midiData;
- static Audio::AudioStream *makeMohawkWaveStream(Common::SeekableReadStream *stream, CueList *cueList = NULL);
- static Audio::AudioStream *makeLivingBooksWaveStream_v1(Common::SeekableReadStream *stream);
+ static Audio::RewindableAudioStream *makeMohawkWaveStream(Common::SeekableReadStream *stream, CueList *cueList = NULL);
+ static Audio::RewindableAudioStream *makeLivingBooksWaveStream_v1(Common::SeekableReadStream *stream);
void initMidi();
Common::Array<SndHandle> _handles;
SndHandle *getHandle();
- Audio::AudioStream *makeAudioStream(uint16 id, CueList *cueList = NULL);
+ Audio::RewindableAudioStream *makeAudioStream(uint16 id, CueList *cueList = NULL);
uint16 convertMystID(uint16 id);
// Myst-specific
diff --git a/engines/mortevielle/detection_tables.h b/engines/mortevielle/detection_tables.h
index 26611d4271..fb85e749ad 100644
--- a/engines/mortevielle/detection_tables.h
+++ b/engines/mortevielle/detection_tables.h
@@ -124,7 +124,7 @@ static const MortevielleGameDescription MortevielleGameDescriptions[] = {
Common::kPlatformDOS,
ADGF_NO_FLAGS,
GUIO0()
- }, Common::FR_FRA, kUseOriginalData
+ }, Common::FR_FRA, kUseEngineDataFile
},
{ AD_TABLE_END_MARKER , Common::EN_ANY, kUseEngineDataFile}
diff --git a/engines/mortevielle/menu.cpp b/engines/mortevielle/menu.cpp
index b788ce9a71..6235e9f2ed 100644
--- a/engines/mortevielle/menu.cpp
+++ b/engines/mortevielle/menu.cpp
@@ -682,13 +682,10 @@ void Menu::initMenu() {
if (!menuLoaded) {
// Load menu from game data using the original language
if (_vm->getOriginalLanguage() == Common::FR_FRA) {
- if (f.exists("menufr.mor")) {
- if (!f.open("menufr.mor"))
- error("Missing file - menufr.mor");
- } else {
- if (!f.open("menu.mor"))
- error("Missing file - menu.mor");
- }
+ // We do not support reading menu.mor (it has a different format).
+ // If the game version does not have menufr.mor it has to get the menu from the DAT file.
+ if (!f.open("menufr.mor"))
+ error("Missing file - menufr.mor");
} else { // Common::DE_DEU
if (!f.open("menual.mor"))
error("Missing file - menual.mor");
diff --git a/engines/mortevielle/sound.cpp b/engines/mortevielle/sound.cpp
index 23ca9d89b4..f02ccb69ea 100644
--- a/engines/mortevielle/sound.cpp
+++ b/engines/mortevielle/sound.cpp
@@ -139,22 +139,44 @@ void SoundManager::loadAmbiantSounds() {
* @remarks Originally called 'charge_bruit' and 'charge_bruit5'
*/
void SoundManager::loadNoise() {
- Common::File f1, f2;
+ Common::File f1, f5;
- if (!f1.open("bruits")) //Translation: "noise"
- error("Missing file - bruits");
- if (!f2.open("bruit5"))
+ if (!f5.open("bruit5"))
error("Missing file - bruit5");
- _noiseBuf = (byte *)malloc(sizeof(byte) * (f1.size() + f2.size()));
- assert(f1.size() > 32000);
+ if (f1.open("bruits")) { //Translation: "noise"
+ assert(f1.size() > 32000);
+ _noiseBuf = (byte *)malloc(sizeof(byte) * (f1.size() + f5.size()));
- f1.read(_noiseBuf, 32000); // 250 * 128
- f2.read(&_noiseBuf[32000], f2.size());
- f1.read(&_noiseBuf[32000 + f2.size()], f1.size() - 32000); // 19072
+ f1.read(_noiseBuf, 32000); // 250 * 128
+ f5.read(&_noiseBuf[32000], f5.size());
+ f1.read(&_noiseBuf[32000 + f5.size()], f1.size() - 32000); // 19072
- f1.close();
- f2.close();
+ f1.close();
+ } else {
+ Common::File f2, f3, f4;
+ if (!f1.open("bruit1") || !f2.open("bruit2") || !f3.open("bruit3") || !f4.open("bruit4"))
+ error("Missing file - bruits");
+
+ assert(f4.size() == 32000);
+ _noiseBuf = (byte *)malloc(sizeof(byte) * (f1.size() + f2.size() + f3.size() + f4.size() + f5.size()));
+
+ f4.read(_noiseBuf, f4.size());
+ int pos = f4.size();
+ f5.read(&_noiseBuf[pos], f5.size());
+ pos += f5.size();
+ f1.read(&_noiseBuf[pos], f1.size());
+ pos += f1.size();
+ f2.read(&_noiseBuf[pos], f2.size());
+ pos += f2.size();
+ f3.read(&_noiseBuf[pos], f3.size());
+
+ f1.close();
+ f2.close();
+ f3.close();
+ f4.close();
+ }
+ f5.close();
}
void SoundManager::regenbruit() {
diff --git a/engines/mortevielle/utils.cpp b/engines/mortevielle/utils.cpp
index 5137e1892b..cbc22e4886 100644
--- a/engines/mortevielle/utils.cpp
+++ b/engines/mortevielle/utils.cpp
@@ -2115,8 +2115,12 @@ void MortevielleEngine::music() {
_reloadCFIEC = true;
Common::File f;
- if (!f.open("mort.img"))
- error("Missing file - mort.img");
+ if (!f.open("mort.img")) {
+ // Some DOS versions use MORTP2 instead of MORT.IMG
+ // Some have both and they are identical
+ if (!f.open("mortp2"))
+ error("Missing file - mort.img");
+ }
int size = f.size();
byte *compMusicBuf = (byte *)malloc(sizeof(byte) * size);
diff --git a/engines/neverhood/menumodule.cpp b/engines/neverhood/menumodule.cpp
index 6911041e58..826f175d47 100644
--- a/engines/neverhood/menumodule.cpp
+++ b/engines/neverhood/menumodule.cpp
@@ -93,6 +93,10 @@ void MenuModule::setLoadgameInfo(uint index) {
_savegameSlot = (*_savegameList)[index].slotNum;
}
+void MenuModule::setLoadgameSlot(int slot) {
+ _savegameSlot = slot;
+}
+
void MenuModule::setSavegameInfo(const Common::String &description, uint index, bool newSavegame) {
_savegameDescription = description;
_savegameSlot = newSavegame ? -1 : (*_savegameList)[index].slotNum;
@@ -912,7 +916,7 @@ GameStateMenu::GameStateMenu(NeverhoodEngine *vm, Module *parentModule, Savegame
if (slot >= 0) {
if (!isSave) {
- ((MenuModule*)_parentModule)->setLoadgameInfo(slot);
+ ((MenuModule*)_parentModule)->setLoadgameSlot(slot);
} else {
((MenuModule*)_parentModule)->setSavegameInfo(saveDesc,
slot, slot >= saveCount);
diff --git a/engines/neverhood/menumodule.h b/engines/neverhood/menumodule.h
index 6508ccbdf2..1c4ade2369 100644
--- a/engines/neverhood/menumodule.h
+++ b/engines/neverhood/menumodule.h
@@ -43,6 +43,7 @@ public:
MenuModule(NeverhoodEngine *vm, Module *parentModule, int which);
virtual ~MenuModule();
void setLoadgameInfo(uint index);
+ void setLoadgameSlot(int slot);
void setSavegameInfo(const Common::String &description, uint index, bool newSavegame);
void setDeletegameInfo(uint index);
void refreshSaveGameList();
diff --git a/engines/neverhood/modules/module2700.cpp b/engines/neverhood/modules/module2700.cpp
index a510c02558..e0c6509793 100644
--- a/engines/neverhood/modules/module2700.cpp
+++ b/engines/neverhood/modules/module2700.cpp
@@ -761,7 +761,7 @@ void Scene2702::moveCarToPoint(NPoint pt) {
_tracks.findTrackPoint(pt, minMatchTrackIndex, minMatchDistance, _dataResource);
if (minMatchTrackIndex >= 0 && minMatchTrackIndex != _currTrackIndex) {
_newTrackIndex = minMatchTrackIndex;
- _newTrackDestX = pt.x;
+ _newTrackDest = pt;
if (_isUpperTrack) {
if (_currTrackIndex == 0)
sendMessage(_asCar, 0x2003, _trackPoints->size() - 1);
@@ -773,7 +773,7 @@ void Scene2702::moveCarToPoint(NPoint pt) {
sendMessage(_asCar, 0x2003, _trackPoints->size() - 1);
} else {
_newTrackIndex = -1;
- sendMessage(_asCar, 0x2004, pt.x);
+ sendMessage(_asCar, 0x2004, pt);
}
}
@@ -790,7 +790,7 @@ void Scene2702::changeTrack() {
sendMessage(_asCar, NM_POSITION_CHANGE, 0);
else
sendMessage(_asCar, NM_POSITION_CHANGE, _trackPoints->size() - 1);
- sendMessage(_asCar, 0x2004, _newTrackDestX);
+ sendMessage(_asCar, 0x2004, _newTrackDest);
_newTrackIndex = -1;
}
@@ -1092,14 +1092,14 @@ void Scene2706::moveCarToPoint(NPoint pt) {
_tracks.findTrackPoint(pt, minMatchTrackIndex, minMatchDistance, _dataResource);
if (minMatchTrackIndex >= 0 && minMatchTrackIndex != _currTrackIndex) {
_newTrackIndex = minMatchTrackIndex;
- _newTrackDestX = pt.x;
+ _newTrackDest = pt;
if (_currTrackIndex == 0)
sendMessage(_asCar, 0x2003, _trackPoints->size() - 1);
else
sendMessage(_asCar, 0x2003, 0);
} else {
_newTrackIndex = -1;
- sendMessage(_asCar, 0x2004, pt.x);
+ sendMessage(_asCar, 0x2004, pt);
}
}
@@ -1111,7 +1111,7 @@ void Scene2706::changeTrack() {
sendMessage(_asCar, NM_POSITION_CHANGE, _trackPoints->size() - 1);
else
sendMessage(_asCar, NM_POSITION_CHANGE, 0);
- sendMessage(_asCar, 0x2004, _newTrackDestX);
+ sendMessage(_asCar, 0x2004, _newTrackDest);
_newTrackIndex = -1;
}
diff --git a/engines/neverhood/modules/module2700.h b/engines/neverhood/modules/module2700.h
index 9ac2159765..ece8866cd4 100644
--- a/engines/neverhood/modules/module2700.h
+++ b/engines/neverhood/modules/module2700.h
@@ -76,7 +76,7 @@ protected:
Sprite *_asCarShadow;
Sprite *_asCarTrackShadow;
Sprite *_asCarConnectorShadow;
- int16 _newTrackDestX;
+ NPoint _newTrackDest;
bool _isInLight;
int _currTrackIndex, _newTrackIndex;
bool _isUpperTrack;
@@ -132,7 +132,7 @@ protected:
Sprite *_asCarConnector;
Sprite *_asCarTrackShadow;
Sprite *_asCarConnectorShadow;
- int16 _newTrackDestX;
+ NPoint _newTrackDest;
int _currTrackIndex, _newTrackIndex;
Tracks _tracks;
NPointArray *_trackPoints;
diff --git a/engines/sci/detection_tables.h b/engines/sci/detection_tables.h
index 55305c4b42..4482375d19 100644
--- a/engines/sci/detection_tables.h
+++ b/engines/sci/detection_tables.h
@@ -4127,6 +4127,15 @@ static const struct ADGameDescription SciGameDescriptions[] = {
AD_LISTEND},
Common::FR_FRA, Common::kPlatformWindows, ADGF_UNSTABLE, GUIO4(GUIO_NOASPECT, GAMEOPTION_PREFER_DIGITAL_SFX, GAMEOPTION_ORIGINAL_SAVELOAD, GAMEOPTION_FB01_MIDI) },
+ // Torin's Passage - German Windows CD (from m_kiewitz)
+ // SCI interpreter version 2.100.002
+ // VERSION file "1.0"
+ {"torin", "", {
+ {"resmap.000", 0, "e55c3097329b3c53752301e01c6af2fb", 9787},
+ {"ressci.000", 0, "118f9bec04bfe17c4f87bbb5ddb43c18", 56127540},
+ AD_LISTEND},
+ Common::DE_DEU, Common::kPlatformWindows, ADGF_UNSTABLE, GUIO4(GUIO_NOASPECT, GAMEOPTION_PREFER_DIGITAL_SFX, GAMEOPTION_ORIGINAL_SAVELOAD, GAMEOPTION_FB01_MIDI) },
+
// Torin's Passage (Multilingual) - German Windows CD
// SCI interpreter version 2.100.002
{"torin", "", {
@@ -4185,7 +4194,7 @@ static const struct ADGameDescription SciGameDescriptions[] = {
FANMADE_L("Grostesteing: Plus Mechant que Jamais", "ec9a97ccb134f69249f6ea8b16c13d8e", 1500, "b869f5f11bfe2ab5f67f4f0c618f2ce1", 464657, Common::FR_FRA), // FIXME: Accent
FANMADE("Humanoid Demo", "97d8331293a6d57e8bad58c1efc89a63", 624, "fb354b9abe64011b12159e45d724633f", 452320),
FANMADE("Island of Secrets Demo 0.3", "61279176c3e4530fec9b578877aecda7", 504, "7f4ed7a81b86bea22c62bc98e6d9ec39", 197790),
- FANMADE("Jimт€™s Quest 1: The Phantom Thesis", "0af50be1d3f0cb77a09137709a76ef4f", 960, "9c042c136548b20d9183495668e03526", 496446),
+ FANMADE("Jim's Quest 1: The Phantom Thesis", "0af50be1d3f0cb77a09137709a76ef4f", 960, "9c042c136548b20d9183495668e03526", 496446),
FANMADE("King's Quest II SCI Pre-Alpha Version", "cdea1c081022e7697a1afffb1d2f9f6a", 2646, "fb2ce39002c3e05f3d83533638dea105", 2310356),
FANMADE("Knight's Quest Demo 1.0", "5e816edf993956752ed06fccfeeae6d9", 1260, "959321f88a22905fa1f8c6d897874744", 703836),
FANMADE("LockerGnome Quest", "3eeff9130206cad0c4e1551e2b9dd2c5", 420, "ae05ca90806fd90cc43f147c82d3547c", 158906),
diff --git a/engines/scumm/POTFILES b/engines/scumm/POTFILES
index 6d10537d3c..246f14d3f0 100644
--- a/engines/scumm/POTFILES
+++ b/engines/scumm/POTFILES
@@ -1,5 +1,6 @@
engines/scumm/dialogs.cpp
engines/scumm/help.cpp
+engines/scumm/input.cpp
engines/scumm/scumm.cpp
engines/scumm/players/player_v3m.cpp
engines/scumm/players/player_v5m.cpp
diff --git a/engines/scumm/imuse_digi/dimuse.cpp b/engines/scumm/imuse_digi/dimuse.cpp
index db260dce42..3f61946bf2 100644
--- a/engines/scumm/imuse_digi/dimuse.cpp
+++ b/engines/scumm/imuse_digi/dimuse.cpp
@@ -201,8 +201,7 @@ void IMuseDigital::saveOrLoad(Serializer *ser) {
track->stream = Audio::makeQueuingAudioStream(freq, (track->mixerFlags & kFlagStereo) != 0);
- _mixer->playStream(track->getType(), &track->mixChanHandle, track->stream, -1, track->getVol(), track->getPan(),
- DisposeAfterUse::YES, false, (track->mixerFlags & kFlagStereo) != 0);
+ _mixer->playStream(track->getType(), &track->mixChanHandle, track->stream, -1, track->getVol(), track->getPan());
_mixer->pauseHandle(track->mixChanHandle, true);
}
}
diff --git a/engines/scumm/imuse_digi/dimuse_track.cpp b/engines/scumm/imuse_digi/dimuse_track.cpp
index 34926fa34e..b7abdd074e 100644
--- a/engines/scumm/imuse_digi/dimuse_track.cpp
+++ b/engines/scumm/imuse_digi/dimuse_track.cpp
@@ -110,8 +110,7 @@ void IMuseDigital::startSound(int soundId, const char *soundName, int soundType,
track->souStreamUsed = (input != 0);
if (track->souStreamUsed) {
- _mixer->playStream(track->getType(), &track->mixChanHandle, input, -1, track->getVol(), track->getPan(),
- DisposeAfterUse::YES, false, (track->mixerFlags & kFlagStereo) != 0);
+ _mixer->playStream(track->getType(), &track->mixChanHandle, input, -1, track->getVol(), track->getPan());
} else {
strcpy(track->soundName, soundName);
track->soundDesc = _sound->openSound(soundId, soundName, soundType, volGroupId, -1);
@@ -167,8 +166,7 @@ void IMuseDigital::startSound(int soundId, const char *soundName, int soundType,
}
track->stream = Audio::makeQueuingAudioStream(freq, track->mixerFlags & kFlagStereo);
- _mixer->playStream(track->getType(), &track->mixChanHandle, track->stream, -1, track->getVol(), track->getPan(),
- DisposeAfterUse::YES, false, (track->mixerFlags & kFlagStereo) != 0);
+ _mixer->playStream(track->getType(), &track->mixChanHandle, track->stream, -1, track->getVol(), track->getPan());
}
track->used = true;
@@ -368,8 +366,7 @@ Track *IMuseDigital::cloneToFadeOutTrack(Track *track, int fadeDelay) {
// Create an appendable output buffer
fadeTrack->stream = Audio::makeQueuingAudioStream(_sound->getFreq(fadeTrack->soundDesc), track->mixerFlags & kFlagStereo);
- _mixer->playStream(track->getType(), &fadeTrack->mixChanHandle, fadeTrack->stream, -1, fadeTrack->getVol(), fadeTrack->getPan(),
- DisposeAfterUse::YES, false, (track->mixerFlags & kFlagStereo) != 0);
+ _mixer->playStream(track->getType(), &fadeTrack->mixChanHandle, fadeTrack->stream, -1, fadeTrack->getVol(), fadeTrack->getPan());
fadeTrack->used = true;
debug(5, "cloneToFadeOutTrack() - end of func, soundId %d, fade soundId %d", track->soundId, fadeTrack->soundId);
diff --git a/engines/scumm/input.cpp b/engines/scumm/input.cpp
index 86048af57c..3ce053f6bc 100644
--- a/engines/scumm/input.cpp
+++ b/engines/scumm/input.cpp
@@ -23,6 +23,7 @@
#include "common/config-manager.h"
#include "common/events.h"
#include "common/system.h"
+#include "common/translation.h"
#include "gui/message.h"
#include "gui/gui-manager.h"
@@ -568,9 +569,9 @@ void ScummEngine::processKeyboard(Common::KeyState lastKeyHit) {
lastKeyHit.hasFlags(Common::KBD_CTRL)) {
_snapScroll ^= 1;
if (_snapScroll) {
- messageDialog("Snap scroll on");
+ messageDialog(_("Snap scroll on"));
} else {
- messageDialog("Snap scroll off");
+ messageDialog(_("Snap scroll off"));
}
if (VAR_CAMERA_FAST_X != 0xFF)
@@ -583,7 +584,7 @@ void ScummEngine::processKeyboard(Common::KeyState lastKeyHit) {
vol--;
// Display the music volume
- ValueDisplayDialog dlg("Music volume: ", 0, 16, vol, ']', '[');
+ ValueDisplayDialog dlg(_("Music volume: "), 0, 16, vol, ']', '[');
vol = runDialog(dlg);
vol *= 16;
@@ -600,7 +601,7 @@ void ScummEngine::processKeyboard(Common::KeyState lastKeyHit) {
_defaultTalkDelay++;
// Display the talk speed
- ValueDisplayDialog dlg("Subtitle speed: ", 0, 9, 9 - _defaultTalkDelay, '+', '-');
+ ValueDisplayDialog dlg(_("Subtitle speed: "), 0, 9, 9 - _defaultTalkDelay, '+', '-');
_defaultTalkDelay = 9 - runDialog(dlg);
// Save the new talkspeed value to ConfMan
diff --git a/engines/scumm/players/player_towns.cpp b/engines/scumm/players/player_towns.cpp
index 5b8ca04021..d540fc4f6b 100644
--- a/engines/scumm/players/player_towns.cpp
+++ b/engines/scumm/players/player_towns.cpp
@@ -202,23 +202,24 @@ Player_Towns_v1::Player_Towns_v1(ScummEngine *vm, Audio::Mixer *mixer) : Player_
memset(_soundOverride, 0, _numSoundMax * sizeof(SoundOvrParameters));
}
- _driver = new TownsEuphonyDriver(mixer);
+ _player = new EuphonyPlayer(mixer);
+ _intf = new TownsAudioInterface(mixer, 0);
}
Player_Towns_v1::~Player_Towns_v1() {
- delete _driver;
+ delete _intf;
+ delete _player;
delete[] _soundOverride;
}
bool Player_Towns_v1::init() {
- if (!_driver)
+ if (!_player)
return false;
- if (!_driver->init())
+ if (!_player->init())
return false;
- _driver->reserveSoundEffectChannels(8);
- _intf = _driver->intf();
+ _player->driver()->reserveSoundEffectChannels(8);
// Treat all 6 fm channels and all 8 pcm channels as sound effect channels
// since music seems to exist as CD audio only in the games which use this
@@ -231,7 +232,7 @@ bool Player_Towns_v1::init() {
}
void Player_Towns_v1::setMusicVolume(int vol) {
- _driver->setMusicVolume(vol);
+ _player->driver()->setMusicVolume(vol);
}
void Player_Towns_v1::startSound(int sound) {
@@ -254,7 +255,9 @@ void Player_Towns_v1::startSound(int sound) {
uint16 len = READ_LE_UINT16(ptr) + 2;
playPcmTrack(sound, ptr + 6, velocity, 64, note ? note : (len > 50 ? ptr[50] : 60), READ_LE_UINT16(ptr + 10));
- } else if (type == 1) {
+ // WORKAROUND for bug #1873 INDY3 FMTOWNS: Music in Venice is distorted
+ // The resource for sound 40 accidently sets the sound type to 255 instead of 1.
+ } else if (type == 1 || (_vm->_game.id == GID_INDY3 && sound == 40)) {
playEuphonyTrack(sound, ptr + 6);
} else if (type == 2) {
@@ -275,7 +278,7 @@ void Player_Towns_v1::stopSound(int sound) {
if (sound != 0 && sound == _eupCurrentSound) {
_eupCurrentSound = 0;
_eupLooping = false;
- _driver->stopParser();
+ _player->stop();
}
stopPcmTrack(sound);
@@ -288,7 +291,7 @@ void Player_Towns_v1::stopAllSounds() {
_eupCurrentSound = 0;
_eupLooping = false;
- _driver->stopParser();
+ _player->stop();
stopPcmTrack(0);
}
@@ -297,7 +300,7 @@ int Player_Towns_v1::getSoundStatus(int sound) const {
if (sound == _cdaCurrentSound)
return _vm->_sound->pollCD();
if (sound == _eupCurrentSound)
- return _driver->parserIsPlaying() ? 1 : 0;
+ return _player->isPlaying() ? 1 : 0;
return Player_Towns::getSoundStatus(sound);
}
@@ -306,7 +309,7 @@ int32 Player_Towns_v1::doCommand(int numargs, int args[]) {
switch (args[0]) {
case 2:
- _driver->intf()->callback(73, 0);
+ _player->driver()->cdaToggle(0);
break;
case 3:
@@ -344,7 +347,7 @@ int32 Player_Towns_v1::doCommand(int numargs, int args[]) {
void Player_Towns_v1::setVolumeCD(int left, int right) {
_cdaVolLeft = left & 0xff;
_cdaVolRight = right & 0xff;
- _driver->setOutputVolume(1, left >> 1, right >> 1);
+ _player->driver()->setOutputVolume(1, left >> 1, right >> 1);
}
void Player_Towns_v1::setSoundVolume(int sound, int left, int right) {
@@ -373,7 +376,7 @@ void Player_Towns_v1::saveLoadWithSerializer(Serializer *ser) {
ser->saveLoadEntries(this, cdEntries);
- if (!_eupLooping && !_driver->parserIsPlaying())
+ if (!_eupLooping && !_player->isPlaying())
_eupCurrentSound = 0;
static const SaveLoadEntry eupEntries[] = {
@@ -409,7 +412,9 @@ void Player_Towns_v1::restoreAfterLoad() {
if (_vm->_game.version != 3)
ptr += 2;
- if (ptr[7] == 1) {
+ // WORKAROUND for bug #1873 INDY3 FMTOWNS: Music in Venice is distorted
+ // The resource for sound 40 accidently sets the sound type to 255 instead of 1.
+ if (ptr[7] == 1 || (_vm->_game.id == GID_INDY3 && _eupCurrentSound == 40)) {
setSoundVolume(_eupCurrentSound, _eupVolLeft, _eupVolRight);
playEuphonyTrack(_eupCurrentSound, ptr);
}
@@ -439,10 +444,10 @@ void Player_Towns_v1::restartLoopingSounds() {
c++;
}
- _driver->playSoundEffect(i + 0x3f, _pcmCurrentSound[i].note, _pcmCurrentSound[i].velo, ptr);
+ _player->driver()->playSoundEffect(i + 0x3f, _pcmCurrentSound[i].note, _pcmCurrentSound[i].velo, ptr);
}
- _driver->intf()->callback(73, 1);
+ _player->driver()->cdaToggle(1);
}
void Player_Towns_v1::startSoundEx(int sound, int velo, int pan, int note) {
@@ -492,9 +497,9 @@ void Player_Towns_v1::stopSoundSuspendLooping(int sound) {
} else {
for (int i = 1; i < 9; i++) {
if (sound == _pcmCurrentSound[i].index) {
- if (!_driver->soundEffectIsPlaying(i + 0x3f))
+ if (!_player->driver()->soundEffectIsPlaying(i + 0x3f))
continue;
- _driver->stopSoundEffect(i + 0x3f);
+ _player->driver()->stopSoundEffect(i + 0x3f);
if (_pcmCurrentSound[i].looping)
_pcmCurrentSound[i].paused = 1;
else
@@ -510,23 +515,23 @@ void Player_Towns_v1::playEuphonyTrack(int sound, const uint8 *data) {
const uint8 *trackData = src + 150;
for (int i = 0; i < 32; i++)
- _driver->configChan_enable(i, *src++);
+ _player->configPart_enable(i, *src++);
for (int i = 0; i < 32; i++)
- _driver->configChan_setMode(i, 0xff);
+ _player->configPart_setType(i, 0xff);
for (int i = 0; i < 32; i++)
- _driver->configChan_remap(i, *src++);
+ _player->configPart_remap(i, *src++);
for (int i = 0; i < 32; i++)
- _driver->configChan_adjustVolume(i, *src++);
+ _player->configPart_adjustVolume(i, *src++);
for (int i = 0; i < 32; i++)
- _driver->configChan_setTranspose(i, *src++);
+ _player->configPart_setTranspose(i, *src++);
src += 8;
for (int i = 0; i < 6; i++)
- _driver->assignChannel(i, *src++);
+ _player->driver()->assignPartToChannel(i, *src++);
for (int i = 0; i < data[14]; i++) {
- _driver->loadInstrument(i, i, pos + i * 48);
- _driver->intf()->callback(4, i, i);
+ _player->driver()->loadInstrument(i, i, pos + i * 48);
+ _player->driver()->setInstrument(i, i);
}
_eupVolLeft = _soundOverride[sound].vLeft;
@@ -537,18 +542,18 @@ void Player_Towns_v1::playEuphonyTrack(int sound, const uint8 *data) {
lvl >>= 2;
for (int i = 0; i < 6; i++)
- _driver->chanVolume(i, lvl);
+ _player->driver()->channelVolume(i, lvl);
uint32 trackSize = READ_LE_UINT32(src);
src += 4;
uint8 startTick = *src++;
- _driver->setMusicTempo(*src++);
- _driver->startMusicTrack(trackData, trackSize, startTick);
+ _player->setTempo(*src++);
+ _player->startTrack(trackData, trackSize, startTick);
_eupLooping = (*src != 1) ? 1 : 0;
- _driver->setMusicLoop(_eupLooping != 0);
- _driver->continueParsing();
+ _player->setLoopStatus(_eupLooping != 0);
+ _player->resume();
_eupCurrentSound = sound;
}
diff --git a/engines/scumm/players/player_towns.h b/engines/scumm/players/player_towns.h
index 3736524ee2..576d17e392 100644
--- a/engines/scumm/players/player_towns.h
+++ b/engines/scumm/players/player_towns.h
@@ -104,8 +104,6 @@ public:
void saveLoadWithSerializer(Serializer *ser);
void restoreAfterLoad();
- TownsEuphonyDriver *driver() { return _driver; }
-
private:
void restartLoopingSounds();
void startSoundEx(int sound, int velo, int pan, int note);
@@ -137,7 +135,7 @@ private:
uint8 _cdaCurrentSoundTemp;
uint8 _cdaNumLoopsTemp;
- TownsEuphonyDriver *_driver;
+ EuphonyPlayer *_player;
};
class Player_Towns_v2 : public Player_Towns {
diff --git a/engines/scumm/scumm-md5.h b/engines/scumm/scumm-md5.h
index a836cf12bc..c85073b877 100644
--- a/engines/scumm/scumm-md5.h
+++ b/engines/scumm/scumm-md5.h
@@ -1,5 +1,5 @@
/*
- This file was generated by the md5table tool on Sun Jun 28 03:19:52 2015
+ This file was generated by the md5table tool on Thu Aug 27 23:44:49 2015
DO NOT EDIT MANUALLY!
*/
@@ -288,6 +288,7 @@ static const MD5Table md5table[] = {
{ "62b8c16b6db226ba95aaa8be73f9885c", "indy3", "EGA", "EGA", -1, Common::ES_ESP, Common::kPlatformAmiga },
{ "632d2fddb8ba97723fa15334763ae857", "thinker1", "", "", 33270, Common::EN_ANY, Common::kPlatformWindows },
{ "63fdcdc95cdeea00060883aed38e5504", "PuttTime", "HE 85", "", -1, Common::EN_ANY, Common::kPlatformUnknown },
+ { "64a22be96d679018696e5c8d3ca8b71d", "freddi", "HE 73", "", 26375, Common::JA_JPN, Common::kPlatformWindows },
{ "6508fd55530e6915507e1cc37f7f045d", "indy3", "EGA", "EGA", -1, Common::EN_ANY, Common::kPlatformDOS },
{ "65563295c3a06493351870f20a1630cf", "spyozon", "HE CUP", "Preview", 5235008, Common::UNK_LANG, Common::kPlatformUnknown },
{ "659942b9a6b519f123a13cca3c333a13", "jungle", "", "", -1, Common::EN_ANY, Common::kPlatformMacintosh },
diff --git a/engines/sherlock/animation.cpp b/engines/sherlock/animation.cpp
index bbf7c913b7..681e71d0f6 100644
--- a/engines/sherlock/animation.cpp
+++ b/engines/sherlock/animation.cpp
@@ -22,6 +22,7 @@
#include "sherlock/animation.h"
#include "sherlock/sherlock.h"
+#include "sherlock/scalpel/scalpel_screen.h"
#include "common/algorithm.h"
namespace Sherlock {
@@ -200,19 +201,16 @@ bool Animation::play3DO(const Common::String &filename, bool intro, int minDelay
// Draw the sprite. Note that we explicitly use the raw frame below, rather than the ImageFrame,
// since we don't want the offsets in the image file to be used, just the explicit position we specify
- if (!fadeActive) {
- screen.transBlitFrom(images[imageFrame]._frame, pt);
- } else {
- // Fade active, blit to backbuffer1
- screen._backBuffer1.transBlitFrom(images[imageFrame]._frame, pt);
- }
+ screen._backBuffer1.transBlitFrom(images[imageFrame]._frame, pt);
+ if (!fadeActive)
+ screen.slamArea(pt.x, pt.y, images[imageFrame]._frame.w, images[imageFrame]._frame.h);
} else {
// At this point, either the sprites for the frame has been complete, or there weren't any sprites
// at all to draw for the frame
if (fadeActive) {
// process fading
- screen.blitFrom3DOcolorLimit(fadeLimitColor);
+ static_cast<Scalpel::Scalpel3DOScreen *>(_vm->_screen)->blitFrom3DOcolorLimit(fadeLimitColor);
if (!fadeLimitColor) {
// we are at the end, so stop
diff --git a/engines/sherlock/configure.engine b/engines/sherlock/configure.engine
index a56129a8f0..fd1c354e78 100644
--- a/engines/sherlock/configure.engine
+++ b/engines/sherlock/configure.engine
@@ -1,3 +1,3 @@
# This file is included from the main "configure" script
# add_engine [name] [desc] [build-by-default] [subengines] [base games] [deps]
-add_engine sherlock "The Lost Files of Sherlock Holmes" no
+add_engine sherlock "The Lost Files of Sherlock Holmes" yes
diff --git a/engines/sherlock/debugger.cpp b/engines/sherlock/debugger.cpp
index 50293db648..39f8da3806 100644
--- a/engines/sherlock/debugger.cpp
+++ b/engines/sherlock/debugger.cpp
@@ -23,7 +23,7 @@
#include "sherlock/debugger.h"
#include "sherlock/sherlock.h"
#include "sherlock/music.h"
-#include "sherlock/scalpel/3do/movie_decoder.h"
+#include "sherlock/scalpel/scalpel.h"
#include "sherlock/scalpel/scalpel_debugger.h"
#include "sherlock/tattoo/tattoo_debugger.h"
#include "audio/mixer.h"
@@ -54,7 +54,7 @@ Debugger::Debugger(SherlockEngine *vm) : GUI::Debugger(), _vm(vm) {
void Debugger::postEnter() {
if (!_3doPlayMovieFile.empty()) {
- Scalpel3DOMoviePlay(_3doPlayMovieFile.c_str(), Common::Point(0, 0));
+ static_cast<Scalpel::ScalpelEngine *>(_vm)->play3doMovie(_3doPlayMovieFile, Common::Point(0, 0));
_3doPlayMovieFile.clear();
}
diff --git a/engines/sherlock/decompress.cpp b/engines/sherlock/decompress.cpp
deleted file mode 100644
index 8e02da3212..0000000000
--- a/engines/sherlock/decompress.cpp
+++ /dev/null
@@ -1,128 +0,0 @@
-/* ScummVM - Graphic Adventure Engine
- *
- * ScummVM is the legal property of its developers, whose names
- * are too numerous to list here. Please refer to the COPYRIGHT
- * file distributed with this source distribution.
- *
- * 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 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.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- */
-
-#include "sherlock/decompress.h"
-
-namespace Sherlock {
-
-/**
- * Decompresses an LZW compressed resource. If no outSize is specified, it will
- * decompress the entire resource. If, however, an explicit size is specified,
- * then it means we're already within a resource, and only want to decompress
- * part of it.
- */
-Common::SeekableReadStream *decompressLZ(Common::SeekableReadStream &source, int32 outSize) {
- if (outSize == -1) {
- source.seek(5);
- outSize = source.readSint32LE();
- }
-
- byte lzWindow[4096];
- uint16 lzWindowPos;
- uint16 cmd;
-
- byte *outBuffer = new byte[outSize];
- byte *outBufferEnd = outBuffer + outSize;
- Common::MemoryReadStream *outS = new Common::MemoryReadStream(outBuffer, outSize, DisposeAfterUse::YES);
-
- memset(lzWindow, 0xFF, 0xFEE);
- lzWindowPos = 0xFEE;
- cmd = 0;
-
- do {
- cmd >>= 1;
- if (!(cmd & 0x100))
- cmd = source.readByte() | 0xFF00;
-
- if (cmd & 1) {
- byte literal = source.readByte();
- *outBuffer++ = literal;
- lzWindow[lzWindowPos] = literal;
- lzWindowPos = (lzWindowPos + 1) & 0x0FFF;
- } else {
- int copyPos, copyLen;
- copyPos = source.readByte();
- copyLen = source.readByte();
- copyPos = copyPos | ((copyLen & 0xF0) << 4);
- copyLen = (copyLen & 0x0F) + 3;
- while (copyLen--) {
- byte literal = lzWindow[copyPos];
- copyPos = (copyPos + 1) & 0x0FFF;
- *outBuffer++ = literal;
- lzWindow[lzWindowPos] = literal;
- lzWindowPos = (lzWindowPos + 1) & 0x0FFF;
- }
- }
- } while (outBuffer < outBufferEnd);
-
- return outS;
-}
-
-
-/**
- * Decompresses a Rose Tattoo resource
- *
-Common::SeekableReadStream *decompress32(Common::SeekableReadStream &source, int32 outSize) {
- if (outSize == -1) {
- outSize = source.readSint32LE();
- }
-
- byte lzWindow[8192];
- byte *outBuffer = new byte[outSize];
- byte *outBufferEnd = outBuffer + outSize;
- Common::MemoryReadStream *outS = new Common::MemoryReadStream(outBuffer, outSize, DisposeAfterUse::YES);
-
- memset(lzWindow, 0xFF, 8192);
- int lzWindowPos = 0xFEE;
- int cmd = 0;
-
- do {
- cmd >>= 1;
- if (!(cmd & 0x100))
- cmd = source.readByte() | 0xFF00;
-
- if (cmd & 1) {
- byte literal = source.readByte();
- *outBuffer++ = literal;
- lzWindow[lzWindowPos] = literal;
- lzWindowPos = (lzWindowPos + 1) & 0x0FFF;
- } else {
- int copyPos, copyLen;
- copyPos = source.readByte();
- copyLen = source.readByte();
- copyPos = copyPos | ((copyLen & 0xF0) << 4);
- copyLen = (copyLen & 0x0F) + 3;
- while (copyLen--) {
- byte literal = lzWindow[copyPos];
- copyPos = (copyPos + 1) & 0x0FFF;
- *outBuffer++ = literal;
- lzWindow[lzWindowPos] = literal;
- lzWindowPos = (lzWindowPos + 1) & 0x0FFF;
- }
- }
- } while (outBuffer < outBufferEnd);
-
- return outS;
-}
-*/
-
-} // namespace Sherlock
diff --git a/engines/sherlock/detection_tables.h b/engines/sherlock/detection_tables.h
index e2b5a3dce9..ce6eafcaca 100644
--- a/engines/sherlock/detection_tables.h
+++ b/engines/sherlock/detection_tables.h
@@ -32,7 +32,7 @@ static const SherlockGameDescription gameDescriptions[] = {
AD_ENTRY1s("talk.lib", "ad0c4d6865edf15da4e9204c08815875", 238928),
Common::EN_ANY,
Common::kPlatformDOS,
- ADGF_UNSTABLE,
+ ADGF_NO_FLAGS,
GUIO6(GUIO_NOSPEECH, GAMEOPTION_ORIGINAL_SAVES, GAMEOPTION_FADE_STYLE, GAMEOPTION_HELP_STYLE,
GAMEOPTION_PORTRAITS_ON, GAMEOPTION_WINDOW_STYLE)
},
@@ -50,7 +50,7 @@ static const SherlockGameDescription gameDescriptions[] = {
AD_LISTEND},
Common::DE_DEU,
Common::kPlatformDOS,
- ADGF_UNSTABLE,
+ ADGF_NO_FLAGS,
GUIO6(GUIO_NOSPEECH, GAMEOPTION_ORIGINAL_SAVES, GAMEOPTION_FADE_STYLE, GAMEOPTION_HELP_STYLE,
GAMEOPTION_PORTRAITS_ON, GAMEOPTION_WINDOW_STYLE)
},
@@ -68,7 +68,7 @@ static const SherlockGameDescription gameDescriptions[] = {
AD_LISTEND},
Common::DE_DEU,
Common::kPlatformDOS,
- ADGF_UNSTABLE,
+ ADGF_NO_FLAGS,
GUIO6(GUIO_NOSPEECH, GAMEOPTION_ORIGINAL_SAVES, GAMEOPTION_FADE_STYLE, GAMEOPTION_HELP_STYLE,
GAMEOPTION_PORTRAITS_ON, GAMEOPTION_WINDOW_STYLE)
},
@@ -76,6 +76,24 @@ static const SherlockGameDescription gameDescriptions[] = {
},
{
+ // Case of the Serrated Scalpel - German
+ // Provided by max565
+ {
+ "scalpel",
+ 0, {
+ {"talk.lib", 0, "3d813fd8505b391a1f8b3a16b1aa7f2e", 284195},
+ {"music.lib", 0, "68ae2f7684ecf903bd60a00bb6bae195", 366465},
+ AD_LISTEND },
+ Common::DE_DEU,
+ Common::kPlatformDOS,
+ ADGF_NO_FLAGS,
+ GUIO6(GUIO_NOSPEECH, GAMEOPTION_ORIGINAL_SAVES, GAMEOPTION_FADE_STYLE, GAMEOPTION_HELP_STYLE,
+ GAMEOPTION_PORTRAITS_ON, GAMEOPTION_WINDOW_STYLE)
+ },
+ GType_SerratedScalpel,
+ },
+
+ {
// Case of the Serrated Scalpel - Spanish CD (from multilingual CD)
// Provided by m_kiewitz
{
@@ -86,7 +104,7 @@ static const SherlockGameDescription gameDescriptions[] = {
AD_LISTEND},
Common::ES_ESP,
Common::kPlatformDOS,
- ADGF_UNSTABLE,
+ ADGF_NO_FLAGS,
GUIO6(GUIO_NOSPEECH, GAMEOPTION_ORIGINAL_SAVES, GAMEOPTION_FADE_STYLE, GAMEOPTION_HELP_STYLE,
GAMEOPTION_PORTRAITS_ON, GAMEOPTION_WINDOW_STYLE)
},
@@ -102,8 +120,7 @@ static const SherlockGameDescription gameDescriptions[] = {
Common::EN_ANY,
Common::kPlatform3DO,
ADGF_UNSTABLE,
- GUIO6(GUIO_NOSPEECH, GAMEOPTION_ORIGINAL_SAVES, GAMEOPTION_FADE_STYLE, GAMEOPTION_HELP_STYLE,
- GAMEOPTION_PORTRAITS_ON, GAMEOPTION_WINDOW_STYLE)
+ GUIO4(GAMEOPTION_FADE_STYLE, GAMEOPTION_HELP_STYLE,GAMEOPTION_PORTRAITS_ON, GAMEOPTION_WINDOW_STYLE)
},
GType_SerratedScalpel,
},
@@ -117,7 +134,7 @@ static const SherlockGameDescription gameDescriptions[] = {
AD_ENTRY1s("talk.lib", "dbdc8a20c96900aa7e4d02f3fe8a274c", 121102),
Common::EN_ANY,
Common::kPlatformDOS,
- ADGF_UNSTABLE | ADGF_DEMO,
+ ADGF_DEMO,
GUIO1(GUIO_NOSPEECH)
},
GType_SerratedScalpel,
@@ -132,7 +149,7 @@ static const SherlockGameDescription gameDescriptions[] = {
AD_ENTRY1s("music.lib", "ec19a09b7fef6fd90b1ab812ce6e9739", 38563),
Common::EN_ANY,
Common::kPlatformDOS,
- ADGF_UNSTABLE | ADGF_DEMO,
+ ADGF_DEMO,
GUIO1(GUIO_NOSPEECH)
},
GType_SerratedScalpel,
@@ -145,9 +162,9 @@ static const SherlockGameDescription gameDescriptions[] = {
"rosetattoo",
"CD",
AD_ENTRY1s("talk.lib", "22e8e6406dd2fbbb238c9898928df42e", 770756),
- Common::EN_ANY,
+ Common::FR_FRA,
Common::kPlatformDOS,
- ADGF_UNSTABLE,
+ ADGF_NO_FLAGS,
GUIO3(GAMEOPTION_ORIGINAL_SAVES, GAMEOPTION_HELP_STYLE, GAMEOPTION_TRANSPARENT_WINDOWS)
},
GType_RoseTattoo
@@ -162,7 +179,7 @@ static const SherlockGameDescription gameDescriptions[] = {
AD_ENTRY1s("talk.lib", "9639a756b0993ebd71cb5f4d8b78b2dc", 765134),
Common::EN_ANY,
Common::kPlatformDOS,
- ADGF_UNSTABLE,
+ ADGF_NO_FLAGS,
GUIO3(GAMEOPTION_ORIGINAL_SAVES, GAMEOPTION_HELP_STYLE, GAMEOPTION_TRANSPARENT_WINDOWS)
},
GType_RoseTattoo,
@@ -177,7 +194,22 @@ static const SherlockGameDescription gameDescriptions[] = {
AD_ENTRY1s("talk.lib", "5027aa72f0d263ed3b1c764a6c397911", 873864),
Common::DE_DEU,
Common::kPlatformDOS,
- ADGF_UNSTABLE,
+ ADGF_NO_FLAGS,
+ GUIO3(GAMEOPTION_ORIGINAL_SAVES, GAMEOPTION_HELP_STYLE, GAMEOPTION_TRANSPARENT_WINDOWS)
+ },
+ GType_RoseTattoo,
+ },
+
+ {
+ // Case of the Rose Tattoo - Spanish CD
+ // Provided by dianiu
+ {
+ "rosetattoo",
+ "CD",
+ AD_ENTRY1s("talk.lib", "4f3ccf50e1012445624569cd605d7449", 783713),
+ Common::ES_ESP,
+ Common::kPlatformDOS,
+ ADGF_NO_FLAGS,
GUIO3(GAMEOPTION_ORIGINAL_SAVES, GAMEOPTION_HELP_STYLE, GAMEOPTION_TRANSPARENT_WINDOWS)
},
GType_RoseTattoo,
diff --git a/engines/sherlock/events.cpp b/engines/sherlock/events.cpp
index 079ea0e663..4b0b7dfb3f 100644
--- a/engines/sherlock/events.cpp
+++ b/engines/sherlock/events.cpp
@@ -28,6 +28,7 @@
#include "sherlock/sherlock.h"
#include "sherlock/events.h"
#include "sherlock/surface.h"
+#include "sherlock/tattoo/tattoo.h"
namespace Sherlock {
@@ -44,7 +45,7 @@ Events::Events(SherlockEngine *vm): _vm(vm) {
_oldButtons = _oldRightButton = false;
_firstPress = false;
_waitCounter = 0;
- _frameRate = 0;
+ _frameRate = GAME_FRAME_RATE;
if (_vm->_interactiveFl)
loadCursors("rmouse.vgs");
@@ -97,9 +98,27 @@ void Events::setCursor(const Graphics::Surface &src, int hotspotX, int hotspotY)
if (!IS_3DO) {
// PC 8-bit palettized
CursorMan.replaceCursor(src.getPixels(), src.w, src.h, hotspotX, hotspotY, 0xff);
+ } else if (!_vm->_isScreenDoubled) {
+ CursorMan.replaceCursor(src.getPixels(), src.w, src.h, hotspotX, hotspotY, 0x0000, false, &src.format);
} else {
+ Graphics::Surface tempSurface;
+ tempSurface.create(2 * src.w, 2 * src.h, src.format);
+
+ for (int y = 0; y < src.h; y++) {
+ const uint16 *srcP = (const uint16 *)src.getBasePtr(0, y);
+ uint16 *destP = (uint16 *)tempSurface.getBasePtr(0, 2 * y);
+ for (int x = 0; x < src.w; ++x, ++srcP, destP += 2) {
+ *destP = *srcP;
+ *(destP + 1) = *srcP;
+ *(destP + 2 * src.w) = *srcP;
+ *(destP + 2 * src.w + 1) = *srcP;
+ }
+ }
+
// 3DO RGB565
- CursorMan.replaceCursor(src.getPixels(), src.w, src.h, hotspotX, hotspotY, 0x0000, false, &src.format);
+ CursorMan.replaceCursor(tempSurface.getPixels(), tempSurface.w, tempSurface.h, 2 * hotspotX, 2 * hotspotY, 0x0000, false, &src.format);
+
+ tempSurface.free();
}
showCursor();
}
@@ -155,7 +174,8 @@ void Events::animateCursorIfNeeded() {
}
void Events::showCursor() {
- CursorMan.showMouse(true);
+ if (IS_SERRATED_SCALPEL || !static_cast<Tattoo::TattooEngine *>(_vm)->_runningProlog)
+ CursorMan.showMouse(true);
}
void Events::hideCursor() {
@@ -176,6 +196,8 @@ void Events::pollEvents() {
Common::Event event;
while (g_system->getEventManager()->pollEvent(event)) {
_mousePos = event.mouse;
+ if (_vm->_isScreenDoubled)
+ _mousePos = Common::Point(_mousePos.x / 2, _mousePos.y / 2);
// Handle events
switch (event.type) {
@@ -219,7 +241,11 @@ void Events::pollEventsAndWait() {
}
void Events::warpMouse(const Common::Point &pt) {
- _mousePos = pt - _vm->_screen->_currentScroll;
+ Common::Point pos = pt;
+ if (_vm->_isScreenDoubled)
+ pos = Common::Point(pt.x / 2, pt.y);
+
+ _mousePos = pos - _vm->_screen->_currentScroll;
g_system->warpMouse(_mousePos.x, _mousePos.y);
}
@@ -237,6 +263,10 @@ void Events::setFrameRate(int newRate) {
_frameRate = newRate;
}
+void Events::toggleSpeed() {
+ _frameRate = (_frameRate == GAME_FRAME_RATE) ? GAME_FRAME_RATE * 2 : GAME_FRAME_RATE;
+}
+
bool Events::checkForNextFrameCounter() {
// Check for next game frame
uint32 milli = g_system->getMillis();
@@ -320,7 +350,8 @@ bool Events::delay(uint32 time, bool interruptable) {
g_system->delayMillis(time);
bool result = !(interruptable && (kbHit() || _pressed || _vm->shouldQuit()));
- clearEvents();
+ if (interruptable)
+ clearEvents();
return result;
} else {
// For long periods go into a loop where we delay by 10ms at a time and then
diff --git a/engines/sherlock/events.h b/engines/sherlock/events.h
index e13ef18822..711804dfdf 100644
--- a/engines/sherlock/events.h
+++ b/engines/sherlock/events.h
@@ -149,6 +149,11 @@ public:
void setFrameRate(int newRate);
/**
+ * Toggle between standard game speed and an "extra fast" mode
+ */
+ void toggleSpeed();
+
+ /**
* Return the current game frame number
*/
uint32 getFrameCounter() const { return _frameCounter; }
diff --git a/engines/sherlock/fonts.cpp b/engines/sherlock/fonts.cpp
index 482e795b6d..4d0991a47c 100644
--- a/engines/sherlock/fonts.cpp
+++ b/engines/sherlock/fonts.cpp
@@ -62,6 +62,43 @@ void Fonts::setFont(int fontNum) {
// load font data
_font = new ImageFile(fontFilename);
+
+ if (IS_SERRATED_SCALPEL) {
+ if (_vm->getLanguage() == Common::ES_ESP) {
+ if (_fontNumber == 1) {
+ // Create a new character - inverted exclamation mark (0x88)
+ // Seems this wasn't included originally, but some text has it
+ // This was obviously not done in the original game interpreter
+ ImageFrame &frameExclamationMark = (*_font)[0]; // get actual exclamation mark
+ ImageFrame frameRevExclamationMark;
+
+ frameRevExclamationMark._width = frameExclamationMark._width;
+ frameRevExclamationMark._height = frameExclamationMark._height;
+ frameRevExclamationMark._paletteBase = frameExclamationMark._paletteBase;
+ frameRevExclamationMark._rleEncoded = frameExclamationMark._rleEncoded;
+ frameRevExclamationMark._size = frameExclamationMark._size;
+ frameRevExclamationMark._frame.create(frameExclamationMark._width, frameExclamationMark._height, Graphics::PixelFormat::createFormatCLUT8());
+
+ byte *frameExclMarkPixels = (byte *)frameExclamationMark._frame.getPixels();
+ byte *frameRevExclMarkPixels = (byte *)frameRevExclamationMark._frame.getPixels();
+
+ uint16 revExclMarkY = frameExclamationMark._height - 1;
+ frameRevExclMarkPixels += frameExclamationMark._width * (frameExclamationMark._height - 1);
+ for (uint16 exclMarkY = 0; exclMarkY < frameExclamationMark._height; exclMarkY++) {
+ memcpy(frameRevExclMarkPixels, frameExclMarkPixels, frameExclamationMark._width);
+ revExclMarkY--;
+ frameRevExclMarkPixels -= frameExclamationMark._width;
+ frameExclMarkPixels += frameExclamationMark._width;
+ }
+
+ frameRevExclamationMark._offset.x = frameExclamationMark._offset.x;
+ frameRevExclamationMark._offset.y = frameExclamationMark._offset.y + 1;
+
+ _font->push_back(frameRevExclamationMark);
+ }
+ }
+ }
+
} else {
// 3DO
switch (fontNum) {
@@ -81,7 +118,7 @@ void Fonts::setFont(int fontNum) {
}
_charCount = _font->size();
-
+
// Iterate through the frames to find the widest and tallest font characters
_fontHeight = _widestChar = 0;
for (uint idx = 0; idx < _charCount; ++idx) {
@@ -118,6 +155,24 @@ inline byte Fonts::translateChar(byte c) {
return 135; // and this for SH1
default:
if (IS_SERRATED_SCALPEL) {
+ if (_vm->getLanguage() == Common::ES_ESP) {
+ if (_fontNumber == 1) {
+ // Special workarounds for translated game text, which was skipped because of effectively a bug
+ // This was not done in the original interpreter
+ // It seems at least the inverted exclamation mark was skipped by the original interpreter /
+ // wasn't shown at all.
+ // This character is used for example in the alley room, when talking with the inspector after
+ // searching the corpse. "[0xAD]Claro! Mi experiencia profesional revela que esta mujer fue asesinada..."
+ // The same text gets put inside Watson's journal as well and should be on page 10 right after
+ // talking with the inspector. For further study see bug #6931
+ // Inverted question mark was also skipped, but at least that character is inside the font already.
+ if (c == 0xAD) {
+ // inverted exclamation mark
+ return 0x88; // our own font character, created during setFont()
+ }
+ // Inverted question mask is 0x86 (mapped from 0x88)
+ }
+ }
if (c >= 0x80) { // German SH1 version did this, but not German SH2
c--;
}
@@ -147,10 +202,13 @@ void Fonts::writeString(Surface *surface, const Common::String &str,
}
curChar = translateChar(curChar);
- assert(curChar < _charCount);
- ImageFrame &frame = (*_font)[curChar];
- surface->transBlitFrom(frame, Common::Point(charPos.x, charPos.y + _yOffsets[curChar]), false, overrideColor);
- charPos.x += frame._frame.w + 1;
+ if (curChar < _charCount) {
+ ImageFrame &frame = (*_font)[curChar];
+ surface->transBlitFrom(frame, Common::Point(charPos.x, charPos.y + _yOffsets[curChar]), false, overrideColor);
+ charPos.x += frame._frame.w + 1;
+ } else {
+ warning("Invalid character encountered - %d", (int)curChar);
+ }
}
}
diff --git a/engines/sherlock/image_file.cpp b/engines/sherlock/image_file.cpp
index 3d881eb655..971980a2ac 100644
--- a/engines/sherlock/image_file.cpp
+++ b/engines/sherlock/image_file.cpp
@@ -961,59 +961,57 @@ void ImageFile3DO::loadFont(Common::SeekableReadStream &stream) {
for (curChar = 33; curChar < header_charCount; curChar++) {
// create frame
- {
- ImageFrame imageFrame;
-
- imageFrame._width = widthTablePtr[curChar];
- imageFrame._height = header_fontHeight;
- imageFrame._paletteBase = 0;
- imageFrame._offset.x = 0;
- imageFrame._offset.y = 0;
- imageFrame._rleEncoded = false;
- imageFrame._size = 0;
-
- // Extract pixels
- imageFrame._frame.create(imageFrame._width, imageFrame._height, Graphics::PixelFormat(2, 5, 6, 5, 0, 11, 5, 0, 0));
- uint16 *dest = (uint16 *)imageFrame._frame.getPixels();
- Common::fill(dest, dest + imageFrame._width * imageFrame._height, 0);
-
- curCharHeightLeft = header_fontHeight;
- while (curCharHeightLeft) {
- curCharWidthLeft = widthTablePtr[curChar];
- curBitsPtr = curBitsLinePtr;
- curBitsLeft = 8;
- curPosX = 0;
-
- while (curCharWidthLeft) {
- if (!(curPosX & 1)) {
- curBits = *curBitsPtr >> 4;
- } else {
- curBits = *curBitsPtr & 0x0F;
- curBitsPtr++;
- }
- // doing this properly is complicated
- // the 3DO has built-in anti-aliasing
- // this here at least results in somewhat readable text
- // TODO: make it better
- if (curBits) {
- curBitsReversed = (curBits >> 3) | ((curBits & 0x04) >> 1) | ((curBits & 0x02) << 1) | ((curBits & 0x01) << 3);
- curBits = 20 - curBits;
- }
-
- byte curIntensity = curBits;
- *dest = (curIntensity << 11) | (curIntensity << 6) | curIntensity;
- dest++;
-
- curCharWidthLeft--;
- curPosX++;
+ ImageFrame imageFrame;
+
+ imageFrame._width = widthTablePtr[curChar];
+ imageFrame._height = header_fontHeight;
+ imageFrame._paletteBase = 0;
+ imageFrame._offset.x = 0;
+ imageFrame._offset.y = 0;
+ imageFrame._rleEncoded = false;
+ imageFrame._size = 0;
+
+ // Extract pixels
+ imageFrame._frame.create(imageFrame._width, imageFrame._height, Graphics::PixelFormat(2, 5, 6, 5, 0, 11, 5, 0, 0));
+ uint16 *dest = (uint16 *)imageFrame._frame.getPixels();
+ Common::fill(dest, dest + imageFrame._width * imageFrame._height, 0);
+
+ curCharHeightLeft = header_fontHeight;
+ while (curCharHeightLeft) {
+ curCharWidthLeft = widthTablePtr[curChar];
+ curBitsPtr = curBitsLinePtr;
+ curBitsLeft = 8;
+ curPosX = 0;
+
+ while (curCharWidthLeft) {
+ if (!(curPosX & 1)) {
+ curBits = *curBitsPtr >> 4;
+ } else {
+ curBits = *curBitsPtr & 0x0F;
+ curBitsPtr++;
+ }
+ // doing this properly is complicated
+ // the 3DO has built-in anti-aliasing
+ // this here at least results in somewhat readable text
+ // TODO: make it better
+ if (curBits) {
+ curBitsReversed = (curBits >> 3) | ((curBits & 0x04) >> 1) | ((curBits & 0x02) << 1) | ((curBits & 0x01) << 3);
+ curBits = 20 - curBits;
}
- curCharHeightLeft--;
- curBitsLinePtr += header_bytesPerLine;
+ byte curIntensity = curBits;
+ *dest = (curIntensity << 11) | (curIntensity << 6) | curIntensity;
+ dest++;
+
+ curCharWidthLeft--;
+ curPosX++;
}
- push_back(imageFrame);
+ curCharHeightLeft--;
+ curBitsLinePtr += header_bytesPerLine;
}
+
+ push_back(imageFrame);
}
// Warning below being used to silence unused variable warnings for now
@@ -1051,10 +1049,12 @@ void StreamingImageFile::close() {
_stream = nullptr;
_frameNumber = -1;
_active = false;
+ _imageFrame._frame.free();
}
bool StreamingImageFile::getNextFrame() {
// Don't proceed if we're already at the end of the stream
+ assert(_stream);
if (_stream->pos() >= _stream->size()) {
_active = false;
return false;
@@ -1081,6 +1081,9 @@ bool StreamingImageFile::getNextFrame() {
_imageFrame._size = frameStream->readUint16LE() - 11;
_imageFrame._rleMarker = frameStream->readByte();
+ // Free the previous frame
+ _imageFrame._frame.free();
+
// Decode the frame
if (_compressed) {
delete frameStream;
diff --git a/engines/sherlock/journal.cpp b/engines/sherlock/journal.cpp
index 334cc05abf..e443b6f727 100644
--- a/engines/sherlock/journal.cpp
+++ b/engines/sherlock/journal.cpp
@@ -24,6 +24,7 @@
#include "sherlock/scalpel/scalpel.h"
#include "sherlock/scalpel/scalpel_fixed_text.h"
#include "sherlock/scalpel/scalpel_journal.h"
+#include "sherlock/scalpel/scalpel_talk.h"
#include "sherlock/tattoo/tattoo.h"
#include "sherlock/tattoo/tattoo_fixed_text.h"
#include "sherlock/tattoo/tattoo_journal.h"
@@ -250,7 +251,7 @@ bool Journal::drawJournal(int direction, int howFar) {
// Print out the found keyword
Common::String lineMatch(matchP, matchP + _find.size());
- byte fgColor = IS_SERRATED_SCALPEL ? (byte)Scalpel::INV_FOREGROUND : (byte)Tattoo::INV_FOREGROUND;
+ byte fgColor = IS_SERRATED_SCALPEL ? (byte)Scalpel::INV_FOREGROUND : (byte)Tattoo::PEN_HIGHLIGHT_COLOR;
screen.gPrint(Common::Point(JOURNAL_LEFT_X + width, yp), fgColor, "%s", lineMatch.c_str());
width += screen.stringWidth(lineMatch.c_str());
@@ -485,9 +486,9 @@ void Journal::loadJournalFile(bool alreadyLoaded) {
// Copy text from the place until either the reply ends, a comment
// {} block is started, or a control character is encountered
journalString += c;
- do {
+ while (*replyP && *replyP < opcodes[0] && *replyP != '{' && *replyP != '}') {
journalString += *replyP++;
- } while (*replyP && *replyP < opcodes[0] && *replyP != '{' && *replyP != '}');
+ }
commentJustPrinted = false;
}
@@ -525,6 +526,9 @@ void Journal::loadJournalFile(bool alreadyLoaded) {
else
journalString += people._characters[c]._name;
+ if (IS_SERRATED_SCALPEL && _vm->getLanguage() == Common::DE_DEU)
+ Scalpel::ScalpelTalk::skipBadText(replyP);
+
const byte *strP = replyP;
byte v;
do {
diff --git a/engines/sherlock/music.cpp b/engines/sherlock/music.cpp
index 7802bf5eeb..8b8f359de3 100644
--- a/engines/sherlock/music.cpp
+++ b/engines/sherlock/music.cpp
@@ -225,6 +225,7 @@ Music::Music(SherlockEngine *vm, Audio::Mixer *mixer) : _vm(vm), _mixer(mixer) {
_musicOn = false;
_midiOption = false;
_musicVolume = 0;
+ _midiMusicData = nullptr;
if (IS_3DO) {
// 3DO - uses digital samples for music
@@ -397,6 +398,7 @@ bool Music::playMusic(const Common::String &name) {
if (!_musicOn)
return false;
+ _nextSongName = _currentSongName = name;
debugC(kDebugLevelMusic, "Music: playMusic('%s')", name.c_str());
if (!IS_3DO) {
@@ -469,8 +471,8 @@ bool Music::playMusic(const Common::String &name) {
}
}
+ _midiMusicData = midiMusicData;
_midiParser->loadMusic(midiMusicData, midiMusicDataSize);
-
} else {
// 3DO: sample based
Audio::AudioStream *musicStream;
@@ -516,6 +518,8 @@ void Music::freeSong() {
_midiParser->unloadMusic();
}
+ delete[] _midiMusicData;
+ _midiMusicData = nullptr;
_musicPlaying = false;
}
@@ -613,4 +617,10 @@ void Music::getSongNames(Common::StringArray &songs) {
Common::sort(songs.begin(), songs.end());
}
+void Music::checkSongProgress() {
+ if (!isPlaying()) {
+ playMusic(_nextSongName);
+ }
+}
+
} // End of namespace Sherlock
diff --git a/engines/sherlock/music.h b/engines/sherlock/music.h
index afd3a429be..186e2aa2dc 100644
--- a/engines/sherlock/music.h
+++ b/engines/sherlock/music.h
@@ -68,6 +68,7 @@ private:
MidiDriver *_midiDriver;
Audio::SoundHandle _digitalMusicHandle;
MusicType _musicType;
+ byte *_midiMusicData;
/**
* Play the specified music resource
@@ -127,6 +128,12 @@ public:
* Gets the names of all the songs in the game. Used by the debugger.
*/
void getSongNames(Common::StringArray &songs);
+
+ /**
+ * Checks to see if the currently playing song has finished, then the music specified
+ * in _nextSongName will be started
+ */
+ void checkSongProgress();
};
} // End of namespace Sherlock
diff --git a/engines/sherlock/objects.cpp b/engines/sherlock/objects.cpp
index 093f666a46..e70b707404 100644
--- a/engines/sherlock/objects.cpp
+++ b/engines/sherlock/objects.cpp
@@ -539,7 +539,7 @@ int BaseObject::checkNameForCodes(const Common::String &name, FixedTextActionId
// G: Have object go somewhere
// A: Add onto existing co-ordinates
Common::String sx(name.c_str() + 2, name.c_str() + 5);
- Common::String sy(name.c_str() + 6, name.c_str() + 9);
+ Common::String sy(name.c_str() + 5, name.c_str() + 8);
if (ch == 'G')
_position = Common::Point(atoi(sx.c_str()), atoi(sy.c_str()));
@@ -620,6 +620,7 @@ void Sprite::clear() {
_images = nullptr;
_imageFrame = nullptr;
_walkCount = 0;
+ _oldWalkSequence = 0;
_allow = 0;
_frameNumber = 0;
_position.x = _position.y = 0;
@@ -634,6 +635,7 @@ void Sprite::clear() {
_misc = 0;
_altImages = nullptr;
_altSeq = 0;
+ _centerWalk = 0;
Common::fill(&_stopFrames[0], &_stopFrames[8], (ImageFrame *)nullptr);
}
diff --git a/engines/sherlock/people.cpp b/engines/sherlock/people.cpp
index b1f4abba47..8057e26204 100644
--- a/engines/sherlock/people.cpp
+++ b/engines/sherlock/people.cpp
@@ -184,8 +184,9 @@ void People::reset() {
Person &p = *_data[idx];
if (IS_SERRATED_SCALPEL) {
- p._type = CHARACTER;
- p._position = Point32(100 * FIXED_INT_MULTIPLIER, 110 * FIXED_INT_MULTIPLIER);
+ p._type = _holmesOn ? CHARACTER : HIDDEN;
+ if (!saves._justLoaded)
+ p._position = Point32(100 * FIXED_INT_MULTIPLIER, 110 * FIXED_INT_MULTIPLIER);
} else if (!talk._scriptMoreFlag && !saves._justLoaded) {
p._type = (idx == 0) ? CHARACTER : INVALID;
p._position = Point32(36 * FIXED_INT_MULTIPLIER, 29 * FIXED_INT_MULTIPLIER);
diff --git a/engines/sherlock/scalpel/3do/movie_decoder.cpp b/engines/sherlock/scalpel/3do/movie_decoder.cpp
index 8e8f99bc19..da4d08ca47 100644
--- a/engines/sherlock/scalpel/3do/movie_decoder.cpp
+++ b/engines/sherlock/scalpel/3do/movie_decoder.cpp
@@ -464,47 +464,4 @@ Audio::AudioStream *Scalpel3DOMovieDecoder::StreamAudioTrack::getAudioStream() c
return _audioStream;
}
-// Test-code
-
-// Code for showing a movie. Only meant for testing/debug purposes
-bool Scalpel3DOMoviePlay(const char *filename, Common::Point pos) {
- Scalpel3DOMovieDecoder *videoDecoder = new Scalpel3DOMovieDecoder();
-
- if (!videoDecoder->loadFile(filename)) {
- warning("Scalpel3DOMoviePlay: could not open '%s'", filename);
- return false;
- }
-
- bool skipVideo = false;
- //byte bytesPerPixel = videoDecoder->getPixelFormat().bytesPerPixel;
- uint16 width = videoDecoder->getWidth();
- uint16 height = videoDecoder->getHeight();
- //uint16 pitch = videoDecoder->getWidth() * bytesPerPixel;
-
- videoDecoder->start();
-
- while (!g_engine->shouldQuit() && !videoDecoder->endOfVideo() && (!skipVideo)) {
- if (videoDecoder->needsUpdate()) {
- const Graphics::Surface *frame = videoDecoder->decodeNextFrame();
-
- if (frame) {
- g_system->copyRectToScreen(frame->getPixels(), frame->pitch, pos.x, pos.y, width, height);
- g_system->updateScreen();
- }
- }
-
- Common::Event event;
- while (g_system->getEventManager()->pollEvent(event)) {
- if ((event.type == Common::EVENT_KEYDOWN && event.kbd.keycode == Common::KEYCODE_ESCAPE))
- skipVideo = true;
- }
-
- g_system->delayMillis(10);
- }
- videoDecoder->close();
- delete videoDecoder;
-
- return !skipVideo;
-}
-
} // End of namespace Sherlock
diff --git a/engines/sherlock/scalpel/3do/movie_decoder.h b/engines/sherlock/scalpel/3do/movie_decoder.h
index 9f1670fc6c..73b125443b 100644
--- a/engines/sherlock/scalpel/3do/movie_decoder.h
+++ b/engines/sherlock/scalpel/3do/movie_decoder.h
@@ -119,9 +119,6 @@ private:
StreamAudioTrack *_audioTrack;
};
-// Testing
-extern bool Scalpel3DOMoviePlay(const char *filename, Common::Point pos);
-
} // End of namespace Sherlock
#endif
diff --git a/engines/sherlock/scalpel/scalpel.cpp b/engines/sherlock/scalpel/scalpel.cpp
index c3915a1cf2..b17f38b218 100644
--- a/engines/sherlock/scalpel/scalpel.cpp
+++ b/engines/sherlock/scalpel/scalpel.cpp
@@ -21,16 +21,18 @@
*/
#include "engines/util.h"
+#include "gui/saveload.h"
+#include "common/translation.h"
#include "sherlock/scalpel/scalpel.h"
#include "sherlock/scalpel/scalpel_fixed_text.h"
#include "sherlock/scalpel/scalpel_map.h"
#include "sherlock/scalpel/scalpel_people.h"
#include "sherlock/scalpel/scalpel_scene.h"
+#include "sherlock/scalpel/scalpel_screen.h"
#include "sherlock/scalpel/tsage/logo.h"
#include "sherlock/sherlock.h"
#include "sherlock/music.h"
#include "sherlock/animation.h"
-// for 3DO
#include "sherlock/scalpel/3do/movie_decoder.h"
namespace Sherlock {
@@ -100,103 +102,177 @@ static const byte MAP_SEQUENCES[3][MAX_FRAME] = {
struct PeopleData {
const char *portrait;
- const char *name;
+ int fixedTextId;
byte stillSequences[MAX_TALK_SEQUENCES];
byte talkSequences[MAX_TALK_SEQUENCES];
};
const PeopleData PEOPLE_DATA[MAX_PEOPLE] = {
- { "HOLM", "Sherlock Holmes", { 1, 0, 0 }, { 1, 0, 0 } },
- { "WATS", "Dr. Watson", { 6, 0, 0 }, { 5, 5, 6, 7, 8, 7, 8, 6, 0, 0 } },
- { "LEST", "Inspector Lestrade", { 4, 0, 0 }, { 2, 0, 0 } },
- { "CON1", "Constable O'Brien", { 2, 0, 0 }, { 1, 0, 0 } },
- { "CON2", "Constable Lewis", { 2, 0, 0 }, { 1, 0, 0 } },
- { "SHEI", "Sheila Parker", { 2, 0, 0 }, { 2, 3, 0, 0 } },
- { "HENR", "Henry Carruthers", { 3, 0, 0 }, { 3, 0, 0 } },
- { "LESL", "Lesley", { 9, 0, 0 }, { 1, 2, 3, 2, 1, 2, 3, 0, 0 } },
- { "USH1", "An Usher", { 13, 0, 0 }, { 13, 14, 0, 0 } },
- { "USH2", "An Usher", { 2, 0, 0 }, { 2, 0, 0 } },
- { "FRED", "Fredrick Epstein", { 4, 0, 0 }, { 1, 2, 3, 4, 3, 4, 3, 2, 0, 0 } },
- { "WORT", "Mrs. Worthington", { 9, 0, 0 }, { 8, 0, 0 } },
- { "COAC", "The Coach", { 2, 0, 0 }, { 1, 2, 3, 4, 5, 4, 3, 2, 0, 0 } },
- { "PLAY", "A Player", { 8, 0, 0 }, { 7, 8, 0, 0 } },
- { "WBOY", "Tim", { 13, 0, 0 }, { 12, 13, 0, 0 } },
- { "JAME", "James Sanders", { 6, 0, 0 }, { 3, 4, 0, 0 } },
- { "BELL", "Belle", { 1, 0, 0 }, { 4, 5, 0, 0 } },
- { "GIRL", "Cleaning Girl", { 20, 0, 0 }, { 14, 15, 16, 17, 18, 19, 20, 20, 20, 0, 0 } },
- { "EPST", "Fredrick Epstein", { 17, 0, 0 }, { 16, 17, 18, 18, 18, 17, 17, 0, 0 } },
- { "WIGG", "Wiggins", { 3, 0, 0 }, { 2, 3, 0, 0 } },
- { "PAUL", "Paul", { 2, 0, 0 }, { 1, 2, 0, 0 } },
- { "BART", "The Bartender", { 1, 0, 0 }, { 1, 0, 0 } },
- { "DIRT", "A Dirty Drunk", { 1, 0, 0 }, { 1, 0, 0 } },
- { "SHOU", "A Shouting Drunk", { 1, 0, 0 }, { 1, 0, 0 } },
- { "STAG", "A Staggering Drunk", { 1, 0, 0 }, { 1, 0, 0 } },
- { "BOUN", "The Bouncer", { 1, 0, 0 }, { 1, 0, 0 } },
- { "SAND", "James Sanders", { 6, 0, 0 }, { 5, 6, 0, 0 } },
- { "CORO", "The Coroner", { 6, 0, 0 }, { 4, 5, 0, 0 } },
- { "EQUE", "Reginald Snipes", { 1, 0, 0 }, { 1, 0, 0 } },
- { "GEOR", "George Blackwood", { 1, 0, 0 }, { 1, 0, 0 } },
- { "LARS", "Lars", { 7, 0, 0 }, { 5, 6, 0, 0 } },
- { "PARK", "Sheila Parker", { 1, 0, 0 }, { 1, 0, 0 } },
- { "CHEM", "The Chemist", { 8, 0, 0 }, { 8, 9, 0, 0 } },
- { "GREG", "Inspector Gregson", { 6, 0, 0 }, { 5, 6, 0, 0 } },
- { "LAWY", "Jacob Farthington", { 1, 0, 0 }, { 1, 0, 0 } },
- { "MYCR", "Mycroft", { 1, 0, 0 }, { 1, 0, 0 } },
- { "SHER", "Old Sherman", { 7, 0, 0 }, { 7, 8, 0, 0 } },
- { "CHMB", "Richard", { 1, 0, 0 }, { 1, 0, 0 } },
- { "BARM", "The Barman", { 1, 0, 0 }, { 1, 0, 0 } },
- { "DAND", "A Dandy Player", { 1, 0, 0 }, { 1, 0, 0 } },
- { "ROUG", "A Rough-looking Player", { 1, 0, 0 }, { 1, 0, 0 } },
- { "SPEC", "A Spectator", { 1, 0, 0 }, { 1, 0, 0 } },
- { "HUNT", "Robert Hunt", { 1, 0, 0 }, { 1, 0, 0 } },
- { "VIOL", "Violet", { 3, 0, 0 }, { 3, 4, 0, 0 } },
- { "PETT", "Pettigrew", { 1, 0, 0 }, { 1, 0, 0 } },
- { "APPL", "Augie", { 8, 0, 0 }, { 14, 15, 0, 0 } },
- { "ANNA", "Anna Carroway", { 16, 0, 0 }, { 3, 4, 5, 6, 0, 0 } },
- { "GUAR", "A Guard", { 1, 0, 0 }, { 4, 5, 6, 0, 0 } },
- { "ANTO", "Antonio Caruso", { 8, 0, 0 }, { 7, 8, 0, 0 } },
- { "TOBY", "Toby the Dog", { 1, 0, 0 }, { 1, 0, 0 } },
- { "KING", "Simon Kingsley", { 13, 0, 0 }, { 13, 14, 0, 0 } },
- { "ALFR", "Alfred", { 2, 0, 0 }, { 2, 3, 0, 0 } },
- { "LADY", "Lady Brumwell", { 1, 0, 0 }, { 3, 4, 0, 0 } },
- { "ROSA", "Madame Rosa", { 1, 0, 0 }, { 1, 30, 0, 0 } },
- { "LADB", "Lady Brumwell", { 1, 0, 0 }, { 3, 4, 0, 0 } },
- { "MOOR", "Joseph Moorehead", { 1, 0, 0 }, { 1, 0, 0 } },
- { "BEAL", "Mrs. Beale", { 5, 0, 0 }, { 14, 15, 16, 17, 18, 19, 20, 0, 0 } },
- { "LION", "Felix", { 1, 0, 0 }, { 1, 0, 0 } },
- { "HOLL", "Hollingston", { 1, 0, 0 }, { 1, 0, 0 } },
- { "CALL", "Constable Callaghan", { 1, 0, 0 }, { 1, 0, 0 } },
- { "JERE", "Sergeant Duncan", { 2, 0, 0 }, { 1, 1, 2, 2, 0, 0 } },
- { "LORD", "Lord Brumwell", { 1, 0, 0 }, { 9, 10, 0, 0 } },
- { "NIGE", "Nigel Jaimeson", { 1, 0, 0 }, { 1, 2, 0, 138, 3, 4, 0, 138, 0, 0 } },
- { "JONA", "Jonas", { 1, 0, 0 }, { 1, 8, 0, 0 } },
- { "DUGA", "Constable Dugan", { 1, 0, 0 }, { 1, 0, 0 } },
- { "INSP", "Inspector Lestrade", { 4, 0, 0 }, { 2, 0, 0 } }
+ { "HOLM", kFixedText_People_SherlockHolmes, { 1, 0, 0 }, { 1, 0, 0 } },
+ { "WATS", kFixedText_People_DrWatson, { 6, 0, 0 }, { 5, 5, 6, 7, 8, 7, 8, 6, 0, 0 } },
+ { "LEST", kFixedText_People_InspectorLestrade, { 4, 0, 0 }, { 2, 0, 0 } },
+ { "CON1", kFixedText_People_ConstableOBrien, { 2, 0, 0 }, { 1, 0, 0 } },
+ { "CON2", kFixedText_People_ConstableLewis, { 2, 0, 0 }, { 1, 0, 0 } },
+ { "SHEI", kFixedText_People_SheilaParker, { 2, 0, 0 }, { 2, 3, 0, 0 } },
+ { "HENR", kFixedText_People_HenryCarruthers, { 3, 0, 0 }, { 3, 0, 0 } },
+ { "LESL", kFixedText_People_Lesley, { 9, 0, 0 }, { 1, 2, 3, 2, 1, 2, 3, 0, 0 } },
+ { "USH1", kFixedText_People_AnUsher, { 13, 0, 0 }, { 13, 14, 0, 0 } },
+ { "USH2", kFixedText_People_AnUsher, { 2, 0, 0 }, { 2, 0, 0 } },
+ { "FRED", kFixedText_People_FredrickEpstein, { 4, 0, 0 }, { 1, 2, 3, 4, 3, 4, 3, 2, 0, 0 } },
+ { "WORT", kFixedText_People_MrsWorthington, { 9, 0, 0 }, { 8, 0, 0 } },
+ { "COAC", kFixedText_People_TheCoach, { 2, 0, 0 }, { 1, 2, 3, 4, 5, 4, 3, 2, 0, 0 } },
+ { "PLAY", kFixedText_People_APlayer, { 8, 0, 0 }, { 7, 8, 0, 0 } },
+ { "WBOY", kFixedText_People_Tim, { 13, 0, 0 }, { 12, 13, 0, 0 } },
+ { "JAME", kFixedText_People_JamesSanders, { 6, 0, 0 }, { 3, 4, 0, 0 } },
+ { "BELL", kFixedText_People_Belle, { 1, 0, 0 }, { 4, 5, 0, 0 } },
+ { "GIRL", kFixedText_People_CleaningGirl, { 20, 0, 0 }, { 14, 15, 16, 17, 18, 19, 20, 20, 20, 0, 0 } },
+ { "EPST", kFixedText_People_FredrickEpstein, { 17, 0, 0 }, { 16, 17, 18, 18, 18, 17, 17, 0, 0 } },
+ { "WIGG", kFixedText_People_Wiggins, { 3, 0, 0 }, { 2, 3, 0, 0 } },
+ { "PAUL", kFixedText_People_Paul, { 2, 0, 0 }, { 1, 2, 0, 0 } },
+ { "BART", kFixedText_People_TheBartender, { 1, 0, 0 }, { 1, 0, 0 } },
+ { "DIRT", kFixedText_People_ADirtyDrunk, { 1, 0, 0 }, { 1, 0, 0 } },
+ { "SHOU", kFixedText_People_AShoutingDrunk, { 1, 0, 0 }, { 1, 0, 0 } },
+ { "STAG", kFixedText_People_AStaggeringDrunk, { 1, 0, 0 }, { 1, 0, 0 } },
+ { "BOUN", kFixedText_People_TheBouncer, { 1, 0, 0 }, { 1, 0, 0 } },
+ { "SAND", kFixedText_People_JamesSanders, { 6, 0, 0 }, { 5, 6, 0, 0 } },
+ { "CORO", kFixedText_People_TheCoroner, { 6, 0, 0 }, { 4, 5, 0, 0 } },
+ { "EQUE", kFixedText_People_ReginaldSnipes, { 1, 0, 0 }, { 1, 0, 0 } },
+ { "GEOR", kFixedText_People_GeorgeBlackwood, { 1, 0, 0 }, { 1, 0, 0 } },
+ { "LARS", kFixedText_People_Lars, { 7, 0, 0 }, { 5, 6, 0, 0 } },
+ { "PARK", kFixedText_People_SheilaParker, { 1, 0, 0 }, { 1, 0, 0 } },
+ { "CHEM", kFixedText_People_TheChemist, { 8, 0, 0 }, { 8, 9, 0, 0 } },
+ { "GREG", kFixedText_People_InspectorGregson, { 6, 0, 0 }, { 5, 6, 0, 0 } },
+ { "LAWY", kFixedText_People_JacobFarthington, { 1, 0, 0 }, { 1, 0, 0 } },
+ { "MYCR", kFixedText_People_Mycroft, { 1, 0, 0 }, { 1, 0, 0 } },
+ { "SHER", kFixedText_People_OldSherman, { 7, 0, 0 }, { 7, 8, 0, 0 } },
+ { "CHMB", kFixedText_People_Richard, { 1, 0, 0 }, { 1, 0, 0 } },
+ { "BARM", kFixedText_People_TheBarman, { 1, 0, 0 }, { 1, 0, 0 } },
+ { "DAND", kFixedText_People_ADandyPlayer, { 1, 0, 0 }, { 1, 0, 0 } },
+ { "ROUG", kFixedText_People_ARoughlookingPlayer, { 1, 0, 0 }, { 1, 0, 0 } },
+ { "SPEC", kFixedText_People_ASpectator, { 1, 0, 0 }, { 1, 0, 0 } },
+ { "HUNT", kFixedText_People_RobertHunt, { 1, 0, 0 }, { 1, 0, 0 } },
+ { "VIOL", kFixedText_People_Violet, { 3, 0, 0 }, { 3, 4, 0, 0 } },
+ { "PETT", kFixedText_People_Pettigrew, { 1, 0, 0 }, { 1, 0, 0 } },
+ { "APPL", kFixedText_People_Augie, { 8, 0, 0 }, { 14, 15, 0, 0 } },
+ { "ANNA", kFixedText_People_AnnaCarroway, { 16, 0, 0 }, { 3, 4, 5, 6, 0, 0 } },
+ { "GUAR", kFixedText_People_AGuard, { 1, 0, 0 }, { 4, 5, 6, 0, 0 } },
+ { "ANTO", kFixedText_People_AntonioCaruso, { 8, 0, 0 }, { 7, 8, 0, 0 } },
+ { "TOBY", kFixedText_People_TobyTheDog, { 1, 0, 0 }, { 1, 0, 0 } },
+ { "KING", kFixedText_People_SimonKingsley, { 13, 0, 0 }, { 13, 14, 0, 0 } },
+ { "ALFR", kFixedText_People_Alfred, { 2, 0, 0 }, { 2, 3, 0, 0 } },
+ { "LADY", kFixedText_People_LadyBrumwell, { 1, 0, 0 }, { 3, 4, 0, 0 } },
+ { "ROSA", kFixedText_People_MadameRosa, { 1, 0, 0 }, { 1, 30, 0, 0 } },
+ { "LADB", kFixedText_People_LadyBrumwell, { 1, 0, 0 }, { 3, 4, 0, 0 } },
+ { "MOOR", kFixedText_People_JosephMoorehead, { 1, 0, 0 }, { 1, 0, 0 } },
+ { "BEAL", kFixedText_People_MrsBeale, { 5, 0, 0 }, { 14, 15, 16, 17, 18, 19, 20, 0, 0 } },
+ { "LION", kFixedText_People_Felix, { 1, 0, 0 }, { 1, 0, 0 } },
+ { "HOLL", kFixedText_People_Hollingston, { 1, 0, 0 }, { 1, 0, 0 } },
+ { "CALL", kFixedText_People_ConstableCallaghan, { 1, 0, 0 }, { 1, 0, 0 } },
+ { "JERE", kFixedText_People_SergeantDuncan, { 2, 0, 0 }, { 1, 1, 2, 2, 0, 0 } },
+ { "LORD", kFixedText_People_LordBrumwell, { 1, 0, 0 }, { 9, 10, 0, 0 } },
+ { "NIGE", kFixedText_People_NigelJaimeson, { 1, 0, 0 }, { 1, 2, 0, 138, 3, 4, 0, 138, 0, 0 } },
+ { "JONA", kFixedText_People_Jonas, { 1, 0, 0 }, { 1, 8, 0, 0 } },
+ { "DUGA", kFixedText_People_ConstableDugan, { 1, 0, 0 }, { 1, 0, 0 } },
+ { "INSP", kFixedText_People_InspectorLestrade, { 4, 0, 0 }, { 2, 0, 0 } }
};
+uint INFO_BLACK;
+uint BORDER_COLOR;
+uint COMMAND_BACKGROUND;
+uint BUTTON_BACKGROUND;
+uint TALK_FOREGROUND;
+uint TALK_NULL;
+uint BUTTON_TOP;
+uint BUTTON_MIDDLE;
+uint BUTTON_BOTTOM;
+uint COMMAND_FOREGROUND;
+uint COMMAND_HIGHLIGHTED;
+uint COMMAND_NULL;
+uint INFO_FOREGROUND;
+uint INFO_BACKGROUND;
+uint INV_FOREGROUND;
+uint INV_BACKGROUND;
+uint PEN_COLOR;
+
/*----------------------------------------------------------------*/
+#define FROM_RGB(r, g, b) pixelFormatRGB565.RGBToColor(r, g, b)
+
ScalpelEngine::ScalpelEngine(OSystem *syst, const SherlockGameDescription *gameDesc) :
SherlockEngine(syst, gameDesc) {
_darts = nullptr;
_mapResult = 0;
+
+ if (getPlatform() == Common::kPlatform3DO) {
+ const Graphics::PixelFormat pixelFormatRGB565 = Graphics::PixelFormat(2, 5, 6, 5, 0, 11, 5, 0, 0);
+ INFO_BLACK = FROM_RGB(0, 0, 0);
+ BORDER_COLOR = FROM_RGB(0x6d, 0x38, 0x10);
+ COMMAND_BACKGROUND = FROM_RGB(0x38, 0x38, 0xce);
+ BUTTON_BACKGROUND = FROM_RGB(0x95, 0x5d, 0x24);
+ TALK_FOREGROUND = FROM_RGB(0xff, 0x55, 0x55);
+ TALK_NULL = FROM_RGB(0xce, 0xc6, 0xc2);
+ BUTTON_TOP = FROM_RGB(0xbe, 0x85, 0x3c);
+ BUTTON_MIDDLE = FROM_RGB(0x9d, 0x40, 0);
+ BUTTON_BOTTOM = FROM_RGB(0x69, 0x24, 0);
+ COMMAND_FOREGROUND = FROM_RGB(0xFF, 0xFF, 0xFF);
+ COMMAND_HIGHLIGHTED = FROM_RGB(0x55, 0xff, 0x55);
+ COMMAND_NULL = FROM_RGB(0x69, 0x24, 0);
+ INFO_FOREGROUND = FROM_RGB(0x55, 0xff, 0xff);
+ INFO_BACKGROUND = FROM_RGB(0, 0, 0x48);
+ INV_FOREGROUND = FROM_RGB(0xff, 0xff, 0x55);
+ INV_BACKGROUND = FROM_RGB(0, 0, 0x48);
+ PEN_COLOR = FROM_RGB(0x50, 0x18, 0);
+ } else {
+ INFO_BLACK = 1;
+ BORDER_COLOR = 237;
+ COMMAND_BACKGROUND = 4;
+ BUTTON_BACKGROUND = 235;
+ TALK_FOREGROUND = 12;
+ TALK_NULL = 16;
+ BUTTON_TOP = 233;
+ BUTTON_MIDDLE = 244;
+ BUTTON_BOTTOM = 248;
+ COMMAND_FOREGROUND = 15;
+ COMMAND_HIGHLIGHTED = 10;
+ COMMAND_NULL = 248;
+ INFO_FOREGROUND = 11;
+ INFO_BACKGROUND = 1;
+ INV_FOREGROUND = 14;
+ INV_BACKGROUND = 1;
+ PEN_COLOR = 250;
+ }
}
ScalpelEngine::~ScalpelEngine() {
delete _darts;
}
-void ScalpelEngine::initialize() {
- // 3DO actually uses RGB555, but some platforms of ours only support RGB565, so we use that
-
- if (getPlatform() == Common::kPlatform3DO) {
- const Graphics::PixelFormat pixelFormatRGB565 = Graphics::PixelFormat(2, 5, 6, 5, 0, 11, 5, 0, 0);
- // 320x200 16-bit RGB565 for 3DO support
- initGraphics(320, 200, false, &pixelFormatRGB565);
- } else {
+void ScalpelEngine::setupGraphics() {
+ if (getPlatform() != Common::kPlatform3DO) {
// 320x200 palettized
initGraphics(320, 200, false);
+ } else {
+ // 3DO actually uses RGB555, but some platforms of ours only support RGB565, so we use that
+ const Graphics::PixelFormat pixelFormatRGB565 = Graphics::PixelFormat(2, 5, 6, 5, 0, 11, 5, 0, 0);
+
+ // First try for a 640x400 mode
+ g_system->beginGFXTransaction();
+ initCommonGFX(true);
+ g_system->initSize(640, 400, &pixelFormatRGB565);
+ OSystem::TransactionError gfxError = g_system->endGFXTransaction();
+
+ if (gfxError == OSystem::kTransactionSuccess) {
+ _isScreenDoubled = true;
+ } else {
+ // System doesn't support it, so fall back on 320x200 mode
+ initGraphics(320, 200, false, &pixelFormatRGB565);
+ }
}
+}
+
+void ScalpelEngine::initialize() {
+ // Setup graphics mode
+ setupGraphics();
// Let the base engine intialize
SherlockEngine::initialize();
@@ -219,9 +295,14 @@ void ScalpelEngine::initialize() {
loadInventory();
// Set up list of people
- for (int idx = 0; idx < MAX_PEOPLE; ++idx)
- _people->_characters.push_back(PersonData(PEOPLE_DATA[idx].name, PEOPLE_DATA[idx].portrait,
+ ScalpelFixedText &fixedText = *(ScalpelFixedText *)_fixedText;
+ const char *peopleNamePtr = nullptr;
+
+ for (int idx = 0; idx < MAX_PEOPLE; ++idx) {
+ peopleNamePtr = fixedText.getText(PEOPLE_DATA[idx].fixedTextId);
+ _people->_characters.push_back(PersonData(peopleNamePtr, PEOPLE_DATA[idx].portrait,
PEOPLE_DATA[idx].stillSequences, PEOPLE_DATA[idx].talkSequences));
+ }
_animation->setPrologueNames(&PROLOGUE_NAMES[0], PROLOGUE_NAMES_COUNT);
_animation->setPrologueFrames(&PROLOGUE_FRAMES[0][0], 6, 9);
@@ -599,7 +680,7 @@ bool ScalpelEngine::show3DOSplash() {
if (finished) {
// EA logo movie
- Scalpel3DOMoviePlay("EAlogo.stream", Common::Point(20, 0));
+ play3doMovie("EAlogo.stream", Common::Point(20, 0));
}
// Always clear screen
@@ -608,23 +689,25 @@ bool ScalpelEngine::show3DOSplash() {
}
bool ScalpelEngine::showCityCutscene3DO() {
+ Scalpel3DOScreen &screen = *(Scalpel3DOScreen *)_screen;
_animation->_soundLibraryFilename = "TITLE.SND";
- _screen->clear();
+ screen.clear();
bool finished = _events->delay(2500, true);
- // rain.aiff seems to be playing in an endless loop until
- // sherlock logo fades away TODO
-
if (finished) {
finished = _events->delay(2500, true);
// Play intro music
_music->loadSong("prolog");
+ // Loop rain.aiff until the Sherlock logo fades away.
+ // TODO: The volume is just a guess.
+ _sound->playAiff("prologue/sounds/rain.aiff", 15, true);
+
// Fade screen to grey
- _screen->_backBuffer1.fill(0xCE59); // RGB565: 25, 50, 25 (grey)
- _screen->fadeIntoScreen3DO(2);
+ screen._backBuffer1.fill(0xCE59); // RGB565: 25, 50, 25 (grey)
+ screen.fadeIntoScreen3DO(2);
}
if (finished) {
@@ -632,33 +715,33 @@ bool ScalpelEngine::showCityCutscene3DO() {
}
if (finished) {
- _screen->_backBuffer1.fill(0); // fill backbuffer with black to avoid issues during fade from white
+ screen._backBuffer1.fill(0); // fill backbuffer with black to avoid issues during fade from white
finished = _animation->play3DO("26open1", true, 1, true, 2);
}
if (finished) {
- _screen->_backBuffer1.blitFrom(*_screen); // save into backbuffer 1, used for fade
- _screen->_backBuffer2.blitFrom(*_screen); // save into backbuffer 2, for restoring later
+ screen._backBuffer2.blitFrom(screen._backBuffer1);
// "London, England"
ImageFile3DO titleImage_London("title2a.cel", kImageFile3DOType_Cel);
- _screen->_backBuffer1.transBlitFrom(titleImage_London[0]._frame, Common::Point(30, 50));
+ screen._backBuffer1.transBlitFrom(titleImage_London[0]._frame, Common::Point(30, 50));
- _screen->fadeIntoScreen3DO(1);
+ screen.fadeIntoScreen3DO(1);
finished = _events->delay(1500, true);
if (finished) {
// "November, 1888"
ImageFile3DO titleImage_November("title2b.cel", kImageFile3DOType_Cel);
- _screen->_backBuffer1.transBlitFrom(titleImage_November[0]._frame, Common::Point(100, 100));
+ screen._backBuffer1.transBlitFrom(titleImage_November[0]._frame, Common::Point(100, 100));
- _screen->fadeIntoScreen3DO(1);
+ screen.fadeIntoScreen3DO(1);
finished = _music->waitUntilMSec(14700, 0, 0, 5000);
}
if (finished) {
// Restore screen
- _screen->blitFrom(_screen->_backBuffer2);
+ _screen->_backBuffer1.blitFrom(screen._backBuffer2);
+ _screen->blitFrom(screen._backBuffer1);
}
}
@@ -666,21 +749,19 @@ bool ScalpelEngine::showCityCutscene3DO() {
finished = _animation->play3DO("26open2", true, 1, false, 2);
if (finished) {
- _screen->_backBuffer1.blitFrom(*_screen); // save into backbuffer 1, used for fade
-
// "Sherlock Holmes" (title)
ImageFile3DO titleImage_SherlockHolmesTitle("title1ab.cel", kImageFile3DOType_Cel);
- _screen->_backBuffer1.transBlitFrom(titleImage_SherlockHolmesTitle[0]._frame, Common::Point(34, 5));
+ screen._backBuffer1.transBlitFrom(titleImage_SherlockHolmesTitle[0]._frame, Common::Point(34, 5));
// Blend in
- _screen->fadeIntoScreen3DO(2);
+ screen.fadeIntoScreen3DO(2);
finished = _events->delay(500, true);
// Title should fade in, Copyright should be displayed a bit after that
if (finished) {
ImageFile3DO titleImage_Copyright("title1c.cel", kImageFile3DOType_Cel);
- _screen->transBlitFrom(titleImage_Copyright[0]._frame, Common::Point(20, 190));
+ screen.transBlitFrom(titleImage_Copyright[0]._frame, Common::Point(20, 190));
finished = _events->delay(3500, true);
}
}
@@ -688,29 +769,32 @@ bool ScalpelEngine::showCityCutscene3DO() {
if (finished)
finished = _music->waitUntilMSec(33600, 0, 0, 2000);
+ _sound->stopAiff();
+
if (finished) {
// Fade to black
- _screen->_backBuffer1.clear();
- _screen->fadeIntoScreen3DO(3);
+ screen._backBuffer1.clear();
+ screen.fadeIntoScreen3DO(3);
}
if (finished) {
// "In the alley behind the Regency Theatre..."
ImageFile3DO titleImage_InTheAlley("title1d.cel", kImageFile3DOType_Cel);
- _screen->_backBuffer1.transBlitFrom(titleImage_InTheAlley[0]._frame, Common::Point(72, 51));
+ screen._backBuffer1.transBlitFrom(titleImage_InTheAlley[0]._frame, Common::Point(72, 51));
// Fade in
- _screen->fadeIntoScreen3DO(4);
+ screen.fadeIntoScreen3DO(4);
finished = _music->waitUntilMSec(39900, 0, 0, 2500);
// Fade out
- _screen->_backBuffer1.clear();
- _screen->fadeIntoScreen3DO(4);
+ screen._backBuffer1.clear();
+ screen.fadeIntoScreen3DO(4);
}
return finished;
}
bool ScalpelEngine::showAlleyCutscene3DO() {
+ Scalpel3DOScreen &screen = *(Scalpel3DOScreen *)_screen;
bool finished = _music->waitUntilMSec(43500, 0, 0, 1000);
if (finished)
@@ -718,8 +802,8 @@ bool ScalpelEngine::showAlleyCutscene3DO() {
if (finished) {
// Fade out...
- _screen->_backBuffer1.clear();
- _screen->fadeIntoScreen3DO(3);
+ screen._backBuffer1.clear();
+ screen.fadeIntoScreen3DO(3);
finished = _music->waitUntilMSec(67100, 0, 0, 1000); // 66700
}
@@ -734,8 +818,8 @@ bool ScalpelEngine::showAlleyCutscene3DO() {
// Show screaming victim
ImageFile3DO titleImage_ScreamingVictim("scream.cel", kImageFile3DOType_Cel);
- _screen->clear();
- _screen->transBlitFrom(titleImage_ScreamingVictim[0]._frame, Common::Point(0, 0));
+ screen.clear();
+ screen.transBlitFrom(titleImage_ScreamingVictim[0]._frame, Common::Point(0, 0));
// Play "scream.aiff"
if (_sound->_voices)
@@ -746,8 +830,8 @@ bool ScalpelEngine::showAlleyCutscene3DO() {
if (finished) {
// Fade out
- _screen->_backBuffer1.clear();
- _screen->fadeIntoScreen3DO(5);
+ screen._backBuffer1.clear();
+ screen.fadeIntoScreen3DO(5);
finished = _music->waitUntilMSec(84400, 0, 0, 2000);
}
@@ -757,17 +841,17 @@ bool ScalpelEngine::showAlleyCutscene3DO() {
if (finished) {
// Fade out
- _screen->_backBuffer1.clear();
- _screen->fadeIntoScreen3DO(5);
+ screen._backBuffer1.clear();
+ screen.fadeIntoScreen3DO(5);
}
if (finished) {
// "Early the following morning on Baker Street..."
ImageFile3DO titleImage_EarlyTheFollowingMorning("title3.cel", kImageFile3DOType_Cel);
- _screen->_backBuffer1.transBlitFrom(titleImage_EarlyTheFollowingMorning[0]._frame, Common::Point(35, 51));
+ screen._backBuffer1.transBlitFrom(titleImage_EarlyTheFollowingMorning[0]._frame, Common::Point(35, 51));
// Fade in
- _screen->fadeIntoScreen3DO(4);
+ screen.fadeIntoScreen3DO(4);
finished = _music->waitUntilMSec(96700, 0, 0, 3000);
}
@@ -775,12 +859,13 @@ bool ScalpelEngine::showAlleyCutscene3DO() {
}
bool ScalpelEngine::showStreetCutscene3DO() {
+ Scalpel3DOScreen &screen = *(Scalpel3DOScreen *)_screen;
bool finished = true;
if (finished) {
// fade out "Early the following morning..."
- _screen->_backBuffer1.clear();
- _screen->fadeIntoScreen3DO(4);
+ screen._backBuffer1.clear();
+ screen.fadeIntoScreen3DO(4);
// wait for music a bit
finished = _music->waitUntilMSec(100300, 0, 0, 1000);
@@ -799,8 +884,8 @@ bool ScalpelEngine::showStreetCutscene3DO() {
if (finished) {
// Fade out
- _screen->_backBuffer1.clear();
- _screen->fadeIntoScreen3DO(4);
+ screen._backBuffer1.clear();
+ screen.fadeIntoScreen3DO(4);
}
return finished;
@@ -852,7 +937,7 @@ bool ScalpelEngine::showOfficeCutscene3DO() {
// TODO: Brighten the image, possibly by doing a partial fade
// to white.
- _screen->_backBuffer1.blitFrom(*_screen);
+ _screen->_backBuffer2.blitFrom(_screen->_backBuffer1);
for (int nr = 1; finished && nr <= 4; nr++) {
char filename[15];
@@ -860,7 +945,7 @@ bool ScalpelEngine::showOfficeCutscene3DO() {
ImageFile3DO *creditsImage = new ImageFile3DO(filename, kImageFile3DOType_Cel);
ImageFrame *creditsFrame = &(*creditsImage)[0];
for (int i = 0; finished && i < 200 + creditsFrame->_height; i++) {
- _screen->blitFrom(_screen->_backBuffer1);
+ _screen->blitFrom(_screen->_backBuffer2);
_screen->transBlitFrom(creditsFrame->_frame, Common::Point((320 - creditsFrame->_width) / 2, 200 - i));
if (!_events->delay(70, true))
finished = false;
@@ -1159,6 +1244,182 @@ void ScalpelEngine::flushBrumwellMirror() {
_screen->slamArea(137, 18, 47, 56);
}
+
+void ScalpelEngine::showScummVMSaveDialog() {
+ GUI::SaveLoadChooser *dialog = new GUI::SaveLoadChooser(_("Save game:"), _("Save"), true);
+
+ int slot = dialog->runModalWithCurrentTarget();
+ if (slot >= 0) {
+ Common::String desc = dialog->getResultString();
+
+ saveGameState(slot, desc);
+ }
+
+ delete dialog;
+}
+
+void ScalpelEngine::showScummVMRestoreDialog() {
+ GUI::SaveLoadChooser *dialog = new GUI::SaveLoadChooser(_("Restore game:"), _("Restore"), false);
+
+ int slot = dialog->runModalWithCurrentTarget();
+ if (slot >= 0) {
+ loadGameState(slot);
+ }
+
+ delete dialog;
+}
+
+bool ScalpelEngine::play3doMovie(const Common::String &filename, const Common::Point &pos, bool isPortrait) {
+ Scalpel3DOScreen &screen = *(Scalpel3DOScreen *)_screen;
+ Scalpel3DOMovieDecoder *videoDecoder = new Scalpel3DOMovieDecoder();
+ Graphics::Surface tempSurface;
+
+ Common::Point framePos(pos.x, pos.y);
+ ImageFile3DO *frameImageFile = nullptr;
+ ImageFrame *frameImage = nullptr;
+ bool frameShown = false;
+
+ if (!videoDecoder->loadFile(filename)) {
+ warning("Scalpel3DOMoviePlay: could not open '%s'", filename.c_str());
+ return false;
+ }
+
+ bool halfSize = isPortrait && !_isScreenDoubled;
+ if (isPortrait) {
+ // only for portrait videos, not for EA intro logo and such
+ if ((framePos.x >= 8) && (framePos.y >= 8)) { // safety check
+ framePos.x -= 8;
+ framePos.y -= 8; // frame is 8 pixels on left + top, and 7 pixels on right + bottom
+ }
+
+ frameImageFile = new ImageFile3DO("vidframe.cel", kImageFile3DOType_Cel);
+ frameImage = &(*frameImageFile)[0];
+ }
+
+ bool skipVideo = false;
+ //byte bytesPerPixel = videoDecoder->getPixelFormat().bytesPerPixel;
+ uint16 width = videoDecoder->getWidth();
+ uint16 height = videoDecoder->getHeight();
+ //uint16 pitch = videoDecoder->getWidth() * bytesPerPixel;
+
+ _events->clearEvents();
+ videoDecoder->start();
+
+ // If we're to show the movie at half-size, we'll need a temporary intermediate surface
+ if (halfSize)
+ tempSurface.create(width / 2, height / 2, _screen->getPixelFormat());
+
+ while (!shouldQuit() && !videoDecoder->endOfVideo() && !skipVideo) {
+ if (videoDecoder->needsUpdate()) {
+ const Graphics::Surface *frame = videoDecoder->decodeNextFrame();
+
+ if (frame) {
+ if (halfSize) {
+ // movies are 152 x 200
+
+ // Downscale, but calculate average color out of 4 pixels and put that average into the target pixel
+ // TODO: 3DO actually did pixel weighting, exact details about this are unknown
+ // It's also unknown what 3DO exactly did for interpolation
+ // and it's also unknown atm if the CinePak videos contained pixel weighting information
+
+ if ((height & 1) || (width & 1)) {
+ error("Scalpel3DOMoviePlay: critical error, half-size requested on video with uneven height/width");
+ }
+
+ for (int downscaleY = 0; downscaleY < height / 2; downscaleY++) {
+ const uint16 *downscaleSource1Ptr = (const uint16 *)frame->getBasePtr(0, downscaleY * 2);
+ const uint16 *downscaleSource2Ptr = (const uint16 *)frame->getBasePtr(0, (downscaleY * 2) + 1);
+ uint16 *downscaleTargetPtr = (uint16 *)tempSurface.getBasePtr(0, downscaleY);
+
+ for (int downscaleX = 0; downscaleX < width / 2; downscaleX++) {
+ // get 4 pixel colors
+ uint16 downscaleColor = *downscaleSource1Ptr;
+ uint32 downscaleRed = downscaleColor >> 11; // 5 bits
+ uint32 downscaleGreen = (downscaleColor >> 5) & 0x3f; // 6 bits
+ uint32 downscaleBlue = downscaleColor & 0x1f;
+
+ downscaleSource1Ptr++;
+ downscaleColor = *downscaleSource1Ptr;
+ downscaleRed += downscaleColor >> 11;
+ downscaleGreen += (downscaleColor >> 5) & 0x3f;
+ downscaleBlue += downscaleColor & 0x1f;
+
+ downscaleColor = *downscaleSource2Ptr;
+ downscaleRed += downscaleColor >> 11;
+ downscaleGreen += (downscaleColor >> 5) & 0x3f;
+ downscaleBlue += downscaleColor & 0x1f;
+
+ downscaleSource2Ptr++;
+ downscaleColor = *downscaleSource2Ptr;
+ downscaleRed += downscaleColor >> 11;
+ downscaleGreen += (downscaleColor >> 5) & 0x3f;
+ downscaleBlue += downscaleColor & 0x1f;
+
+ // Divide colors by 4, so that we get the average
+ downscaleRed = downscaleRed >> 2;
+ downscaleGreen = downscaleGreen >> 2;
+ downscaleBlue = downscaleBlue >> 2;
+
+ // write new color to target pixel
+ downscaleColor = (downscaleRed << 11) | (downscaleGreen << 5) | downscaleBlue;
+ *downscaleTargetPtr = downscaleColor;
+
+ downscaleSource1Ptr++;
+ downscaleSource2Ptr++;
+ downscaleTargetPtr++;
+ }
+ }
+
+ // Point the drawing frame to the temporary surface
+ frame = &tempSurface;
+ }
+
+ if (isPortrait && !frameShown) {
+ // Draw the frame (not the frame of the video, but a frame around the video) itself
+ _screen->transBlitFrom(frameImage->_frame, framePos);
+ frameShown = true;
+ }
+
+ if (isPortrait && !halfSize) {
+ screen.rawBlitFrom(*frame, Common::Point(pos.x * 2, pos.y * 2));
+ } else {
+ _screen->blitFrom(*frame, pos);
+ }
+
+ _screen->update();
+ }
+ }
+
+ _events->pollEventsAndWait();
+ _events->setButtonState();
+
+ if (_events->kbHit()) {
+ Common::KeyState keyState = _events->getKey();
+ if (keyState.keycode == Common::KEYCODE_ESCAPE)
+ skipVideo = true;
+ } else if (_events->_pressed) {
+ skipVideo = true;
+ }
+ }
+
+ if (halfSize)
+ tempSurface.free();
+
+ videoDecoder->close();
+ delete videoDecoder;
+
+ if (isPortrait) {
+ delete frameImageFile;
+ }
+
+ // Restore scene
+ screen._backBuffer1.blitFrom(screen._backBuffer2);
+ _scene->updateBackground();
+ screen.slamArea(0, 0, screen.w(), CONTROLS_Y);
+
+ return !skipVideo;
+}
+
} // End of namespace Scalpel
} // End of namespace Sherlock
diff --git a/engines/sherlock/scalpel/scalpel.h b/engines/sherlock/scalpel/scalpel.h
index cb1cb20492..af4d72a7d7 100644
--- a/engines/sherlock/scalpel/scalpel.h
+++ b/engines/sherlock/scalpel/scalpel.h
@@ -30,25 +30,37 @@ namespace Sherlock {
namespace Scalpel {
-enum {
- BUTTON_TOP = 233,
- BUTTON_MIDDLE = 244,
- BUTTON_BOTTOM = 248,
- COMMAND_FOREGROUND = 15,
- COMMAND_HIGHLIGHTED = 10,
- COMMAND_NULL = 248,
- INFO_FOREGROUND = 11,
- INFO_BACKGROUND = 1,
- INV_FOREGROUND = 14,
- INV_BACKGROUND = 1,
- PEN_COLOR = 250
-};
+extern uint BUTTON_TOP;
+extern uint BUTTON_MIDDLE;
+extern uint BUTTON_BOTTOM;
+extern uint COMMAND_FOREGROUND;
+extern uint COMMAND_HIGHLIGHTED;
+extern uint COMMAND_NULL;
+extern uint INFO_FOREGROUND;
+extern uint INFO_BACKGROUND;
+extern uint INV_FOREGROUND;
+extern uint INV_BACKGROUND;
+extern uint PEN_COLOR;
+extern uint INFO_BLACK;
+extern uint BORDER_COLOR;
+extern uint COMMAND_BACKGROUND;
+extern uint BUTTON_BACKGROUND;
+extern uint TALK_FOREGROUND;
+extern uint TALK_NULL;
class ScalpelEngine : public SherlockEngine {
private:
Darts *_darts;
int _mapResult;
+ /**
+ * Initialize graphics mode
+ */
+ void setupGraphics();
+
+ /**
+ * Show the 3DO splash screen
+ */
bool show3DOSplash();
/**
@@ -124,6 +136,21 @@ public:
* This clears the mirror in scene 12 (mansion drawing room) in case anything messed draw over it
*/
void flushBrumwellMirror();
+
+ /**
+ * Show the ScummVM restore savegame dialog
+ */
+ void showScummVMSaveDialog();
+
+ /**
+ * Show the ScummVM restore savegame dialog
+ */
+ void showScummVMRestoreDialog();
+
+ /**
+ * Play back a 3do movie
+ */
+ bool play3doMovie(const Common::String &filename, const Common::Point &pos, bool isPortrait = false);
};
} // End of namespace Scalpel
diff --git a/engines/sherlock/scalpel/scalpel_fixed_text.cpp b/engines/sherlock/scalpel/scalpel_fixed_text.cpp
index 63f84d68c6..372fbc3e7e 100644
--- a/engines/sherlock/scalpel/scalpel_fixed_text.cpp
+++ b/engines/sherlock/scalpel/scalpel_fixed_text.cpp
@@ -55,6 +55,11 @@ static const char *const fixedTextEN[] = {
"Backward",
"Forward",
"Text Not Found !",
+ // SH1: Press key text
+ "Press any Key for More.",
+ "P",
+ "Press any Key to Continue.",
+ "P",
// SH1: Initial Inventory
"A message requesting help",
"A number of business cards",
@@ -68,11 +73,67 @@ static const char *const fixedTextEN[] = {
"Tarot Cards",
"An ornate key",
"A pawn ticket",
- // SH2: Verbs
- "Open",
- "Look",
- "Talk",
- "Journal"
+ // SH1: People names
+ "Sherlock Holmes",
+ "Dr. Watson",
+ "Inspector Lestrade",
+ "Constable O'Brien",
+ "Constable Lewis",
+ "Sheila Parker",
+ "Henry Carruthers",
+ "Lesley",
+ "An Usher",
+ "Fredrick Epstein",
+ "Mrs. Worthington",
+ "The Coach",
+ "A Player",
+ "Tim",
+ "James Sanders",
+ "Belle",
+ "Cleaning Girl",
+ "Wiggins",
+ "Paul",
+ "The Bartender",
+ "A Dirty Drunk",
+ "A Shouting Drunk",
+ "A Staggering Drunk",
+ "The Bouncer",
+ "The Coroner",
+ "Reginald Snipes",
+ "George Blackwood",
+ "Lars",
+ "The Chemist",
+ "Inspector Gregson",
+ "Jacob Farthington",
+ "Mycroft",
+ "Old Sherman",
+ "Richard",
+ "The Barman",
+ "A Dandy Player",
+ "A Rough-looking Player",
+ "A Spectator",
+ "Robert Hunt",
+ "Violet",
+ "Pettigrew",
+ "Augie",
+ "Anna Carroway",
+ "A Guard",
+ "Antonio Caruso",
+ "Toby the Dog",
+ "Simon Kingsley",
+ "Alfred",
+ "Lady Brumwell",
+ "Madame Rosa",
+ "Joseph Moorehead",
+ "Mrs. Beale",
+ "Felix",
+ "Hollingston",
+ "Constable Callaghan",
+ "Sergeant Duncan",
+ "Lord Brumwell",
+ "Nigel Jaimeson",
+ "Jonas",
+ "Constable Dugan"
};
// sharp-s : 0xE1 / octal 341
@@ -107,6 +168,11 @@ static const char *const fixedTextDE[] = {
"R\201ckw\204rts", // original: "Backward"
"Vorw\204rts", // original: "Forward"
"Text nicht gefunden!",
+ // SH1: Press key text
+ "Mehr auf Tastendruck...",
+ "M",
+ "Beliebige Taste dr\201cken.",
+ "B",
// SH1: Initial Inventory
"Ein Hilferuf von Lestrade",
"Holmes' Visitenkarten",
@@ -117,14 +183,70 @@ static const char *const fixedTextDE[] = {
"Eine offene Taschenuhr",
"Ein Zettel mit Zahlen drauf",
"Ein mehrfach gefalteter Briefbogen",
- "Ein Tarock-Kartenspiel", // [sic]
+ "Ein Tarot-Kartenspiel", // original interpreter: "Ein Tarock-Kartenspiel" [sic]
"Ein verzierter Schl\201ssel",
"Ein Pfandschein",
- // SH2: Verbs
- "\231ffne",
- "Schau",
- "Rede",
- "Tagebuch"
+ // SH1: People names
+ "Sherlock Holmes",
+ "Dr. Watson",
+ "Inspektor Lestrade",
+ "Konstabler O'Brien",
+ "Konstabler Lewis",
+ "Sheila Parker",
+ "Henry Carruthers",
+ "Lesley",
+ "Platzanweiser",
+ "Fredrick Epstein",
+ "Mrs. Worthington",
+ "Der Trainer",
+ "Ein Spieler",
+ "Tim",
+ "James Sanders",
+ "Belle",
+ "Putzm\204dchen",
+ "Wiggins",
+ "Paul",
+ "Gastwirt",
+ "Schmutziger Betrunkener",
+ "Lallender Betrunkener",
+ "Torkelnder Betrunkener",
+ "The Bouncer",
+ "Der Leichenbeschauer",
+ "Reginald Snipes",
+ "George Blackwood",
+ "Lars",
+ "Apotheker",
+ "Inspektor Gregson",
+ "Jacob Farthington",
+ "Mycroft",
+ "Old Sherman",
+ "Richard",
+ "Barkeeper",
+ "Jock Mahoney",
+ "Nobby Charleton",
+ "Zuschauer",
+ "Robert Hunt",
+ "Violet",
+ "Pettigrew",
+ "Augie",
+ "Anna Carroway",
+ "Wache",
+ "Antonio Caruso",
+ "Toby the Dog",
+ "Simon Kingsley",
+ "Alfred",
+ "Lady Brumwell",
+ "Madame Rosa",
+ "Joseph Moorehead",
+ "Mrs. Beale",
+ "Felix",
+ "Hollingston",
+ "Konstabler Callaghan",
+ "Sergeant Duncan",
+ "Lord Brumwell",
+ "Nigel Jaimeson",
+ "Jonas",
+ "Konstabler Dugan"
};
// up-side down exclamation mark - 0xAD / octal 255
@@ -132,11 +254,11 @@ static const char *const fixedTextDE[] = {
// n with a wave on top - 0xA4 / octal 244
static const char *const fixedTextES[] = {
// SH1: Window buttons
- "Exit",
+ "Salir", // original interpreter: "Exit"
"Subir",
"Bajar",
// SH1: Inventory buttons
- "Exit",
+ "Salir", // original interpreter: "Exit"
"Mirar",
"Usar",
"Dar",
@@ -144,7 +266,7 @@ static const char *const fixedTextES[] = {
"Diario de Watson",
"Pagina %d",
// SH1: Journal buttons
- "Exit",
+ "Salir", // original interpreter: "Exit"
"Retroceder",
"Subir",
"baJar",
@@ -154,10 +276,15 @@ static const char *const fixedTextES[] = {
"Ult pagina",
"Imprimir",
// SH1: Journal search
- "Exit",
+ "Salir", // original interpreter: "Exit"
"Retroceder",
"Avanzar",
"Texto no encontrado!",
+ // SH1: Press key text
+ "Tecla para ver mas",
+ "T",
+ "Tecla para continuar",
+ "T",
// SH1: Initial Inventory
"Un mensaje solicitando ayuda",
"Unas cuantas tarjetas de visita",
@@ -171,6 +298,67 @@ static const char *const fixedTextES[] = {
"Unas cartas de Tarot",
"Una llave muy vistosa",
"Una papeleta de empe\244o",
+ // SH1: People names
+ "Sherlock Holmes",
+ "Dr. Watson",
+ "El inspector Lestrade",
+ "El agente O'Brien",
+ "El agente Lewis",
+ "Sheila Parker",
+ "Henry Carruthers",
+ "Lesley",
+ "Un ujier",
+ "Fredrick Epstein",
+ "Mrs. Worthington",
+ "El entrenador",
+ "El jugador",
+ "Tim",
+ "James Sanders",
+ "Belle",
+ "La chica de la limpieza",
+ "Wiggins",
+ "Paul",
+ "El barman",
+ "Un sucio borracho",
+ "Un borracho griton",
+ "Un tambaleante borracho",
+ "El gorila",
+ "El forense",
+ "Reginald Snipes",
+ "George Blackwood",
+ "Lars",
+ "El quimico",
+ "El inspector Gregson",
+ "Jacob Farthington",
+ "Mycroft",
+ "Old Sherman",
+ "Richard",
+ "El barman",
+ "Un jugador dandy",
+ "Un duro jugador",
+ "Un espectador",
+ "Robert Hunt",
+ "Violeta",
+ "Pettigrew",
+ "Augie",
+ "Anna Carroway",
+ "Un guarda",
+ "Antonio Caruso",
+ "El perro Toby",
+ "Simon Kingsley",
+ "Alfred",
+ "Lady Brumwell",
+ "Madame Rosa",
+ "Joseph Moorehead",
+ "Mrs. Beale",
+ "Felix",
+ "Hollingston",
+ "El agente Callaghan",
+ "El sargento Duncan",
+ "Lord Brumwell",
+ "Nigel Jaimeson",
+ "Jonas",
+ "El agente Dugan"
};
// =========================================
diff --git a/engines/sherlock/scalpel/scalpel_fixed_text.h b/engines/sherlock/scalpel/scalpel_fixed_text.h
index eae86b8f27..f46587ce81 100644
--- a/engines/sherlock/scalpel/scalpel_fixed_text.h
+++ b/engines/sherlock/scalpel/scalpel_fixed_text.h
@@ -57,6 +57,11 @@ enum FixedTextId {
kFixedText_JournalSearch_Backward,
kFixedText_JournalSearch_Forward,
kFixedText_JournalSearch_NotFound,
+ // Press key text
+ kFixedText_PressKey_ForMore,
+ kFixedText_PressKey_ForMoreHotkey,
+ kFixedText_PressKey_ToContinue,
+ kFixedText_PressKey_ToContinueHotkey,
// Initial inventory
kFixedText_InitInventory_Message,
kFixedText_InitInventory_HolmesCard,
@@ -69,7 +74,68 @@ enum FixedTextId {
kFixedText_InitInventory_Letter,
kFixedText_InitInventory_Tarot,
kFixedText_InitInventory_OrnateKey,
- kFixedText_InitInventory_PawnTicket
+ kFixedText_InitInventory_PawnTicket,
+ // People names
+ kFixedText_People_SherlockHolmes,
+ kFixedText_People_DrWatson,
+ kFixedText_People_InspectorLestrade,
+ kFixedText_People_ConstableOBrien,
+ kFixedText_People_ConstableLewis,
+ kFixedText_People_SheilaParker,
+ kFixedText_People_HenryCarruthers,
+ kFixedText_People_Lesley,
+ kFixedText_People_AnUsher,
+ kFixedText_People_FredrickEpstein,
+ kFixedText_People_MrsWorthington,
+ kFixedText_People_TheCoach,
+ kFixedText_People_APlayer,
+ kFixedText_People_Tim,
+ kFixedText_People_JamesSanders,
+ kFixedText_People_Belle,
+ kFixedText_People_CleaningGirl,
+ kFixedText_People_Wiggins,
+ kFixedText_People_Paul,
+ kFixedText_People_TheBartender,
+ kFixedText_People_ADirtyDrunk,
+ kFixedText_People_AShoutingDrunk,
+ kFixedText_People_AStaggeringDrunk,
+ kFixedText_People_TheBouncer,
+ kFixedText_People_TheCoroner,
+ kFixedText_People_ReginaldSnipes,
+ kFixedText_People_GeorgeBlackwood,
+ kFixedText_People_Lars,
+ kFixedText_People_TheChemist,
+ kFixedText_People_InspectorGregson,
+ kFixedText_People_JacobFarthington,
+ kFixedText_People_Mycroft,
+ kFixedText_People_OldSherman,
+ kFixedText_People_Richard,
+ kFixedText_People_TheBarman,
+ kFixedText_People_ADandyPlayer,
+ kFixedText_People_ARoughlookingPlayer,
+ kFixedText_People_ASpectator,
+ kFixedText_People_RobertHunt,
+ kFixedText_People_Violet,
+ kFixedText_People_Pettigrew,
+ kFixedText_People_Augie,
+ kFixedText_People_AnnaCarroway,
+ kFixedText_People_AGuard,
+ kFixedText_People_AntonioCaruso,
+ kFixedText_People_TobyTheDog,
+ kFixedText_People_SimonKingsley,
+ kFixedText_People_Alfred,
+ kFixedText_People_LadyBrumwell,
+ kFixedText_People_MadameRosa,
+ kFixedText_People_JosephMoorehead,
+ kFixedText_People_MrsBeale,
+ kFixedText_People_Felix,
+ kFixedText_People_Hollingston,
+ kFixedText_People_ConstableCallaghan,
+ kFixedText_People_SergeantDuncan,
+ kFixedText_People_LordBrumwell,
+ kFixedText_People_NigelJaimeson,
+ kFixedText_People_Jonas,
+ kFixedText_People_ConstableDugan
};
struct FixedTextActionEntry {
diff --git a/engines/sherlock/scalpel/scalpel_journal.cpp b/engines/sherlock/scalpel/scalpel_journal.cpp
index 787d899aee..5c2b8f77f3 100644
--- a/engines/sherlock/scalpel/scalpel_journal.cpp
+++ b/engines/sherlock/scalpel/scalpel_journal.cpp
@@ -104,6 +104,25 @@ void ScalpelJournal::loadLocations() {
while ((c = loc->readByte()) != 0)
line += c;
+ // WORKAROUND: Special fixes for faulty translations
+ // Was obviously not done in the original interpreter
+ if (_vm->getLanguage() == Common::ES_ESP) {
+ // Spanish version
+ // We fix all sorts of typos
+ // see bug #6931
+ if (line == "En el cajellon destras del teatro Regency") {
+ line = "En el callejon detras del teatro Regency";
+ } else if (line == "En el apartamente de Simon Kingsley") {
+ line = "En el apartamento de Simon Kingsley";
+ } else if (line == "Bajo la muelle de Savoy Pier") {
+ line = "Bajo el muelle de Savoy Pier";
+ } else if (line == "En le viejo Sherman") {
+ line = "En el viejo Sherman";
+ } else if (line == "En la entrada de la cada de Anna Carroway") {
+ line = "En la entrada de la casa de Anna Carroway";
+ }
+ }
+
_locations.push_back(line);
}
diff --git a/engines/sherlock/scalpel/scalpel_map.cpp b/engines/sherlock/scalpel/scalpel_map.cpp
index 369822ba02..0924581e38 100644
--- a/engines/sherlock/scalpel/scalpel_map.cpp
+++ b/engines/sherlock/scalpel/scalpel_map.cpp
@@ -100,6 +100,21 @@ void ScalpelMap::loadData() {
while ((c = txtStream->readByte()) != '\0')
line += c;
+ // WORKAROUND: Special fixes for faulty translations
+ // Was obviously not done in the original interpreter
+ if (_vm->getLanguage() == Common::ES_ESP) {
+ // Spanish version
+ if (line == " Alley") {
+ // The "Alley" location was not translated, we do this now
+ // see bug #6931
+ line = " Callejon";
+ } else if (line == " Alamacen") {
+ // "Warehouse" location has a typo, we fix it
+ // see bug #6931
+ line = " Almacen";
+ }
+ }
+
_locationNames.push_back(line);
}
diff --git a/engines/sherlock/scalpel/scalpel_saveload.cpp b/engines/sherlock/scalpel/scalpel_saveload.cpp
index 01ba149813..61830a56b2 100644
--- a/engines/sherlock/scalpel/scalpel_saveload.cpp
+++ b/engines/sherlock/scalpel/scalpel_saveload.cpp
@@ -39,7 +39,8 @@ const int ENV_POINTS[6][3] = {
/*----------------------------------------------------------------*/
-ScalpelSaveManager::ScalpelSaveManager(SherlockEngine *vm, const Common::String &target) : SaveManager(vm, target) {
+ScalpelSaveManager::ScalpelSaveManager(SherlockEngine *vm, const Common::String &target) :
+ SaveManager(vm, target), _envMode(SAVEMODE_NONE) {
}
void ScalpelSaveManager::drawInterface() {
diff --git a/engines/sherlock/scalpel/scalpel_scene.cpp b/engines/sherlock/scalpel/scalpel_scene.cpp
index b2c7339363..b62703e0fb 100644
--- a/engines/sherlock/scalpel/scalpel_scene.cpp
+++ b/engines/sherlock/scalpel/scalpel_scene.cpp
@@ -40,6 +40,11 @@ const int FS_TRANS[8] = {
/*----------------------------------------------------------------*/
+ScalpelScene::~ScalpelScene() {
+ for (uint idx = 0; idx < _canimShapes.size(); ++idx)
+ delete _canimShapes[idx];
+}
+
bool ScalpelScene::loadScene(const Common::String &filename) {
ScalpelMap &map = *(ScalpelMap *)_vm->_map;
bool result = Scene::loadScene(filename);
@@ -71,9 +76,9 @@ void ScalpelScene::drawAllShapes() {
// Draw all canimations which are behind the person
for (uint idx = 0; idx < _canimShapes.size(); ++idx) {
- if (_canimShapes[idx]._type == ACTIVE_BG_SHAPE && _canimShapes[idx]._misc == BEHIND)
- screen._backBuffer->transBlitFrom(*_canimShapes[idx]._imageFrame,
- _canimShapes[idx]._position, _canimShapes[idx]._flags & OBJ_FLIPPED);
+ if (_canimShapes[idx]->_type == ACTIVE_BG_SHAPE && _canimShapes[idx]->_misc == BEHIND)
+ screen._backBuffer->transBlitFrom(*_canimShapes[idx]->_imageFrame,
+ _canimShapes[idx]->_position, _canimShapes[idx]->_flags & OBJ_FLIPPED);
}
// Draw all active shapes which are normal and behind the person
@@ -84,9 +89,9 @@ void ScalpelScene::drawAllShapes() {
// Draw all canimations which are normal and behind the person
for (uint idx = 0; idx < _canimShapes.size(); ++idx) {
- if (_canimShapes[idx]._type == ACTIVE_BG_SHAPE && _canimShapes[idx]._misc == NORMAL_BEHIND)
- screen._backBuffer->transBlitFrom(*_canimShapes[idx]._imageFrame, _canimShapes[idx]._position,
- _canimShapes[idx]._flags & OBJ_FLIPPED);
+ if (_canimShapes[idx]->_type == ACTIVE_BG_SHAPE && _canimShapes[idx]->_misc == NORMAL_BEHIND)
+ screen._backBuffer->transBlitFrom(*_canimShapes[idx]->_imageFrame, _canimShapes[idx]->_position,
+ _canimShapes[idx]->_flags & OBJ_FLIPPED);
}
// Draw any active characters
@@ -113,10 +118,10 @@ void ScalpelScene::drawAllShapes() {
// Draw all static and active canimations that are NORMAL and are in front of the player
for (uint idx = 0; idx < _canimShapes.size(); ++idx) {
- if ((_canimShapes[idx]._type == ACTIVE_BG_SHAPE || _canimShapes[idx]._type == STATIC_BG_SHAPE) &&
- _canimShapes[idx]._misc == NORMAL_FORWARD)
- screen._backBuffer->transBlitFrom(*_canimShapes[idx]._imageFrame, _canimShapes[idx]._position,
- _canimShapes[idx]._flags & OBJ_FLIPPED);
+ if ((_canimShapes[idx]->_type == ACTIVE_BG_SHAPE || _canimShapes[idx]->_type == STATIC_BG_SHAPE) &&
+ _canimShapes[idx]->_misc == NORMAL_FORWARD)
+ screen._backBuffer->transBlitFrom(*_canimShapes[idx]->_imageFrame, _canimShapes[idx]->_position,
+ _canimShapes[idx]->_flags & OBJ_FLIPPED);
}
// Draw all static and active shapes that are FORWARD
@@ -133,10 +138,10 @@ void ScalpelScene::drawAllShapes() {
// Draw all static and active canimations that are forward
for (uint idx = 0; idx < _canimShapes.size(); ++idx) {
- if ((_canimShapes[idx]._type == ACTIVE_BG_SHAPE || _canimShapes[idx]._type == STATIC_BG_SHAPE) &&
- _canimShapes[idx]._misc == FORWARD)
- screen._backBuffer->transBlitFrom(*_canimShapes[idx]._imageFrame, _canimShapes[idx]._position,
- _canimShapes[idx]._flags & OBJ_FLIPPED);
+ if ((_canimShapes[idx]->_type == ACTIVE_BG_SHAPE || _canimShapes[idx]->_type == STATIC_BG_SHAPE) &&
+ _canimShapes[idx]->_misc == FORWARD)
+ screen._backBuffer->transBlitFrom(*_canimShapes[idx]->_imageFrame, _canimShapes[idx]->_position,
+ _canimShapes[idx]->_flags & OBJ_FLIPPED);
}
screen.resetDisplayBounds();
@@ -152,7 +157,7 @@ void ScalpelScene::checkBgShapes() {
// Iterate through the canim list
for (uint idx = 0; idx < _canimShapes.size(); ++idx) {
- Object &obj = _canimShapes[idx];
+ Object &obj = *_canimShapes[idx];
if (obj._type == STATIC_BG_SHAPE || obj._type == ACTIVE_BG_SHAPE) {
if ((obj._flags & 5) == 1) {
obj._misc = (pt.y < (obj._position.y + obj._imageFrame->_frame.h - 1)) ?
@@ -221,8 +226,8 @@ void ScalpelScene::doBgAnim() {
people._portrait.checkObject();
for (uint idx = 0; idx < _canimShapes.size(); ++idx) {
- if (_canimShapes[idx]._type != INVALID && _canimShapes[idx]._type != REMOVE)
- _canimShapes[idx].checkObject();
+ if (_canimShapes[idx]->_type != INVALID && _canimShapes[idx]->_type != REMOVE)
+ _canimShapes[idx]->checkObject();
}
if (_currentScene == DRAWING_ROOM)
@@ -266,7 +271,7 @@ void ScalpelScene::doBgAnim() {
}
for (uint idx = 0; idx < _canimShapes.size(); ++idx) {
- Object &o = _canimShapes[idx];
+ Object &o = *_canimShapes[idx];
if (o._type == ACTIVE_BG_SHAPE || o._type == HIDE_SHAPE || o._type == REMOVE)
screen.restoreBackground(Common::Rect(o._oldPosition.x, o._oldPosition.y,
o._oldPosition.x + o._oldSize.x, o._oldPosition.y + o._oldSize.y));
@@ -287,8 +292,8 @@ void ScalpelScene::doBgAnim() {
people._portrait.adjustObject();
for (uint idx = 0; idx < _canimShapes.size(); ++idx) {
- if (_canimShapes[idx]._type != INVALID)
- _canimShapes[idx].adjustObject();
+ if (_canimShapes[idx]->_type != INVALID)
+ _canimShapes[idx]->adjustObject();
}
if (people[HOLMES]._type == CHARACTER && people._holmesOn)
@@ -309,7 +314,7 @@ void ScalpelScene::doBgAnim() {
// Draw all canimations which are behind the person
for (uint idx = 0; idx < _canimShapes.size(); ++idx) {
- Object &o = _canimShapes[idx];
+ Object &o = *_canimShapes[idx];
if (o._type == ACTIVE_BG_SHAPE && o._misc == BEHIND) {
screen._backBuffer->transBlitFrom(*o._imageFrame, o._position, o._flags & OBJ_FLIPPED);
}
@@ -324,14 +329,14 @@ void ScalpelScene::doBgAnim() {
// Draw all canimations which are NORMAL and behind the person
for (uint idx = 0; idx < _canimShapes.size(); ++idx) {
- Object &o = _canimShapes[idx];
+ Object &o = *_canimShapes[idx];
if (o._type == ACTIVE_BG_SHAPE && o._misc == NORMAL_BEHIND) {
screen._backBuffer->transBlitFrom(*o._imageFrame, o._position, o._flags & OBJ_FLIPPED);
}
}
- // Draw the person if not animating
- if (people[HOLMES]._type == CHARACTER && people[HOLMES]._walkLoaded) {
+ // Draw the player if he's active and his walk has been loaded into memory
+ if (people[HOLMES]._type == CHARACTER && people[HOLMES]._walkLoaded && people._holmesOn) {
// If Holmes is too far to the right, move him back so he's on-screen
int xRight = SHERLOCK_SCREEN_WIDTH - 2 - people[HOLMES]._imageFrame->_frame.w;
int tempX = MIN(people[HOLMES]._position.x / FIXED_INT_MULTIPLIER, xRight);
@@ -352,7 +357,7 @@ void ScalpelScene::doBgAnim() {
// Draw all static and active canimations that are NORMAL and are in front of the person
for (uint idx = 0; idx < _canimShapes.size(); ++idx) {
- Object &o = _canimShapes[idx];
+ Object &o = *_canimShapes[idx];
if ((o._type == ACTIVE_BG_SHAPE || o._type == STATIC_BG_SHAPE) && o._misc == NORMAL_FORWARD) {
screen._backBuffer->transBlitFrom(*o._imageFrame, o._position, o._flags & OBJ_FLIPPED);
}
@@ -372,7 +377,7 @@ void ScalpelScene::doBgAnim() {
// Draw all static and active canimations that are in front of the person
for (uint idx = 0; idx < _canimShapes.size(); ++idx) {
- Object &o = _canimShapes[idx];
+ Object &o = *_canimShapes[idx];
if ((o._type == ACTIVE_BG_SHAPE || o._type == STATIC_BG_SHAPE) && o._misc == FORWARD) {
screen._backBuffer->transBlitFrom(*o._imageFrame, o._position, o._flags & OBJ_FLIPPED);
}
@@ -450,16 +455,18 @@ void ScalpelScene::doBgAnim() {
}
for (int idx = _canimShapes.size() - 1; idx >= 0; --idx) {
- Object &o = _canimShapes[idx];
+ Object &o = *_canimShapes[idx];
if (o._type == INVALID) {
// Anim shape was invalidated by checkEndOfSequence, so at this point we can remove it
+ delete _canimShapes[idx];
_canimShapes.remove_at(idx);
} else if (o._type == REMOVE) {
if (_goToScene == -1)
screen.slamArea(o._position.x, o._position.y, o._delta.x, o._delta.y);
// Shape for an animation is no longer needed, so remove it completely
+ delete _canimShapes[idx];
_canimShapes.remove_at(idx);
} else if (o._type == ACTIVE_BG_SHAPE) {
screen.flushImage(o._imageFrame, o._position,
@@ -496,6 +503,7 @@ int ScalpelScene::startCAnim(int cAnimNum, int playRate) {
int tpDir, walkDir;
int tFrames = 0;
int gotoCode = -1;
+ Object *cObj;
// Validation
if (cAnimNum >= (int)_cAnim.size())
@@ -533,33 +541,33 @@ int ScalpelScene::startCAnim(int cAnimNum, int playRate) {
return 1;
// Add new anim shape entry for displaying the animation
- _canimShapes.push_back(Object());
- Object &cObj = _canimShapes[_canimShapes.size() - 1];
+ cObj = new Object();
+ _canimShapes.push_back(cObj);
// Copy the canimation into the bgShapes type canimation structure so it can be played
- cObj._allow = cAnimNum + 1; // Keep track of the parent structure
- cObj._name = _cAnim[cAnimNum]._name; // Copy name
+ cObj->_allow = cAnimNum + 1; // Keep track of the parent structure
+ cObj->_name = _cAnim[cAnimNum]._name; // Copy name
// Remove any attempt to draw object frame
if (cAnim._type == NO_SHAPE && cAnim._sequences[0] < 100)
cAnim._sequences[0] = 0;
- cObj._sequences = cAnim._sequences;
- cObj._images = nullptr;
- cObj._position = cAnim._position;
- cObj._delta = Common::Point(0, 0);
- cObj._type = cAnim._type;
- cObj._flags = cAnim._flags;
-
- cObj._maxFrames = 0;
- cObj._frameNumber = -1;
- cObj._sequenceNumber = cAnimNum;
- cObj._oldPosition = Common::Point(0, 0);
- cObj._oldSize = Common::Point(0, 0);
- cObj._goto = Common::Point(0, 0);
- cObj._status = 0;
- cObj._misc = 0;
- cObj._imageFrame = nullptr;
+ cObj->_sequences = cAnim._sequences;
+ cObj->_images = nullptr;
+ cObj->_position = cAnim._position;
+ cObj->_delta = Common::Point(0, 0);
+ cObj->_type = cAnim._type;
+ cObj->_flags = cAnim._flags;
+
+ cObj->_maxFrames = 0;
+ cObj->_frameNumber = -1;
+ cObj->_sequenceNumber = cAnimNum;
+ cObj->_oldPosition = Common::Point(0, 0);
+ cObj->_oldSize = Common::Point(0, 0);
+ cObj->_goto = Common::Point(0, 0);
+ cObj->_status = 0;
+ cObj->_misc = 0;
+ cObj->_imageFrame = nullptr;
if (cAnim._name.size() > 0 && cAnim._type != NO_SHAPE) {
if (tpPos.x != -1)
@@ -584,25 +592,25 @@ int ScalpelScene::startCAnim(int cAnimNum, int playRate) {
// Now load the resource as an image
if (!IS_3DO) {
- cObj._images = new ImageFile(fname);
+ cObj->_images = new ImageFile(fname);
} else {
- cObj._images = new ImageFile3DO(fname, kImageFile3DOType_RoomFormat);
+ cObj->_images = new ImageFile3DO(fname, kImageFile3DOType_RoomFormat);
}
- cObj._imageFrame = &(*cObj._images)[0];
- cObj._maxFrames = cObj._images->size();
+ cObj->_imageFrame = &(*cObj->_images)[0];
+ cObj->_maxFrames = cObj->_images->size();
int frames = 0;
if (playRate < 0) {
// Reverse direction
// Count number of frames
- while (frames < MAX_FRAME && cObj._sequences[frames])
+ while (frames < MAX_FRAME && cObj->_sequences[frames])
++frames;
} else {
// Forward direction
BaseObject::_countCAnimFrames = true;
- while (cObj._type == ACTIVE_BG_SHAPE) {
- cObj.checkObject();
+ while (cObj->_type == ACTIVE_BG_SHAPE) {
+ cObj->checkObject();
++frames;
if (frames >= 1000)
@@ -614,10 +622,10 @@ int ScalpelScene::startCAnim(int cAnimNum, int playRate) {
BaseObject::_countCAnimFrames = false;
- cObj._type = cAnim._type;
- cObj._frameNumber = -1;
- cObj._position = cAnim._position;
- cObj._delta = Common::Point(0, 0);
+ cObj->_type = cAnim._type;
+ cObj->_frameNumber = -1;
+ cObj->_position = cAnim._position;
+ cObj->_delta = Common::Point(0, 0);
}
// Return if animation has no frames in it
@@ -631,7 +639,7 @@ int ScalpelScene::startCAnim(int cAnimNum, int playRate) {
if (playRate < 0) {
// Play in reverse
dir = -2;
- cObj._frameNumber = frames - 3;
+ cObj->_frameNumber = frames - 3;
} else {
dir = 0;
}
@@ -648,14 +656,14 @@ int ScalpelScene::startCAnim(int cAnimNum, int playRate) {
// Repeat same frame
int temp = repeat;
while (--temp > 0) {
- cObj._frameNumber--;
+ cObj->_frameNumber--;
doBgAnim();
if (_vm->shouldQuit())
return 0;
}
- cObj._frameNumber += dir;
+ cObj->_frameNumber += dir;
}
people[HOLMES]._type = CHARACTER;
@@ -670,14 +678,18 @@ int ScalpelScene::startCAnim(int cAnimNum, int playRate) {
if (playRate < 0)
// Reverse direction - set to end sequence
- cObj._frameNumber = tFrames - 1;
+ cObj->_frameNumber = tFrames - 1;
- if (cObj._frameNumber <= 26)
- gotoCode = cObj._sequences[cObj._frameNumber + 3];
+ if (cObj->_frameNumber <= 26)
+ gotoCode = cObj->_sequences[cObj->_frameNumber + 3];
- // Unless anim shape has already been freed, set it to REMOVE so doBgAnim can free it
- if (_canimShapes.indexOf(cObj) != -1)
- cObj.checkObject();
+ // Unless anim shape has already been removed, do a final check to allow it to become REMOVEd
+ for (uint idx = 0; idx < _canimShapes.size(); ++idx) {
+ if (_canimShapes[idx] == cObj) {
+ cObj->checkObject();
+ break;
+ }
+ }
if (gotoCode > 0 && !talk._talkToAbort) {
_goToScene = gotoCode;
diff --git a/engines/sherlock/scalpel/scalpel_scene.h b/engines/sherlock/scalpel/scalpel_scene.h
index 8fe3b66b38..8711fea2d0 100644
--- a/engines/sherlock/scalpel/scalpel_scene.h
+++ b/engines/sherlock/scalpel/scalpel_scene.h
@@ -75,6 +75,8 @@ protected:
public:
ScalpelScene(SherlockEngine *vm) : Scene(vm) {}
+ virtual ~ScalpelScene();
+
/**
* Draw all objects and characters.
*/
diff --git a/engines/sherlock/scalpel/scalpel_screen.cpp b/engines/sherlock/scalpel/scalpel_screen.cpp
index 2096dabcdf..71bcca5dc5 100644
--- a/engines/sherlock/scalpel/scalpel_screen.cpp
+++ b/engines/sherlock/scalpel/scalpel_screen.cpp
@@ -45,7 +45,7 @@ void ScalpelScreen::makeButton(const Common::Rect &bounds, int textX,
COMMAND_FOREGROUND, "%s", str.c_str() + 1);
}
-void ScalpelScreen::buttonPrint(const Common::Point &pt, byte color, bool slamIt,
+void ScalpelScreen::buttonPrint(const Common::Point &pt, uint color, bool slamIt,
const Common::String &str) {
int xStart = pt.x - stringWidth(str) / 2;
@@ -88,6 +88,255 @@ void ScalpelScreen::makeField(const Common::Rect &r) {
_backBuffer->vLine(r.right - 1, r.top + 1, r.bottom - 2, BUTTON_TOP);
}
+/*----------------------------------------------------------------*/
+
+void Scalpel3DOScreen::blitFrom(const Graphics::Surface &src, const Common::Point &pt, const Common::Rect &srcBounds) {
+ if (!_vm->_isScreenDoubled) {
+ ScalpelScreen::blitFrom(src, pt, srcBounds);
+ return;
+ }
+
+ Common::Rect srcRect = srcBounds;
+ Common::Rect destRect(pt.x, pt.y, pt.x + srcRect.width(), pt.y + srcRect.height());
+
+ if (!srcRect.isValidRect() || !clip(srcRect, destRect))
+ return;
+
+ // Add dirty area remapped to the 640x200 surface
+ addDirtyRect(Common::Rect(destRect.left * 2, destRect.top * 2, destRect.right * 2, destRect.bottom * 2));
+
+ // Transfer the area, doubling each pixel
+ for (int yp = 0; yp < srcRect.height(); ++yp) {
+ const uint16 *srcP = (const uint16 *)src.getBasePtr(srcRect.left, srcRect.top + yp);
+ uint16 *destP = (uint16 *)getBasePtr(destRect.left * 2, (destRect.top + yp) * 2);
+
+ for (int xp = srcRect.left; xp < srcRect.right; ++xp, ++srcP, destP += 2) {
+ *destP = *srcP;
+ *(destP + 1) = *srcP;
+ *(destP + 640) = *srcP;
+ *(destP + 640 + 1) = *srcP;
+ }
+ }
+}
+
+void Scalpel3DOScreen::transBlitFromUnscaled(const Graphics::Surface &src, const Common::Point &pt,
+ bool flipped, int overrideColor) {
+ if (!_vm->_isScreenDoubled) {
+ ScalpelScreen::transBlitFromUnscaled(src, pt, flipped, overrideColor);
+ return;
+ }
+
+ Common::Rect drawRect(0, 0, src.w, src.h);
+ Common::Rect destRect(pt.x, pt.y, pt.x + src.w, pt.y + src.h);
+
+ // Clip the display area to on-screen
+ if (!clip(drawRect, destRect))
+ // It's completely off-screen
+ return;
+
+ if (flipped)
+ drawRect = Common::Rect(src.w - drawRect.right, src.h - drawRect.bottom,
+ src.w - drawRect.left, src.h - drawRect.top);
+
+ Common::Point destPt(destRect.left, destRect.top);
+ addDirtyRect(Common::Rect(destPt.x * 2, destPt.y * 2, (destPt.x + drawRect.width()) * 2,
+ (destPt.y + drawRect.height()) * 2));
+
+ assert(src.format.bytesPerPixel == 2 && _surface.format.bytesPerPixel == 2);
+
+ for (int yp = 0; yp < drawRect.height(); ++yp) {
+ const uint16 *srcP = (const uint16 *)src.getBasePtr(
+ flipped ? drawRect.right - 1 : drawRect.left, drawRect.top + yp);
+ uint16 *destP = (uint16 *)getBasePtr(destPt.x * 2, (destPt.y + yp) * 2);
+
+ for (int xp = 0; xp < drawRect.width(); ++xp, destP += 2) {
+ // RGB 0, 0, 0 -> transparent on 3DO
+ if (*srcP) {
+ *destP = *srcP;
+ *(destP + 1) = *srcP;
+ *(destP + 640) = *srcP;
+ *(destP + 640 + 1) = *srcP;
+ }
+
+ srcP = flipped ? srcP - 1 : srcP + 1;
+ }
+ }
+}
+
+void Scalpel3DOScreen::fillRect(const Common::Rect &r, uint color) {
+ if (_vm->_isScreenDoubled)
+ ScalpelScreen::fillRect(Common::Rect(r.left * 2, r.top * 2, r.right * 2, r.bottom * 2), color);
+ else
+ ScalpelScreen::fillRect(r, color);
+}
+
+void Scalpel3DOScreen::fadeIntoScreen3DO(int speed) {
+ Events &events = *_vm->_events;
+ uint16 *currentScreenBasePtr = (uint16 *)getPixels();
+ uint16 *targetScreenBasePtr = (uint16 *)_backBuffer->getPixels();
+ uint16 currentScreenPixel = 0;
+ uint16 targetScreenPixel = 0;
+
+ uint16 currentScreenPixelRed = 0;
+ uint16 currentScreenPixelGreen = 0;
+ uint16 currentScreenPixelBlue = 0;
+
+ uint16 targetScreenPixelRed = 0;
+ uint16 targetScreenPixelGreen = 0;
+ uint16 targetScreenPixelBlue = 0;
+
+ uint16 screenWidth = SHERLOCK_SCREEN_WIDTH;
+ uint16 screenHeight = SHERLOCK_SCREEN_HEIGHT;
+ uint16 screenX = 0;
+ uint16 screenY = 0;
+ uint16 pixelsChanged = 0;
+
+ clearDirtyRects();
+
+ do {
+ pixelsChanged = 0;
+ uint16 *currentScreenPtr = currentScreenBasePtr;
+ uint16 *targetScreenPtr = targetScreenBasePtr;
+
+ for (screenY = 0; screenY < screenHeight; screenY++) {
+ for (screenX = 0; screenX < screenWidth; screenX++) {
+ currentScreenPixel = *currentScreenPtr;
+ targetScreenPixel = *targetScreenPtr;
+
+ if (currentScreenPixel != targetScreenPixel) {
+ // pixel doesn't match, adjust accordingly
+ currentScreenPixelRed = currentScreenPixel & 0xF800;
+ currentScreenPixelGreen = currentScreenPixel & 0x07E0;
+ currentScreenPixelBlue = currentScreenPixel & 0x001F;
+ targetScreenPixelRed = targetScreenPixel & 0xF800;
+ targetScreenPixelGreen = targetScreenPixel & 0x07E0;
+ targetScreenPixelBlue = targetScreenPixel & 0x001F;
+
+ if (currentScreenPixelRed != targetScreenPixelRed) {
+ if (currentScreenPixelRed < targetScreenPixelRed) {
+ currentScreenPixelRed += 0x0800;
+ } else {
+ currentScreenPixelRed -= 0x0800;
+ }
+ }
+ if (currentScreenPixelGreen != targetScreenPixelGreen) {
+ // Adjust +2/-2 because we are running RGB555 at RGB565
+ if (currentScreenPixelGreen < targetScreenPixelGreen) {
+ currentScreenPixelGreen += 0x0040;
+ } else {
+ currentScreenPixelGreen -= 0x0040;
+ }
+ }
+ if (currentScreenPixelBlue != targetScreenPixelBlue) {
+ if (currentScreenPixelBlue < targetScreenPixelBlue) {
+ currentScreenPixelBlue += 0x0001;
+ } else {
+ currentScreenPixelBlue -= 0x0001;
+ }
+ }
+
+ uint16 v = currentScreenPixelRed | currentScreenPixelGreen | currentScreenPixelBlue;
+ *currentScreenPtr = v;
+ if (_vm->_isScreenDoubled) {
+ *(currentScreenPtr + 1) = v;
+ *(currentScreenPtr + 640) = v;
+ *(currentScreenPtr + 640 + 1) = v;
+ }
+
+ pixelsChanged++;
+ }
+
+ currentScreenPtr += _vm->_isScreenDoubled ? 2 : 1;
+ targetScreenPtr++;
+ }
+
+ if (_vm->_isScreenDoubled)
+ currentScreenPtr += 640;
+ }
+
+ // Too much considered dirty at the moment
+ if (_vm->_isScreenDoubled)
+ addDirtyRect(Common::Rect(0, 0, screenWidth * 2, screenHeight * 2));
+ else
+ addDirtyRect(Common::Rect(0, 0, screenWidth, screenHeight));
+
+ events.pollEvents();
+ events.delay(10 * speed);
+ } while ((pixelsChanged) && (!_vm->shouldQuit()));
+}
+
+void Scalpel3DOScreen::blitFrom3DOcolorLimit(uint16 limitColor) {
+ uint16 *currentScreenPtr = (uint16 *)getPixels();
+ uint16 *targetScreenPtr = (uint16 *)_backBuffer->getPixels();
+ uint16 currentScreenPixel = 0;
+
+ uint16 screenWidth = SHERLOCK_SCREEN_WIDTH;
+ uint16 screenHeight = SHERLOCK_SCREEN_HEIGHT;
+ uint16 screenX = 0;
+ uint16 screenY = 0;
+
+ uint16 currentScreenPixelRed = 0;
+ uint16 currentScreenPixelGreen = 0;
+ uint16 currentScreenPixelBlue = 0;
+
+ uint16 limitPixelRed = limitColor & 0xF800;
+ uint16 limitPixelGreen = limitColor & 0x07E0;
+ uint16 limitPixelBlue = limitColor & 0x001F;
+
+ for (screenY = 0; screenY < screenHeight; screenY++) {
+ for (screenX = 0; screenX < screenWidth; screenX++) {
+ currentScreenPixel = *targetScreenPtr;
+
+ currentScreenPixelRed = currentScreenPixel & 0xF800;
+ currentScreenPixelGreen = currentScreenPixel & 0x07E0;
+ currentScreenPixelBlue = currentScreenPixel & 0x001F;
+
+ if (currentScreenPixelRed < limitPixelRed)
+ currentScreenPixelRed = limitPixelRed;
+ if (currentScreenPixelGreen < limitPixelGreen)
+ currentScreenPixelGreen = limitPixelGreen;
+ if (currentScreenPixelBlue < limitPixelBlue)
+ currentScreenPixelBlue = limitPixelBlue;
+
+ uint16 v = currentScreenPixelRed | currentScreenPixelGreen | currentScreenPixelBlue;
+ *currentScreenPtr = v;
+ if (_vm->_isScreenDoubled) {
+ *(currentScreenPtr + 1) = v;
+ *(currentScreenPtr + 640) = v;
+ *(currentScreenPtr + 640 + 1) = v;
+ }
+
+ currentScreenPtr += _vm->_isScreenDoubled ? 2 : 1;
+ targetScreenPtr++;
+ }
+
+ if (_vm->_isScreenDoubled)
+ currentScreenPtr += 640;
+ }
+
+ // Too much considered dirty at the moment
+ if (_vm->_isScreenDoubled)
+ addDirtyRect(Common::Rect(0, 0, screenWidth * 2, screenHeight * 2));
+ else
+ addDirtyRect(Common::Rect(0, 0, screenWidth, screenHeight));
+}
+
+uint16 Scalpel3DOScreen::w() const {
+ return _vm->_isScreenDoubled ? _surface.w / 2 : _surface.w;
+}
+
+uint16 Scalpel3DOScreen::h() const {
+ return _vm->_isScreenDoubled ? _surface.h / 2 : _surface.h;
+}
+
+void Scalpel3DOScreen::rawBlitFrom(const Graphics::Surface &src, const Common::Point &pt) {
+ Common::Rect srcRect(0, 0, src.w, src.h);
+ Common::Rect destRect(pt.x, pt.y, pt.x + src.w, pt.y + src.h);
+
+ addDirtyRect(destRect);
+ _surface.copyRectToSurface(src, destRect.left, destRect.top, srcRect);
+}
+
} // End of namespace Scalpel
} // End of namespace Sherlock
diff --git a/engines/sherlock/scalpel/scalpel_screen.h b/engines/sherlock/scalpel/scalpel_screen.h
index 472fe9e220..d6018a44a0 100644
--- a/engines/sherlock/scalpel/scalpel_screen.h
+++ b/engines/sherlock/scalpel/scalpel_screen.h
@@ -45,7 +45,7 @@ public:
* Prints an interface command with the first letter highlighted to indicate
* what keyboard shortcut is associated with it
*/
- void buttonPrint(const Common::Point &pt, byte color, bool slamIt, const Common::String &str);
+ void buttonPrint(const Common::Point &pt, uint color, bool slamIt, const Common::String &str);
/**
* Draw a panel in the back buffer with a raised area effect around the edges
@@ -59,6 +59,44 @@ public:
void makeField(const Common::Rect &r);
};
+class Scalpel3DOScreen : public ScalpelScreen {
+protected:
+ /**
+ * Draws a sub-section of a surface at a given position within this surface
+ * Overriden for the 3DO to automatically double the size of everything to the underlying 640x400 surface
+ */
+ virtual void blitFrom(const Graphics::Surface &src, const Common::Point &pt, const Common::Rect &srcBounds);
+
+ /**
+ * Draws a surface at a given position within this surface with transparency
+ */
+ virtual void transBlitFromUnscaled(const Graphics::Surface &src, const Common::Point &pt, bool flipped,
+ int overrideColor);
+public:
+ Scalpel3DOScreen(SherlockEngine *vm) : ScalpelScreen(vm) {}
+ virtual ~Scalpel3DOScreen() {}
+
+ /**
+ * Draws a sub-section of a surface at a given position within this surface
+ */
+ void rawBlitFrom(const Graphics::Surface &src, const Common::Point &pt);
+
+ /**
+ * Fade backbuffer 1 into screen (3DO RGB!)
+ */
+ void fadeIntoScreen3DO(int speed);
+
+ void blitFrom3DOcolorLimit(uint16 color);
+
+ /**
+ * Fill a given area of the surface with a given color
+ */
+ virtual void fillRect(const Common::Rect &r, uint color);
+
+ virtual uint16 w() const;
+ virtual uint16 h() const;
+};
+
} // End of namespace Scalpel
} // End of namespace Sherlock
diff --git a/engines/sherlock/scalpel/scalpel_talk.cpp b/engines/sherlock/scalpel/scalpel_talk.cpp
index 2dda817445..2c447b09ab 100644
--- a/engines/sherlock/scalpel/scalpel_talk.cpp
+++ b/engines/sherlock/scalpel/scalpel_talk.cpp
@@ -22,6 +22,7 @@
#include "sherlock/scalpel/scalpel_talk.h"
#include "sherlock/scalpel/scalpel_fixed_text.h"
+#include "sherlock/scalpel/scalpel_journal.h"
#include "sherlock/scalpel/scalpel_map.h"
#include "sherlock/scalpel/scalpel_people.h"
#include "sherlock/scalpel/scalpel_scene.h"
@@ -189,6 +190,9 @@ void ScalpelTalk::talkInterface(const byte *&str) {
ScalpelScreen &screen = *(ScalpelScreen *)_vm->_screen;
UserInterface &ui = *_vm->_ui;
+ if (_vm->getLanguage() == Common::DE_DEU)
+ skipBadText(str);
+
// If the window isn't yet open, draw the window before printing starts
if (!ui._windowOpen && _noTextYet) {
_noTextYet = false;
@@ -528,6 +532,11 @@ OpcodeReturn ScalpelTalk::cmdSummonWindow(const byte *&str) {
return RET_SUCCESS;
}
+void ScalpelTalk::loadTalkFile(const Common::String &filename) {
+ Talk::loadTalkFile(filename);
+ _3doSpeechIndex = 0;
+}
+
void ScalpelTalk::talkWait(const byte *&str) {
UserInterface &ui = *_vm->_ui;
bool pauseFlag = _pauseFlag;
@@ -548,12 +557,49 @@ void ScalpelTalk::nothingToSay() {
}
void ScalpelTalk::switchSpeaker() {
- // If it's the 3DO, pass on to start the actor's conversation movie
- if (IS_3DO)
- talk3DOMovieTrigger(_3doSpeechIndex++);
}
-void ScalpelTalk::talk3DOMovieTrigger(int subIndex) {
+int ScalpelTalk::waitForMore(int delay) {
+ Events &events = *_vm->_events;
+
+ if (!IS_3DO) {
+ return Talk::waitForMore(delay);
+ }
+
+ // Hide the cursor
+ events.hideCursor();
+ events.wait(1);
+
+ switchSpeaker();
+
+ // Play the video
+ talk3DOMovieTrigger(_3doSpeechIndex++);
+
+ // Adjust _talkStealth mode:
+ // mode 1 - It was by a pause without stealth being on before the pause, so reset back to 0
+ // mode 3 - It was set by a pause with stealth being on before the pause, to set it to active
+ // mode 0/2 (Inactive/active) No change
+ switch (_talkStealth) {
+ case 1:
+ _talkStealth = 0;
+ break;
+ case 2:
+ _talkStealth = 2;
+ break;
+ default:
+ break;
+ }
+
+ events.showCursor();
+ events._pressed = events._released = false;
+
+ return 254;
+}
+
+bool ScalpelTalk::talk3DOMovieTrigger(int subIndex) {
+ ScalpelEngine &vm = *(ScalpelEngine *)_vm;
+ Screen &screen = *_vm->_screen;
+
// Find out a few things that we need
int userSelector = _vm->_ui->_selector;
int scriptSelector = _scriptSelect;
@@ -567,15 +613,14 @@ void ScalpelTalk::talk3DOMovieTrigger(int subIndex) {
if (scriptSelector >= 0) {
// Script-selected dialog
selector = scriptSelector;
- subIndex--; // for scripts we adjust subIndex, b/c we won't get called from doTalkControl()
} else {
- warning("talk3DOMovieTrigger: unable to find selector");
- return;
+ warning("talk3DOMovieTrigger: unable to find selector");
+ return true;
}
}
// Make a quick update, so that current text is shown on screen
- _vm->_screen->update();
+ screen.update();
// Figure out that movie filename
Common::String movieFilename;
@@ -597,10 +642,45 @@ void ScalpelTalk::talk3DOMovieTrigger(int subIndex) {
warning("selector: %d", selector);
warning("subindex: %d", subIndex);
- Scalpel3DOMoviePlay(movieFilename.c_str(), Common::Point(5, 5));
+ bool result = vm.play3doMovie(movieFilename, get3doPortraitPosition(), true);
// Restore screen HACK
_vm->_screen->makeAllDirty();
+
+ return result;
+}
+
+Common::Point ScalpelTalk::get3doPortraitPosition() const {
+ // TODO: This current method is only an assumption of how the original figured
+ // out where to place each character's portrait movie.
+ People &people = *_vm->_people;
+ Scene &scene = *_vm->_scene;
+ const int PORTRAIT_W = 100;
+ const int PORTRAIT_H = 76;
+
+ if (_speaker == -1)
+ return Common::Point();
+
+ // Get the position of the character
+ Common::Point pt;
+ if (_speaker == HOLMES) {
+ pt = Common::Point(people[HOLMES]._position.x / FIXED_INT_MULTIPLIER,
+ people[HOLMES]._position.y / FIXED_INT_MULTIPLIER);
+ } else {
+ int objNum = people.findSpeaker(_speaker);
+ if (objNum == -1)
+ return Common::Point();
+
+ pt = scene._bgShapes[objNum]._position;
+ }
+
+ // Adjust the top-left so the center of the portrait will be on the character,
+ // but ensure the portrait will be entirely on-screen
+ pt -= Common::Point(PORTRAIT_W / 2, PORTRAIT_H / 2);
+ pt.x = CLIP((int)pt.x, 10, SHERLOCK_SCREEN_WIDTH - 10 - PORTRAIT_W);
+ pt.y = CLIP((int)pt.y, 10, CONTROLS_Y - PORTRAIT_H - 10);
+
+ return pt;
}
void ScalpelTalk::drawInterface() {
@@ -629,10 +709,14 @@ void ScalpelTalk::drawInterface() {
screen.makeButton(Common::Rect(181, CONTROLS_Y, 221, CONTROLS_Y + 10),
200 - screen.stringWidth(fixedText_Down) / 2, fixedText_Down);
} else {
- int strWidth = screen.stringWidth(Scalpel::PRESS_KEY_TO_CONTINUE);
+ Common::String fixedText_PressKeyToContinue = fixedText.getText(kFixedText_PressKey_ToContinue);
+ Common::String fixedText_PressKeyToContinueHotkey = fixedText.getText(kFixedText_PressKey_ToContinueHotkey);
+ int fixedText_PressKeyToContinueLen = screen.stringWidth(fixedText_PressKeyToContinue);
+
screen.makeButton(Common::Rect(46, CONTROLS_Y, 273, CONTROLS_Y + 10),
- 160 - strWidth / 2, Scalpel::PRESS_KEY_TO_CONTINUE);
- screen.gPrint(Common::Point(160 - strWidth / 2, CONTROLS_Y), COMMAND_FOREGROUND, "P");
+ 160 - fixedText_PressKeyToContinueLen / 2, fixedText_PressKeyToContinue);
+ screen.gPrint(Common::Point(160 - fixedText_PressKeyToContinueLen / 2, CONTROLS_Y), COMMAND_FOREGROUND,
+ "%s", fixedText_PressKeyToContinueHotkey.c_str());
}
}
@@ -930,6 +1014,14 @@ void ScalpelTalk::clearSequences() {
_sequenceStack.clear();
}
+void ScalpelTalk::skipBadText(const byte *&msgP) {
+ // WORKAROUND: Skip over bad text in the original game
+ const char *BAD_PHRASE1 = "Change Speaker to Sherlock Holmes ";
+
+ if (!strncmp((const char *)msgP, BAD_PHRASE1, strlen(BAD_PHRASE1)))
+ msgP += strlen(BAD_PHRASE1);
+}
+
} // End of namespace Scalpel
} // End of namespace Sherlock
diff --git a/engines/sherlock/scalpel/scalpel_talk.h b/engines/sherlock/scalpel/scalpel_talk.h
index 31f78cbf85..3ba61dadc1 100644
--- a/engines/sherlock/scalpel/scalpel_talk.h
+++ b/engines/sherlock/scalpel/scalpel_talk.h
@@ -39,6 +39,11 @@ class ScalpelTalk : public Talk {
private:
Common::Stack<SequenceEntry> _sequenceStack;
+ /**
+ * Get the center position for the current speaker, if any
+ */
+ Common::Point get3doPortraitPosition() const;
+
OpcodeReturn cmdSwitchSpeaker(const byte *&str);
OpcodeReturn cmdAssignPortraitLocation(const byte *&str);
OpcodeReturn cmdGotoScene(const byte *&str);
@@ -84,6 +89,12 @@ public:
virtual ~ScalpelTalk() {}
/**
+ * Opens the talk file 'talk.tlk' and searches the index for the specified
+ * conversation. If found, the data for that conversation is loaded
+ */
+ virtual void loadTalkFile(const Common::String &filename);
+
+ /**
* Called whenever a conversation or item script needs to be run. For standard conversations,
* it opens up a description window similar to how 'talk' does, but shows a 'reply' directly
* instead of waiting for a statement option.
@@ -94,6 +105,12 @@ public:
virtual void talkTo(const Common::String filename);
/**
+ * When the talk window has been displayed, waits a period of time proportional to
+ * the amount of text that's been displayed
+ */
+ virtual int waitForMore(int delay);
+
+ /**
* Draws the interface for conversation display
*/
void drawInterface();
@@ -112,7 +129,12 @@ public:
/**
* Trigger to play a 3DO talk dialog movie
*/
- void talk3DOMovieTrigger(int subIndex);
+ bool talk3DOMovieTrigger(int subIndex);
+
+ /**
+ * Handles skipping over bad text in conversations
+ */
+ static void skipBadText(const byte *&msgP);
/**
* Push the details of a passed object onto the saved sequences stack
@@ -128,7 +150,7 @@ public:
/**
* Returns true if the script stack is empty
*/
- virtual bool isSequencesEmpty() const { return _scriptStack.empty(); }
+ virtual bool isSequencesEmpty() const { return _sequenceStack.empty(); }
/**
* Clears the stack of pending object sequences associated with speakers in the scene
diff --git a/engines/sherlock/scalpel/scalpel_user_interface.cpp b/engines/sherlock/scalpel/scalpel_user_interface.cpp
index a67d464a11..79d74ba999 100644
--- a/engines/sherlock/scalpel/scalpel_user_interface.cpp
+++ b/engines/sherlock/scalpel/scalpel_user_interface.cpp
@@ -65,9 +65,8 @@ const int INVENTORY_POINTS[8][3] = {
};
const char COMMANDS[13] = "LMTPOCIUGJFS";
+const char COMMANDS_3DO[13] = "LMTPOCIUGSFF";
const char INVENTORY_COMMANDS[9] = { "ELUG-+,." };
-const char *const PRESS_KEY_FOR_MORE = "Press any Key for More.";
-const char *const PRESS_KEY_TO_CONTINUE = "Press any Key to Continue.";
const int UI_OFFSET_3DO = 16; // (320 - 288) / 2
/*----------------------------------------------------------------*/
@@ -118,10 +117,18 @@ void ScalpelUserInterface::drawInterface(int bufferNum) {
const ImageFrame &src = (*_controlPanel)[0];
int16 x = (!IS_3DO) ? 0 : UI_OFFSET_3DO;
- if (bufferNum & 1)
+ if (bufferNum & 1) {
+ if (IS_3DO)
+ screen._backBuffer1.fillRect(Common::Rect(0, CONTROLS_Y,
+ SHERLOCK_SCREEN_WIDTH, SHERLOCK_SCREEN_HEIGHT), BLACK);
screen._backBuffer1.transBlitFrom(src, Common::Point(x, CONTROLS_Y));
- if (bufferNum & 2)
+ }
+ if (bufferNum & 2) {
+ if (IS_3DO)
+ screen._backBuffer2.fillRect(Common::Rect(0, CONTROLS_Y,
+ SHERLOCK_SCREEN_WIDTH, SHERLOCK_SCREEN_HEIGHT), BLACK);
screen._backBuffer2.transBlitFrom(src, Common::Point(x, CONTROLS_Y));
+ }
if (bufferNum == 3)
screen._backBuffer2.fillRect(0, INFO_LINE, SHERLOCK_SCREEN_WIDTH, INFO_LINE + 10, INFO_BLACK);
}
@@ -459,8 +466,8 @@ void ScalpelUserInterface::toggleButton(int num) {
void ScalpelUserInterface::clearInfo() {
if (_infoFlag) {
- _vm->_screen->vgaBar(Common::Rect(16, INFO_LINE, SHERLOCK_SCREEN_WIDTH - 19,
- INFO_LINE + 10), INFO_BLACK);
+ _vm->_screen->vgaBar(Common::Rect(IS_3DO ? 33 : 16, INFO_LINE,
+ SHERLOCK_SCREEN_WIDTH - (IS_3DO ? 33 : 19), INFO_LINE + 10), INFO_BLACK);
_infoFlag = false;
_oldLook = -1;
}
@@ -768,7 +775,7 @@ void ScalpelUserInterface::doEnvControl() {
} else if ((found == 1 && events._released) || _key == 'L') {
saves._envMode = SAVEMODE_LOAD;
if (_selector != -1) {
- saves.loadGame(_selector + 1);
+ saves.loadGame(_selector);
}
} else if ((found == 2 && events._released) || _key == 'S') {
saves._envMode = SAVEMODE_SAVE;
@@ -777,7 +784,7 @@ void ScalpelUserInterface::doEnvControl() {
_oldSelector = _selector;
if (saves.promptForDescription(_selector)) {
- saves.saveGame(_selector + 1, saves._savegames[_selector]);
+ saves.saveGame(_selector, saves._savegames[_selector]);
banishWindow(1);
_windowBounds.top = CONTROLS_Y1;
@@ -860,7 +867,7 @@ void ScalpelUserInterface::doEnvControl() {
// Check whether there are more pending D keys pressed
moreKeys = false;
if (events.kbHit()) {
- Common::KeyState keyState;
+ Common::KeyState keyState = events.getKey();
_key = toupper(keyState.keycode);
moreKeys = _key == 'D';
@@ -941,14 +948,14 @@ void ScalpelUserInterface::doEnvControl() {
if (_selector != -1) {
// Are we already in Load mode?
if (saves._envMode == SAVEMODE_LOAD) {
- saves.loadGame(_selector + 1);
+ saves.loadGame(_selector);
} else if (saves._envMode == SAVEMODE_SAVE || saves.isSlotEmpty(_selector)) {
// We're already in save mode, or pointing to an empty save slot
if (saves.checkGameOnScreen(_selector))
_oldSelector = _selector;
if (saves.promptForDescription(_selector)) {
- saves.saveGame(_selector + 1, saves._savegames[_selector]);
+ saves.saveGame(_selector, saves._savegames[_selector]);
banishWindow();
_windowBounds.top = CONTROLS_Y1;
_key = _oldKey = -1;
@@ -1264,10 +1271,12 @@ void ScalpelUserInterface::doLookControl() {
}
void ScalpelUserInterface::doMainControl() {
+ ScalpelEngine &vm = *(ScalpelEngine *)_vm;
Events &events = *_vm->_events;
ScalpelInventory &inv = *(ScalpelInventory *)_vm->_inventory;
ScalpelSaveManager &saves = *(ScalpelSaveManager *)_vm->_saves;
Common::Point pt = events.mousePos();
+ const char *commands = IS_3DO ? COMMANDS_3DO : COMMANDS;
if ((events._pressed || events._released) && pt.y > CONTROLS_Y) {
events.clearKeyboard();
@@ -1282,16 +1291,18 @@ void ScalpelUserInterface::doMainControl() {
r.right += UI_OFFSET_3DO - 1;
}
if (r.contains(pt))
- _key = COMMANDS[_temp];
+ _key = commands[_temp];
}
--_temp;
} else if (_keyPress) {
// Keyboard control
_keyboardInput = true;
- if (_keyPress >= 'A' && _keyPress <= 'Z') {
- const char *c = strchr(COMMANDS, _keyPress);
- _temp = !c ? 12 : c - COMMANDS;
+ char key = toupper(_keyPress);
+ const char *c = strchr(commands, key);
+ if (c) {
+ _temp = c - commands;
+ _key = key;
} else {
_temp = 12;
}
@@ -1372,28 +1383,38 @@ void ScalpelUserInterface::doMainControl() {
journalControl();
break;
case 'F':
- pushButton(10);
+ if (IS_3DO) {
+ if (_temp == 10) {
+ pushButton(10);
+ vm.showScummVMRestoreDialog();
+ } else if (_temp == 11) {
+ pushButton(11);
+ vm.showScummVMSaveDialog();
+ }
+ } else {
+ pushButton(10);
- // Create a thumbnail of the current screen before the files dialog is shown, in case
- // the user saves the game
- saves.createThumbnail();
+ // Create a thumbnail of the current screen before the files dialog is shown, in case
+ // the user saves the game
+ saves.createThumbnail();
- _selector = _oldSelector = -1;
+ _selector = _oldSelector = -1;
- if (_vm->_showOriginalSavesDialog) {
- // Show the original dialog
- _menuMode = FILES_MODE;
- saves.drawInterface();
- _windowOpen = true;
- } else {
- // Show the ScummVM GMM instead
- _vm->_canLoadSave = true;
- _vm->openMainMenuDialog();
- _vm->_canLoadSave = false;
+ if (_vm->_showOriginalSavesDialog) {
+ // Show the original dialog
+ _menuMode = FILES_MODE;
+ saves.drawInterface();
+ _windowOpen = true;
+ } else {
+ // Show the ScummVM GMM instead
+ _vm->_canLoadSave = true;
+ _vm->openMainMenuDialog();
+ _vm->_canLoadSave = false;
+ }
}
break;
case 'S':
- pushButton(11);
+ pushButton(IS_3DO ? 9 : 11);
_menuMode = SETUP_MODE;
Settings::show(_vm);
break;
@@ -1645,9 +1666,6 @@ void ScalpelUserInterface::doTalkControl() {
sound._speechPlaying = false;
}
- if (IS_3DO)
- // Trigger to play 3DO movie
- talk.talk3DOMovieTrigger(0);
talk.waitForMore(talk._statements[_selector]._statement.size());
if (talk._talkToAbort)
@@ -1790,6 +1808,7 @@ void ScalpelUserInterface::printObjectDesc(const Common::String &str, bool first
ScalpelInventory &inv = *(ScalpelInventory *)_vm->_inventory;
ScalpelScreen &screen = *(ScalpelScreen *)_vm->_screen;
Talk &talk = *_vm->_talk;
+ FixedText &fixedText = *_vm->_fixedText;
if (str.hasPrefix("_")) {
_lookScriptFlag = true;
@@ -1920,20 +1939,26 @@ void ScalpelUserInterface::printObjectDesc(const Common::String &str, bool first
// Handle display depending on whether all the message was shown
if (!endOfStr) {
+ Common::String fixedText_PressKeyForMore = fixedText.getText(kFixedText_PressKey_ForMore);
+ Common::String fixedText_PressKeyForMoreHotkey = fixedText.getText(kFixedText_PressKey_ForMoreHotkey);
+ int fixedText_PressKeyForMoreLen = screen.stringWidth(fixedText_PressKeyForMore);
+
screen.makeButton(Common::Rect(46, CONTROLS_Y, 272, CONTROLS_Y + 10),
- (SHERLOCK_SCREEN_WIDTH - screen.stringWidth(PRESS_KEY_FOR_MORE)) / 2,
- PRESS_KEY_FOR_MORE);
- screen.gPrint(Common::Point((SHERLOCK_SCREEN_WIDTH -
- screen.stringWidth(PRESS_KEY_FOR_MORE)) / 2, CONTROLS_Y),
- COMMAND_FOREGROUND, "P");
+ (SHERLOCK_SCREEN_WIDTH - fixedText_PressKeyForMoreLen) / 2,
+ fixedText_PressKeyForMore);
+ screen.gPrint(Common::Point((SHERLOCK_SCREEN_WIDTH - fixedText_PressKeyForMoreLen) / 2, CONTROLS_Y),
+ COMMAND_FOREGROUND, "%s", fixedText_PressKeyForMoreHotkey.c_str());
_descStr = msgP;
} else {
+ Common::String fixedText_PressKeyToContinue = fixedText.getText(kFixedText_PressKey_ToContinue);
+ Common::String fixedText_PressKeyToContinueHotkey = fixedText.getText(kFixedText_PressKey_ToContinueHotkey);
+ int fixedText_PressKeyToContinueLen = screen.stringWidth(fixedText_PressKeyToContinue);
+
screen.makeButton(Common::Rect(46, CONTROLS_Y, 272, CONTROLS_Y + 10),
- (SHERLOCK_SCREEN_WIDTH - screen.stringWidth(PRESS_KEY_TO_CONTINUE)) / 2,
- PRESS_KEY_TO_CONTINUE);
- screen.gPrint(Common::Point((SHERLOCK_SCREEN_WIDTH -
- screen.stringWidth(PRESS_KEY_TO_CONTINUE)) / 2, CONTROLS_Y),
- COMMAND_FOREGROUND, "P");
+ (SHERLOCK_SCREEN_WIDTH - fixedText_PressKeyToContinueLen) / 2,
+ fixedText_PressKeyToContinue);
+ screen.gPrint(Common::Point((SHERLOCK_SCREEN_WIDTH - fixedText_PressKeyToContinueLen) / 2, CONTROLS_Y),
+ COMMAND_FOREGROUND, "%s", fixedText_PressKeyToContinueHotkey.c_str());
_descStr = "";
}
diff --git a/engines/sherlock/scalpel/scalpel_user_interface.h b/engines/sherlock/scalpel/scalpel_user_interface.h
index 9a55189a66..8c2f3f9e3b 100644
--- a/engines/sherlock/scalpel/scalpel_user_interface.h
+++ b/engines/sherlock/scalpel/scalpel_user_interface.h
@@ -34,12 +34,11 @@ class Talk;
namespace Scalpel {
extern const char COMMANDS[13];
+extern const char COMMANDS_3DO[13];
extern const int MENU_POINTS[12][4];
extern const int INVENTORY_POINTS[8][3];
extern const char INVENTORY_COMMANDS[9];
-extern const char *const PRESS_KEY_FOR_MORE;
-extern const char *const PRESS_KEY_TO_CONTINUE;
class Settings;
diff --git a/engines/sherlock/scalpel/tsage/logo.cpp b/engines/sherlock/scalpel/tsage/logo.cpp
index 64539b941a..273d26df74 100644
--- a/engines/sherlock/scalpel/tsage/logo.cpp
+++ b/engines/sherlock/scalpel/tsage/logo.cpp
@@ -163,6 +163,7 @@ Object::Object() {
_angle = _changeCtr = 0;
_walkStartFrame = 0;
_majorDiff = _minorDiff = 0;
+ _updateStartFrame = 0;
}
void Object::setVisage(int visage, int strip) {
@@ -423,6 +424,7 @@ Logo::Logo(ScalpelEngine *vm) : _vm(vm), _lib("sf3.rlb") {
// Initialize counter
_counter = 0;
+ _frameCounter = 0;
// Initialize wait frame counters
_waitFrames = 0;
diff --git a/engines/sherlock/scene.cpp b/engines/sherlock/scene.cpp
index 4e40032df9..6f9ef179a3 100644
--- a/engines/sherlock/scene.cpp
+++ b/engines/sherlock/scene.cpp
@@ -26,6 +26,7 @@
#include "sherlock/scalpel/scalpel.h"
#include "sherlock/scalpel/scalpel_people.h"
#include "sherlock/scalpel/scalpel_scene.h"
+#include "sherlock/scalpel/scalpel_screen.h"
#include "sherlock/tattoo/tattoo.h"
#include "sherlock/tattoo/tattoo_scene.h"
#include "sherlock/tattoo/tattoo_user_interface.h"
@@ -215,7 +216,6 @@ Scene::Scene(SherlockEngine *vm): _vm(vm) {
_currentScene = -1;
_goToScene = -1;
- _loadingSavedGame = false;
_walkedInScene = false;
_version = 0;
_compressed = false;
@@ -273,6 +273,8 @@ void Scene::selectScene() {
}
void Scene::freeScene() {
+ SaveManager &saves = *_vm->_saves;
+
if (_currentScene == -1)
return;
@@ -283,10 +285,8 @@ void Scene::freeScene() {
_vm->_music->freeSong();
_vm->_sound->freeLoadedSounds();
- if (!_loadingSavedGame)
+ if (!saves._justLoaded)
saveSceneStatus();
- else
- _loadingSavedGame = false;
_sequenceBuffer.clear();
_descText.clear();
@@ -562,34 +562,37 @@ bool Scene::loadScene(const Common::String &filename) {
// Read in the walk data
size = rrmStream->readUint16LE();
- Common::SeekableReadStream *walkStream = !_compressed ? rrmStream :
+ Common::SeekableReadStream *walkStream = !_compressed ? rrmStream->readStream(size) :
res.decompress(*rrmStream, size);
- int startPos = walkStream->pos();
- while ((walkStream->pos() - startPos) < size) {
- _walkPoints.push_back(WalkArray());
- _walkPoints[_walkPoints.size() - 1]._fileOffset = walkStream->pos() - startPos;
- _walkPoints[_walkPoints.size() - 1].load(*walkStream, IS_ROSE_TATTOO);
- }
-
- if (_compressed)
- delete walkStream;
-
// Translate the file offsets of the walk directory to indexes in the loaded walk data
for (uint idx1 = 0; idx1 < _zones.size(); ++idx1) {
for (uint idx2 = 0; idx2 < _zones.size(); ++idx2) {
- int fileOffset = _walkDirectory[idx1][idx2];
- if (fileOffset == -1)
+ int dataOffset = _walkDirectory[idx1][idx2];
+ if (dataOffset == -1)
continue;
+ // Check to see if we've already loaded the walk set for the given data offset
uint dataIndex = 0;
- while (dataIndex < _walkPoints.size() && _walkPoints[dataIndex]._fileOffset != fileOffset)
+ while (dataIndex < _walkPoints.size() && _walkPoints[dataIndex]._fileOffset != dataOffset)
++dataIndex;
- assert(dataIndex < _walkPoints.size());
+
+ if (dataIndex == _walkPoints.size()) {
+ // Walk data for that offset hasn't been loaded yet, so load it now
+ _walkPoints.push_back(WalkArray());
+
+ walkStream->seek(dataOffset);
+ _walkPoints[_walkPoints.size() - 1]._fileOffset = dataOffset;
+ _walkPoints[_walkPoints.size() - 1].load(*walkStream, IS_ROSE_TATTOO);
+ dataIndex = _walkPoints.size() - 1;
+ }
+
_walkDirectory[idx1][idx2] = dataIndex;
}
}
+ delete walkStream;
+
if (IS_ROSE_TATTOO) {
// Read in the entrance
_entrance.load(*rrmStream);
@@ -892,28 +895,38 @@ bool Scene::loadScene(const Common::String &filename) {
// === WALK DATA === Read in the walk data
roomStream->seek(header3DO_walkData_offset);
- int startPos = roomStream->pos();
- while ((roomStream->pos() - startPos) < (int)header3DO_walkData_size) {
- _walkPoints.push_back(WalkArray());
- _walkPoints[_walkPoints.size() - 1]._fileOffset = roomStream->pos() - startPos;
- _walkPoints[_walkPoints.size() - 1].load(*roomStream, false);
- }
+ // Read in the walk data
+ Common::SeekableReadStream *walkStream = !_compressed ? roomStream->readStream(header3DO_walkData_size) :
+ res.decompress(*roomStream, header3DO_walkData_size);
// Translate the file offsets of the walk directory to indexes in the loaded walk data
for (uint idx1 = 0; idx1 < _zones.size(); ++idx1) {
for (uint idx2 = 0; idx2 < _zones.size(); ++idx2) {
- int fileOffset = _walkDirectory[idx1][idx2];
- if (fileOffset == -1)
+ int dataOffset = _walkDirectory[idx1][idx2];
+ if (dataOffset == -1)
continue;
+ // Check to see if we've already loaded the walk set for the given data offset
uint dataIndex = 0;
- while (dataIndex < _walkPoints.size() && _walkPoints[dataIndex]._fileOffset != fileOffset)
+ while (dataIndex < _walkPoints.size() && _walkPoints[dataIndex]._fileOffset != dataOffset)
++dataIndex;
- assert(dataIndex < _walkPoints.size());
+
+ if (dataIndex == _walkPoints.size()) {
+ // Walk data for that offset hasn't been loaded yet, so load it now
+ _walkPoints.push_back(WalkArray());
+
+ walkStream->seek(dataOffset);
+ _walkPoints[_walkPoints.size() - 1]._fileOffset = dataOffset;
+ _walkPoints[_walkPoints.size() - 1].load(*walkStream, IS_ROSE_TATTOO);
+ dataIndex = _walkPoints.size() - 1;
+ }
+
_walkDirectory[idx1][idx2] = dataIndex;
}
}
+ delete walkStream;
+
// === EXITS === Read in the exits
roomStream->seek(header3DO_exits_offset);
@@ -1090,9 +1103,9 @@ void Scene::checkSceneFlags(bool flag) {
for (uint idx = 0; idx < _bgShapes.size(); ++idx) {
Object &o = _bgShapes[idx];
- bool objectFlag = true;
if (o._requiredFlag[0] || o._requiredFlag[1]) {
+ bool objectFlag = true;
if (o._requiredFlag[0] != 0)
objectFlag = _vm->readFlags(o._requiredFlag[0]);
if (o._requiredFlag[1] != 0)
@@ -1282,7 +1295,7 @@ void Scene::transitionToScene() {
} else {
// fade in for 3DO
screen.clear();
- screen.fadeIntoScreen3DO(3);
+ static_cast<Scalpel::Scalpel3DOScreen *>(_vm->_screen)->fadeIntoScreen3DO(3);
}
} else {
screen.slamArea(screen._currentScroll.x, screen._currentScroll.y, SHERLOCK_SCREEN_WIDTH, SHERLOCK_SCREEN_HEIGHT);
@@ -1376,7 +1389,6 @@ void Scene::synchronize(Serializer &s) {
s.syncAsSint16LE(_currentScene);
} else {
s.syncAsSint16LE(_goToScene);
- _loadingSavedGame = true;
}
for (int sceneNum = 1; sceneNum < SCENES_COUNT; ++sceneNum) {
diff --git a/engines/sherlock/scene.h b/engines/sherlock/scene.h
index f75dfb40cd..f7aa39fd41 100644
--- a/engines/sherlock/scene.h
+++ b/engines/sherlock/scene.h
@@ -145,8 +145,6 @@ public:
class Scene {
private:
- bool _loadingSavedGame;
-
/**
* Loads sounds for the scene
*/
@@ -229,7 +227,7 @@ public:
Common::Array<Exit> _exits;
SceneEntry _entrance;
Common::Array<SceneSound> _sounds;
- ObjectArray _canimShapes;
+ Common::Array<Object *> _canimShapes;
Common::Array<ScaleZone> _scaleZones;
Common::StringArray _objSoundList;
bool _restoreFlag;
diff --git a/engines/sherlock/screen.cpp b/engines/sherlock/screen.cpp
index 4233bca0cb..74da2a80ea 100644
--- a/engines/sherlock/screen.cpp
+++ b/engines/sherlock/screen.cpp
@@ -30,15 +30,17 @@
namespace Sherlock {
Screen *Screen::init(SherlockEngine *vm) {
- if (vm->getGameID() == GType_SerratedScalpel)
- return new Scalpel::ScalpelScreen(vm);
- else
+ if (vm->getGameID() == GType_RoseTattoo)
return new Screen(vm);
+ else if (vm->getPlatform() == Common::kPlatform3DO)
+ return new Scalpel::Scalpel3DOScreen(vm);
+ else
+ return new Scalpel::ScalpelScreen(vm);
}
Screen::Screen(SherlockEngine *vm) : Surface(g_system->getWidth(), g_system->getHeight()), _vm(vm),
- _backBuffer1(g_system->getWidth(), g_system->getHeight()),
- _backBuffer2(g_system->getWidth(), g_system->getHeight()),
+ _backBuffer1(vm->getGameID() == GType_RoseTattoo ? 640 : 320, vm->getGameID() == GType_RoseTattoo ? 480 : 200),
+ _backBuffer2(vm->getGameID() == GType_RoseTattoo ? 640 : 320, vm->getGameID() == GType_RoseTattoo ? 480 : 200),
_backBuffer(&_backBuffer1) {
_transitionSeed = 1;
_fadeStyle = false;
@@ -219,133 +221,9 @@ void Screen::verticalTransition() {
}
}
-void Screen::fadeIntoScreen3DO(int speed) {
- Events &events = *_vm->_events;
- uint16 *currentScreenBasePtr = (uint16 *)getPixels();
- uint16 *targetScreenBasePtr = (uint16 *)_backBuffer->getPixels();
- uint16 currentScreenPixel = 0;
- uint16 targetScreenPixel = 0;
-
- uint16 currentScreenPixelRed = 0;
- uint16 currentScreenPixelGreen = 0;
- uint16 currentScreenPixelBlue = 0;
-
- uint16 targetScreenPixelRed = 0;
- uint16 targetScreenPixelGreen = 0;
- uint16 targetScreenPixelBlue = 0;
-
- uint16 screenWidth = this->w();
- uint16 screenHeight = this->h();
- uint16 screenX = 0;
- uint16 screenY = 0;
- uint16 pixelsChanged = 0;
-
- _dirtyRects.clear();
-
- do {
- pixelsChanged = 0;
- uint16 *currentScreenPtr = currentScreenBasePtr;
- uint16 *targetScreenPtr = targetScreenBasePtr;
-
- for (screenY = 0; screenY < screenHeight; screenY++) {
- for (screenX = 0; screenX < screenWidth; screenX++) {
- currentScreenPixel = *currentScreenPtr;
- targetScreenPixel = *targetScreenPtr;
-
- if (currentScreenPixel != targetScreenPixel) {
- // pixel doesn't match, adjust accordingly
- currentScreenPixelRed = currentScreenPixel & 0xF800;
- currentScreenPixelGreen = currentScreenPixel & 0x07E0;
- currentScreenPixelBlue = currentScreenPixel & 0x001F;
- targetScreenPixelRed = targetScreenPixel & 0xF800;
- targetScreenPixelGreen = targetScreenPixel & 0x07E0;
- targetScreenPixelBlue = targetScreenPixel & 0x001F;
-
- if (currentScreenPixelRed != targetScreenPixelRed) {
- if (currentScreenPixelRed < targetScreenPixelRed) {
- currentScreenPixelRed += 0x0800;
- } else {
- currentScreenPixelRed -= 0x0800;
- }
- }
- if (currentScreenPixelGreen != targetScreenPixelGreen) {
- // Adjust +2/-2 because we are running RGB555 at RGB565
- if (currentScreenPixelGreen < targetScreenPixelGreen) {
- currentScreenPixelGreen += 0x0040;
- } else {
- currentScreenPixelGreen -= 0x0040;
- }
- }
- if (currentScreenPixelBlue != targetScreenPixelBlue) {
- if (currentScreenPixelBlue < targetScreenPixelBlue) {
- currentScreenPixelBlue += 0x0001;
- } else {
- currentScreenPixelBlue -= 0x0001;
- }
- }
- *currentScreenPtr = currentScreenPixelRed | currentScreenPixelGreen | currentScreenPixelBlue;
- pixelsChanged++;
- }
-
- currentScreenPtr++;
- targetScreenPtr++;
- }
- }
-
- // Too much considered dirty at the moment
- addDirtyRect(Common::Rect(0, 0, screenWidth, screenHeight));
-
- events.pollEvents();
- events.delay(10 * speed);
- } while ((pixelsChanged) && (!_vm->shouldQuit()));
-}
-
-void Screen::blitFrom3DOcolorLimit(uint16 limitColor) {
- uint16 *currentScreenPtr = (uint16 *)getPixels();
- uint16 *targetScreenPtr = (uint16 *)_backBuffer->getPixels();
- uint16 currentScreenPixel = 0;
-
- uint16 screenWidth = this->w();
- uint16 screenHeight = this->h();
- uint16 screenX = 0;
- uint16 screenY = 0;
-
- uint16 currentScreenPixelRed = 0;
- uint16 currentScreenPixelGreen = 0;
- uint16 currentScreenPixelBlue = 0;
-
- uint16 limitPixelRed = limitColor & 0xF800;
- uint16 limitPixelGreen = limitColor & 0x07E0;
- uint16 limitPixelBlue = limitColor & 0x001F;
-
- for (screenY = 0; screenY < screenHeight; screenY++) {
- for (screenX = 0; screenX < screenWidth; screenX++) {
- currentScreenPixel = *targetScreenPtr;
-
- currentScreenPixelRed = currentScreenPixel & 0xF800;
- currentScreenPixelGreen = currentScreenPixel & 0x07E0;
- currentScreenPixelBlue = currentScreenPixel & 0x001F;
-
- if (currentScreenPixelRed < limitPixelRed)
- currentScreenPixelRed = limitPixelRed;
- if (currentScreenPixelGreen < limitPixelGreen)
- currentScreenPixelGreen = limitPixelGreen;
- if (currentScreenPixelBlue < limitPixelBlue)
- currentScreenPixelBlue = limitPixelBlue;
-
- *currentScreenPtr = currentScreenPixelRed | currentScreenPixelGreen | currentScreenPixelBlue;
- currentScreenPtr++;
- targetScreenPtr++;
- }
- }
-
- // Too much considered dirty at the moment
- addDirtyRect(Common::Rect(0, 0, screenWidth, screenHeight));
-}
-
void Screen::restoreBackground(const Common::Rect &r) {
if (r.width() > 0 && r.height() > 0)
- _backBuffer1.blitFrom(_backBuffer2, Common::Point(r.left, r.top), r);
+ _backBuffer->blitFrom(_backBuffer2, Common::Point(r.left, r.top), r);
}
void Screen::slamArea(int16 xp, int16 yp, int16 width, int16 height) {
@@ -460,7 +338,7 @@ void Screen::blockMove() {
blockMove(Common::Rect(0, 0, w(), h()));
}
-void Screen::print(const Common::Point &pt, byte color, const char *formatStr, ...) {
+void Screen::print(const Common::Point &pt, uint color, const char *formatStr, ...) {
// Create the string to display
va_list args;
va_start(args, formatStr);
@@ -488,7 +366,7 @@ void Screen::print(const Common::Point &pt, byte color, const char *formatStr, .
slamRect(textBounds);
}
-void Screen::gPrint(const Common::Point &pt, byte color, const char *formatStr, ...) {
+void Screen::gPrint(const Common::Point &pt, uint color, const char *formatStr, ...) {
// Create the string to display
va_list args;
va_start(args, formatStr);
@@ -499,7 +377,7 @@ void Screen::gPrint(const Common::Point &pt, byte color, const char *formatStr,
writeString(str, pt, color);
}
-void Screen::writeString(const Common::String &str, const Common::Point &pt, byte overrideColor) {
+void Screen::writeString(const Common::String &str, const Common::Point &pt, uint overrideColor) {
Fonts::writeString(_backBuffer, str, pt, overrideColor);
}
diff --git a/engines/sherlock/screen.h b/engines/sherlock/screen.h
index 2e0cef72ca..04a0c1e505 100644
--- a/engines/sherlock/screen.h
+++ b/engines/sherlock/screen.h
@@ -35,22 +35,12 @@ namespace Sherlock {
#define PALETTE_COUNT 256
#define VGA_COLOR_TRANS(x) ((x) * 255 / 63)
#define BG_GREYSCALE_RANGE_END 229
-
-enum {
- BLACK = 0,
- INFO_BLACK = 1,
- BORDER_COLOR = 237,
- COMMAND_BACKGROUND = 4,
- BUTTON_BACKGROUND = 235,
- TALK_FOREGROUND = 12,
- TALK_NULL = 16
-};
+#define BLACK 0
class SherlockEngine;
class Screen : public Surface {
private:
- SherlockEngine *_vm;
Common::List<Common::Rect> _dirtyRects;
uint32 _transitionSeed;
Surface _sceneSurface;
@@ -69,6 +59,13 @@ private:
*/
bool unionRectangle(Common::Rect &destRect, const Common::Rect &src1, const Common::Rect &src2);
protected:
+ SherlockEngine *_vm;
+
+ /**
+ * Clear the current dirty rects list
+ */
+ void clearDirtyRects() { _dirtyRects.clear(); }
+
/**
* Adds a rectangle to the list of modified areas of the screen during the
* current frame
@@ -94,7 +91,7 @@ public:
void update();
/**
- * Makes the whole screen dirty, Hack for 3DO movie playing
+ * Makes the whole screen dirty
*/
void makeAllDirty();
@@ -134,22 +131,15 @@ public:
void verticalTransition();
/**
- * Fade backbuffer 1 into screen (3DO RGB!)
- */
- void fadeIntoScreen3DO(int speed);
-
- void blitFrom3DOcolorLimit(uint16 color);
-
- /**
* Prints the text passed onto the back buffer at the given position and color.
* The string is then blitted to the screen
*/
- void print(const Common::Point &pt, byte color, const char *formatStr, ...) GCC_PRINTF(4, 5);
+ void print(const Common::Point &pt, uint color, const char *formatStr, ...) GCC_PRINTF(4, 5);
/**
* Print a strings onto the back buffer without blitting it to the screen
*/
- void gPrint(const Common::Point &pt, byte color, const char *formatStr, ...) GCC_PRINTF(4, 5);
+ void gPrint(const Common::Point &pt, uint color, const char *formatStr, ...) GCC_PRINTF(4, 5);
/**
* Copies a section of the second back buffer into the main back buffer
@@ -223,7 +213,7 @@ public:
/**
* Draws the given string into the back buffer using the images stored in _font
*/
- virtual void writeString(const Common::String &str, const Common::Point &pt, byte overrideColor);
+ virtual void writeString(const Common::String &str, const Common::Point &pt, uint overrideColor);
// Rose Tattoo specific methods
diff --git a/engines/sherlock/sherlock.cpp b/engines/sherlock/sherlock.cpp
index ae77c91009..d09fd0b270 100644
--- a/engines/sherlock/sherlock.cpp
+++ b/engines/sherlock/sherlock.cpp
@@ -51,6 +51,7 @@ SherlockEngine::SherlockEngine(OSystem *syst, const SherlockGameDescription *gam
_canLoadSave = false;
_showOriginalSavesDialog = false;
_interactiveFl = true;
+ _isScreenDoubled = false;
}
SherlockEngine::~SherlockEngine() {
@@ -237,7 +238,7 @@ void SherlockEngine::loadConfig() {
void SherlockEngine::saveConfig() {
ConfMan.setBool("mute", !_sound->_digitized);
ConfMan.setBool("music_mute", !_music->_musicOn);
- ConfMan.setBool("speech_mute", !_sound->_voices);
+ ConfMan.setBool("speech_mute", !_sound->_speechOn);
ConfMan.setInt("font", _screen->fontNumber());
ConfMan.setBool("fade_style", _screen->_fadeStyle);
diff --git a/engines/sherlock/sherlock.h b/engines/sherlock/sherlock.h
index c05680eb08..b85321c385 100644
--- a/engines/sherlock/sherlock.h
+++ b/engines/sherlock/sherlock.h
@@ -80,6 +80,7 @@ class Resource;
class SherlockEngine : public Engine {
private:
+\
/**
* Main loop for displaying a scene and handling all that occurs within it
*/
@@ -133,6 +134,7 @@ public:
bool _canLoadSave;
bool _showOriginalSavesDialog;
bool _interactiveFl;
+ bool _isScreenDoubled;
public:
SherlockEngine(OSystem *syst, const SherlockGameDescription *gameDesc);
virtual ~SherlockEngine();
diff --git a/engines/sherlock/sound.cpp b/engines/sherlock/sound.cpp
index fd51462bc0..56ac2a5d9a 100644
--- a/engines/sherlock/sound.cpp
+++ b/engines/sherlock/sound.cpp
@@ -90,7 +90,7 @@ Sound::Sound(SherlockEngine *vm, Audio::Mixer *mixer) : _vm(vm), _mixer(mixer) {
void Sound::syncSoundSettings() {
_digitized = !ConfMan.getBool("mute");
_speechOn = !ConfMan.getBool("mute") && !ConfMan.getBool("speech_mute");
- _voices = _speechOn ? 1 : 0;
+ _voices = _digitized ? 1 : 0;
}
void Sound::loadSound(const Common::String &name, int priority) {
@@ -123,25 +123,9 @@ byte Sound::decodeSample(byte sample, byte &reference, int16 &scale) {
bool Sound::playSound(const Common::String &name, WaitType waitType, int priority, const char *libraryFilename) {
stopSound();
- Common::String filename = name;
- if (!filename.contains('.')) {
- if (!IS_3DO) {
- if (IS_SERRATED_SCALPEL) {
- filename += ".SND";
- } else {
- filename += ".WAV";
- }
- } else {
- // 3DO uses .aiff extension
- filename += ".AIFF";
- if (!filename.contains('/')) {
- // if no directory was given, use the room sounds directory
- filename = "rooms/sounds/" + filename;
- }
- }
- }
+ Common::String filename = formFilename(name);
- Audio::SoundHandle soundHandle = (IS_SERRATED_SCALPEL) ? _scalpelEffectsHandle : getFreeSoundHandle();
+ Audio::SoundHandle &soundHandle = (IS_SERRATED_SCALPEL) ? _scalpelEffectsHandle : getFreeSoundHandle();
if (!playSoundResource(filename, libraryFilename, Audio::Mixer::kSFXSoundType, soundHandle))
error("Could not find sound resource - %s", filename.c_str());
@@ -168,6 +152,53 @@ bool Sound::playSound(const Common::String &name, WaitType waitType, int priorit
return retval;
}
+Common::String Sound::formFilename(const Common::String &name) {
+ Common::String filename = name;
+
+ if (!filename.contains('.')) {
+ if (!IS_3DO) {
+ if (IS_SERRATED_SCALPEL) {
+ filename += ".SND";
+ } else {
+ filename += ".WAV";
+ }
+ } else {
+ // 3DO uses .aiff extension
+ filename += ".AIFF";
+ if (!filename.contains('/')) {
+ // if no directory was given, use the room sounds directory
+ filename = "rooms/sounds/" + filename;
+ }
+ }
+ }
+
+ return filename;
+}
+
+void Sound::playAiff(const Common::String &name, int volume, bool loop) {
+ Common::File *file = new Common::File();
+ if (!file->open(name)) {
+ delete file;
+ return;
+ }
+ Audio::AudioStream *stream;
+ Audio::RewindableAudioStream *audioStream = Audio::makeAIFFStream(file, DisposeAfterUse::YES);
+ if (loop) {
+ Audio::AudioStream *loopingStream = Audio::makeLoopingAudioStream(audioStream, 0);
+ stream = loopingStream;
+ } else {
+ stream = audioStream;
+ }
+ stopAiff();
+ _mixer->playStream(Audio::Mixer::kSFXSoundType, &_aiffHandle, stream, -1, volume);
+}
+
+void Sound::stopAiff() {
+ if (_mixer->isSoundHandleActive(_aiffHandle)) {
+ _mixer->stopHandle(_aiffHandle);
+ }
+}
+
void Sound::playLoadedSound(int bufNum, WaitType waitType) {
if (IS_SERRATED_SCALPEL) {
if (_mixer->isSoundHandleActive(_scalpelEffectsHandle) && (_curPriority > _vm->_scene->_sounds[bufNum]._priority))
@@ -198,7 +229,7 @@ void Sound::freeDigiSound() {
_soundPlaying = false;
}
-Audio::SoundHandle Sound::getFreeSoundHandle() {
+Audio::SoundHandle &Sound::getFreeSoundHandle() {
for (int i = 0; i < MAX_MIXER_CHANNELS; i++) {
if (!_mixer->isSoundHandleActive(_tattooEffectsHandle[i]))
return _tattooEffectsHandle[i];
@@ -214,29 +245,32 @@ void Sound::setVolume(int volume) {
void Sound::playSpeech(const Common::String &name) {
Resources &res = *_vm->_res;
Scene &scene = *_vm->_scene;
- stopSpeech();
-
- // TODO: Technically Scalpel has an sfx command which I've set to call this method because it sets the
- // _voice variable as if it were speech. Need to do a play-through of Scalpel and see if it's ever called.
- // If so, will need to enhance this method to handle the Serrated Scalpel voice resources
- assert(IS_ROSE_TATTOO);
- // Figure out which speech library to use
- Common::String libraryName = Common::String::format("speech%02d.lib", scene._currentScene);
- if ((!scumm_strnicmp(name.c_str(), "SLVE12S", 7)) || (!scumm_strnicmp(name.c_str(), "WATS12X", 7))
- || (!scumm_strnicmp(name.c_str(), "HOLM12X", 7)))
- libraryName = "SPEECH12.LIB";
+ // Stop any previously playing speech
+ stopSpeech();
- // If the speech library file doesn't even exist, then we can't play anything
- Common::File f;
- if (!f.exists(libraryName))
- return;
+ if (IS_SERRATED_SCALPEL) {
+ Common::String filename = formFilename(name);
+ if (playSoundResource(filename, Common::String(), Audio::Mixer::kSFXSoundType, _speechHandle))
+ _speechPlaying = true;
+ } else {
+ // Figure out which speech library to use
+ Common::String libraryName = Common::String::format("speech%02d.lib", scene._currentScene);
+ if ((!scumm_strnicmp(name.c_str(), "SLVE12S", 7)) || (!scumm_strnicmp(name.c_str(), "WATS12X", 7))
+ || (!scumm_strnicmp(name.c_str(), "HOLM12X", 7)))
+ libraryName = "SPEECH12.LIB";
+
+ // If the speech library file doesn't even exist, then we can't play anything
+ Common::File f;
+ if (!f.exists(libraryName))
+ return;
- // Ensure the given library is in the cache
- res.addToCache(libraryName);
+ // Ensure the given library is in the cache
+ res.addToCache(libraryName);
- if (playSoundResource(name, libraryName, Audio::Mixer::kSpeechSoundType, _speechHandle))
- _speechPlaying = true;
+ if (playSoundResource(name, libraryName, Audio::Mixer::kSpeechSoundType, _speechHandle))
+ _speechPlaying = true;
+ }
}
void Sound::stopSpeech() {
diff --git a/engines/sherlock/sound.h b/engines/sherlock/sound.h
index b2d1584e85..0a0ff83d1f 100644
--- a/engines/sherlock/sound.h
+++ b/engines/sherlock/sound.h
@@ -46,6 +46,7 @@ private:
SherlockEngine *_vm;
Audio::Mixer *_mixer;
Audio::SoundHandle _scalpelEffectsHandle;
+ Audio::SoundHandle _aiffHandle;
Audio::SoundHandle _tattooEffectsHandle[MAX_MIXER_CHANNELS];
Audio::SoundHandle _speechHandle;
int _curPriority;
@@ -60,6 +61,11 @@ private:
*/
bool playSoundResource(const Common::String &name, const Common::String &libFilename,
Audio::Mixer::SoundType soundType, Audio::SoundHandle &handle);
+
+ /**
+ * Form a filename from a passed sound resource name
+ */
+ Common::String formFilename(const Common::String &name);
public:
bool _digitized;
int _voices;
@@ -87,6 +93,16 @@ public:
* Play the sound in the specified resource
*/
bool playSound(const Common::String &name, WaitType waitType, int priority = 100, const char *libraryFilename = nullptr);
+
+ /**
+ * Play the specified AIFF file. (Used for the 3DO Scalpel intro.)
+ */
+ void playAiff(const Common::String &name, int volume = Audio::Mixer::kMaxChannelVolume, bool loop = false);
+
+ /**
+ * Stop the AIFF sound that was started with playAiff().
+ */
+ void stopAiff();
/**
* Play a previously loaded sound
@@ -105,8 +121,14 @@ public:
void freeDigiSound();
- Audio::SoundHandle getFreeSoundHandle();
+ /**
+ * Return a sound handle to use
+ */
+ Audio::SoundHandle &getFreeSoundHandle();
+ /**
+ * Set the volume
+ */
void setVolume(int volume);
/**
diff --git a/engines/sherlock/surface.cpp b/engines/sherlock/surface.cpp
index b56692c704..b7fc76325c 100644
--- a/engines/sherlock/surface.cpp
+++ b/engines/sherlock/surface.cpp
@@ -155,8 +155,8 @@ void Surface::transBlitFromUnscaled(const Graphics::Surface &src, const Common::
return;
if (flipped)
- drawRect = Common::Rect(src.w - drawRect.right, src.h - drawRect.bottom,
- src.w - drawRect.left, src.h - drawRect.top);
+ drawRect = Common::Rect(src.w - drawRect.right, drawRect.top,
+ src.w - drawRect.left, drawRect.bottom);
Common::Point destPt(destRect.left, destRect.top);
addDirtyRect(Common::Rect(destPt.x, destPt.y, destPt.x + drawRect.width(),
@@ -201,33 +201,33 @@ void Surface::transBlitFromUnscaled(const Graphics::Surface &src, const Common::
}
}
-void Surface::fillRect(int x1, int y1, int x2, int y2, byte color) {
+void Surface::fillRect(int x1, int y1, int x2, int y2, uint color) {
fillRect(Common::Rect(x1, y1, x2, y2), color);
}
-void Surface::fillRect(const Common::Rect &r, byte color) {
+void Surface::fillRect(const Common::Rect &r, uint color) {
_surface.fillRect(r, color);
addDirtyRect(r);
}
-void Surface::fill(uint16 color) {
- _surface.fillRect(Common::Rect(_surface.w, _surface.h), color);
+void Surface::fill(uint color) {
+ fillRect(Common::Rect(_surface.w, _surface.h), color);
}
bool Surface::clip(Common::Rect &srcBounds, Common::Rect &destBounds) {
- if (destBounds.left >= _surface.w || destBounds.top >= _surface.h ||
+ if (destBounds.left >= w() || destBounds.top >= h() ||
destBounds.right <= 0 || destBounds.bottom <= 0)
return false;
// Clip the bounds if necessary to fit on-screen
- if (destBounds.right > _surface.w) {
- srcBounds.right -= destBounds.right - _surface.w;
- destBounds.right = _surface.w;
+ if (destBounds.right > w()) {
+ srcBounds.right -= destBounds.right - w();
+ destBounds.right = w();
}
- if (destBounds.bottom > _surface.h) {
- srcBounds.bottom -= destBounds.bottom - _surface.h;
- destBounds.bottom = _surface.h;
+ if (destBounds.bottom > h()) {
+ srcBounds.bottom -= destBounds.bottom - h();
+ destBounds.bottom = h();
}
if (destBounds.top < 0) {
@@ -244,7 +244,7 @@ bool Surface::clip(Common::Rect &srcBounds, Common::Rect &destBounds) {
}
void Surface::clear() {
- fillRect(Common::Rect(0, 0, _surface.w, _surface.h), 0);
+ fillRect(Common::Rect(0, 0, w(), h()), 0);
}
void Surface::free() {
@@ -262,11 +262,11 @@ void Surface::setPixels(byte *pixels, int width, int height, Graphics::PixelForm
_surface.setPixels(pixels);
}
-void Surface::writeString(const Common::String &str, const Common::Point &pt, byte overrideColor) {
+void Surface::writeString(const Common::String &str, const Common::Point &pt, uint overrideColor) {
Fonts::writeString(this, str, pt, overrideColor);
}
-void Surface::writeFancyString(const Common::String &str, const Common::Point &pt, byte overrideColor1, byte overrideColor2) {
+void Surface::writeFancyString(const Common::String &str, const Common::Point &pt, uint overrideColor1, uint overrideColor2) {
writeString(str, Common::Point(pt.x, pt.y), overrideColor1);
writeString(str, Common::Point(pt.x + 1, pt.y), overrideColor1);
writeString(str, Common::Point(pt.x + 2, pt.y), overrideColor1);
diff --git a/engines/sherlock/surface.h b/engines/sherlock/surface.h
index 385fb1793e..378c9be9cd 100644
--- a/engines/sherlock/surface.h
+++ b/engines/sherlock/surface.h
@@ -40,30 +40,32 @@ private:
bool _freePixels;
/**
+ * Copy a surface into this one
+ */
+ void blitFrom(const Graphics::Surface &src);
+protected:
+ Graphics::Surface _surface;
+
+ /**
* Clips the given source bounds so the passed destBounds will be entirely on-screen
*/
bool clip(Common::Rect &srcBounds, Common::Rect &destBounds);
/**
- * Copy a surface into this one
+ * Base method stub for signalling dirty rect areas
*/
- void blitFrom(const Graphics::Surface &src);
+ virtual void addDirtyRect(const Common::Rect &r) {}
/**
* Draws a sub-section of a surface at a given position within this surface
*/
- void blitFrom(const Graphics::Surface &src, const Common::Point &pt, const Common::Rect &srcBounds);
+ virtual void blitFrom(const Graphics::Surface &src, const Common::Point &pt, const Common::Rect &srcBounds);
/**
* Draws a surface at a given position within this surface with transparency
*/
- void transBlitFromUnscaled(const Graphics::Surface &src, const Common::Point &pt, bool flipped,
+ virtual void transBlitFromUnscaled(const Graphics::Surface &src, const Common::Point &pt, bool flipped,
int overrideColor);
-
-protected:
- Graphics::Surface _surface;
-
- virtual void addDirtyRect(const Common::Rect &r) {}
public:
Surface(uint16 width, uint16 height);
Surface();
@@ -133,14 +135,14 @@ public:
/**
* Fill a given area of the surface with a given color
*/
- void fillRect(int x1, int y1, int x2, int y2, byte color);
+ void fillRect(int x1, int y1, int x2, int y2, uint color);
/**
* Fill a given area of the surface with a given color
*/
- void fillRect(const Common::Rect &r, byte color);
+ virtual void fillRect(const Common::Rect &r, uint color);
- void fill(uint16 color);
+ void fill(uint color);
/**
* Clear the surface
@@ -165,18 +167,18 @@ public:
/**
* Draws the given string into the back buffer using the images stored in _font
*/
- virtual void writeString(const Common::String &str, const Common::Point &pt, byte overrideColor);
- void writeFancyString(const Common::String &str, const Common::Point &pt, byte overrideColor1, byte overrideColor2);
+ virtual void writeString(const Common::String &str, const Common::Point &pt, uint overrideColor);
+ void writeFancyString(const Common::String &str, const Common::Point &pt, uint overrideColor1, uint overrideColor2);
- inline uint16 w() const { return _surface.w; }
- inline uint16 h() const { return _surface.h; }
+ inline virtual uint16 w() const { return _surface.w; }
+ inline virtual uint16 h() const { return _surface.h; }
inline const byte *getPixels() const { return (const byte *)_surface.getPixels(); }
inline byte *getPixels() { return (byte *)_surface.getPixels(); }
inline byte *getBasePtr(int x, int y) { return (byte *)_surface.getBasePtr(x, y); }
inline const byte *getBasePtr(int x, int y) const { return (const byte *)_surface.getBasePtr(x, y); }
inline Graphics::Surface &getRawSurface() { return _surface; }
- inline void hLine(int x, int y, int x2, uint32 color) { _surface.hLine(x, y, x2, color); }
- inline void vLine(int x, int y, int y2, uint32 color) { _surface.vLine(x, y, y2, color); }
+ inline void hLine(int x, int y, int x2, uint color) { _surface.hLine(x, y, x2, color); }
+ inline void vLine(int x, int y, int y2, uint color) { _surface.vLine(x, y, y2, color); }
};
} // End of namespace Sherlock
diff --git a/engines/sherlock/talk.cpp b/engines/sherlock/talk.cpp
index fa00b9d715..e9c52276f6 100644
--- a/engines/sherlock/talk.cpp
+++ b/engines/sherlock/talk.cpp
@@ -569,14 +569,13 @@ void Talk::loadTalkFile(const Common::String &filename) {
// Create the base of the sound filename used for talking in Rose Tattoo
if (IS_ROSE_TATTOO && _scriptMoreFlag != 1)
sound._talkSoundFile = Common::String(filename.c_str(), filename.c_str() + 7) + ".";
- else if (IS_3DO)
- _3doSpeechIndex = 1;
// Open the talk file for reading
Common::SeekableReadStream *talkStream = res.load(talkFile);
_converseNum = res.resourceIndex();
talkStream->skip(2); // Skip talk file version num
+ _statements.clear();
_statements.resize(talkStream->readByte());
for (uint idx = 0; idx < _statements.size(); ++idx)
_statements[idx].load(*talkStream, IS_ROSE_TATTOO);
@@ -599,7 +598,7 @@ void Talk::stripVoiceCommands() {
// rest of the name following it
statement._reply = Common::String(statement._reply.c_str(),
statement._reply.c_str() + idx) + " " +
- Common::String(statement._reply.c_str() + 9);
+ Common::String(statement._reply.c_str() + idx + 9);
}
}
@@ -753,6 +752,22 @@ void Talk::doScript(const Common::String &script) {
while (*str++ != '}')
;
} else if (isOpcode(c)) {
+ // the original interpreter checked for c being >= 0x80
+ // and if that is the case, it tried to process it as opcode, BUT ALSO ALWAYS skipped over it
+ // This was done inside the Spanish + German interpreters of Serrated Scalpel, not the original
+ // English interpreter (reverse engineered from the binaries).
+ //
+ // This resulted in special characters not getting shown in case they occurred at the start
+ // of sentences like for example the inverted exclamation mark and the inverted question mark.
+ // For further study see fonts.cpp
+ //
+ // We create an inverted exclamation mark for the Spanish version and we show it.
+ //
+ // Us not skipping over those characters may result in an assert() happening inside fonts.cpp
+ // in case more invalid characters exist.
+ // More information see bug #6931
+ //
+
// Handle control code
switch ((this->*_opcodeTable[c - _opcodes[0]])(str)) {
case RET_EXIT:
@@ -832,7 +847,7 @@ int Talk::waitForMore(int delay) {
playingSpeech = sound.isSpeechPlaying();
do {
- if (IS_SERRATED_SCALPEL && sound._speechOn && !sound.isSpeechPlaying())
+ if (IS_SERRATED_SCALPEL && playingSpeech && !sound.isSpeechPlaying())
people._portrait._frameNumber = -1;
scene.doBgAnim();
@@ -876,7 +891,7 @@ int Talk::waitForMore(int delay) {
} while (!_vm->shouldQuit() && key2 == 254 && (delay || (playingSpeech && sound.isSpeechPlaying()))
&& !events._released && !events._rightReleased);
- // If voices was set 2 to indicate a voice file was place, then reset it back to 1
+ // If voices was set 2 to indicate a Scalpel voice file was playing, then reset it back to 1
if (sound._voices == 2)
sound._voices = 1;
@@ -1025,6 +1040,7 @@ OpcodeReturn Talk::cmdEndTextWindow(const byte *&str) {
OpcodeReturn Talk::cmdHolmesOff(const byte *&str) {
People &people = *_vm->_people;
people[HOLMES]._type = REMOVE;
+ people._holmesOn = false;
return RET_SUCCESS;
}
@@ -1032,6 +1048,7 @@ OpcodeReturn Talk::cmdHolmesOff(const byte *&str) {
OpcodeReturn Talk::cmdHolmesOn(const byte *&str) {
People &people = *_vm->_people;
people[HOLMES]._type = CHARACTER;
+ people._holmesOn = true;
return RET_SUCCESS;
}
@@ -1179,7 +1196,7 @@ void Talk::talkWait(const byte *&str) {
_endStr = true;
// If a key was pressed to finish the window, see if further voice files should be skipped
- if (_wait >= 0 && _wait < 254) {
+ if (IS_SERRATED_SCALPEL && _wait >= 0 && _wait < 254) {
if (str[0] == _opcodes[OP_SFX_COMMAND])
str += 9;
}
diff --git a/engines/sherlock/talk.h b/engines/sherlock/talk.h
index a22a39db94..2c0da24d69 100644
--- a/engines/sherlock/talk.h
+++ b/engines/sherlock/talk.h
@@ -215,10 +215,10 @@ protected:
OpcodeReturn cmdWalkToCAnimation(const byte *&str);
protected:
/**
- * Checks, if a character is an opcode
+ * Checks if a character is an opcode
*/
bool isOpcode(byte checkCharacter);
-
+
/**
* Form a table of the display indexes for statements
*/
@@ -228,7 +228,7 @@ protected:
* When the talk window has been displayed, waits a period of time proportional to
* the amount of text that's been displayed
*/
- int waitForMore(int delay);
+ virtual int waitForMore(int delay);
/**
* Display the talk interface window
@@ -308,7 +308,7 @@ public:
* Opens the talk file 'talk.tlk' and searches the index for the specified
* conversation. If found, the data for that conversation is loaded
*/
- void loadTalkFile(const Common::String &filename);
+ virtual void loadTalkFile(const Common::String &filename);
/**
* Push the sequence of a background object that's an NPC that needs to be
diff --git a/engines/sherlock/tattoo/tattoo.cpp b/engines/sherlock/tattoo/tattoo.cpp
index bfb35565bc..3131df7649 100644
--- a/engines/sherlock/tattoo/tattoo.cpp
+++ b/engines/sherlock/tattoo/tattoo.cpp
@@ -65,10 +65,15 @@ void TattooEngine::initialize() {
_res->addToCache("walk.lib");
// Set up list of people
+ TattooFixedText &fixedText = *(TattooFixedText *)_fixedText;
+ const char *peopleNamePtr = nullptr;
+
for (int idx = 0; idx < TATTOO_MAX_PEOPLE; ++idx) {
+ peopleNamePtr = fixedText.getText(PEOPLE_DATA[idx].fixedTextId);
+
_people->_characters.push_back(PersonData(
- getLanguage() == Common::FR_FRA ? FRENCH_NAMES[idx] : ENGLISH_NAMES[idx],
- PORTRAITS[idx], nullptr, nullptr));
+ peopleNamePtr,
+ PEOPLE_DATA[idx].portrait, nullptr, nullptr));
}
// Load the inventory
diff --git a/engines/sherlock/tattoo/tattoo_darts.cpp b/engines/sherlock/tattoo/tattoo_darts.cpp
index cb4b52b01a..512358933d 100644
--- a/engines/sherlock/tattoo/tattoo_darts.cpp
+++ b/engines/sherlock/tattoo/tattoo_darts.cpp
@@ -30,7 +30,8 @@ namespace Tattoo {
enum {
DART_COLOR_FORE = 5,
- PLAYER_COLOR = 11
+ PLAYER_COLOR = 11,
+ DART_BAR_FORE = 208
};
static const int STATUS_INFO_X = 430;
@@ -69,6 +70,7 @@ Darts::Darts(SherlockEngine *vm) : _vm(vm) {
_handX = 0;
_compPlay = 1;
_escapePressed = false;
+ _spacing = 0;
}
void Darts::playDarts(GameType gameType) {
@@ -77,7 +79,6 @@ void Darts::playDarts(GameType gameType) {
Screen &screen = *_vm->_screen;
int oldFontType = screen.fontNumber();
int playerNum = 0;
- int roundStart, score;
int lastDart;
int numHits = 0;
bool gameOver = false;
@@ -90,8 +91,10 @@ void Darts::playDarts(GameType gameType) {
// Load dart graphics and initialize values
loadDarts();
initDarts();
+ events.hideCursor();
while (!done && !_vm->shouldQuit()) {
+ int roundStart, score;
roundStart = score = (playerNum == 0) ? _score1 : _score2;
showNames(playerNum);
@@ -143,7 +146,6 @@ void Darts::playDarts(GameType gameType) {
} else {
// check for cricket game over
bool allClosed = true;
- int nOtherScore;
for (int y = 0; y < 7; y++) {
if (_cricketScore[playerNum][y] < 3)
@@ -151,7 +153,7 @@ void Darts::playDarts(GameType gameType) {
}
if (allClosed) {
- nOtherScore = (playerNum == 0) ? _score2 : _score1;
+ int nOtherScore = (playerNum == 0) ? _score2 : _score1;
if (score >= nOtherScore)
gameOver = true;
}
@@ -416,7 +418,7 @@ void Darts::erasePowerBars() {
bool Darts::dartHit() {
Events &events = *_vm->_events;
- events.pollEventsAndWait();
+ events.pollEvents();
events.setButtonState();
// Keyboard check
@@ -441,10 +443,7 @@ int Darts::doPowerBar(const Common::Point &pt, byte color, int goToPower, int or
events.clearEvents();
events.delay(100);
- while (!_vm->shouldQuit()) {
- if (idx >= DART_BAR_SIZE)
- break;
-
+ while (!_vm->shouldQuit() && idx < DART_BAR_SIZE) {
if ((goToPower - 1) == idx)
break;
else if (goToPower == 0) {
@@ -492,11 +491,8 @@ int Darts::drawHand(int goToPower, int computer) {
Common::Point pt(DARTBOARD_LEFT - HAND_OFFSET[hand], SHERLOCK_SCREEN_HEIGHT - _handSize.y);
int x = 0;
- while (!_vm->shouldQuit()) {
- if (x >= DARTBOARD_WIDTH)
- break;
-
- if ((goToPower - 1) == x)
+ while (!_vm->shouldQuit() && x < DARTBOARD_WIDTH) {
+ if (computer && x >= (goToPower - 1))
break;
else if (goToPower == 0) {
if (dartHit())
@@ -561,22 +557,20 @@ void Darts::drawDartThrow(const Common::Point &dartPos, int computer) {
Events &events = *_vm->_events;
Screen &screen = *_vm->_screen;
int cx, cy;
- int handCy;
- int drawX = 0, drawY = 0, oldDrawX = 0, oldDrawY = 0;
int xSize = 0, ySize = 0, oldxSize = 0, oldySize = 0;
- int handOCx, handOCy;
- int ocx, ocy;
+ int handOCx = 0, handOCy = 0;
+ int ocx = 0, ocy = 0;
int handOldxSize, handOldySize;
int delta = 9;
int dartNum;
int hddy;
+ Common::Point drawPos, oldDrawPos;
// Draw the animation of the hand throwing the dart first
// See which hand animation to use
ImageFile &hands = !computer ? *_hand1 : *_hand2;
int numFrames = !computer ? 14 : 13;
- ocx = ocy = handOCx = handOCy = 0;
oldxSize = oldySize = handOldxSize = handOldySize = 1;
cx = dartPos.x;
cy = SHERLOCK_SCREEN_HEIGHT - _handSize.y - 20;
@@ -590,7 +584,7 @@ void Darts::drawDartThrow(const Common::Point &dartPos, int computer) {
for (int idx = 0; idx < numFrames; ++idx) {
_handSize.x = hands[idx]._offset.x + hands[idx]._width;
_handSize.y = hands[idx]._offset.y + hands[idx]._height;
- handCy = SHERLOCK_SCREEN_HEIGHT - _handSize.y;
+ int handCy = SHERLOCK_SCREEN_HEIGHT - _handSize.y;
screen._backBuffer1.transBlitFrom(hands[idx], Common::Point(_handX, handCy));
screen.slamArea(_handX, handCy, _handSize.x + 1, _handSize.y);
@@ -610,37 +604,37 @@ void Darts::drawDartThrow(const Common::Point &dartPos, int computer) {
xSize = (*_dartGraphics)[dartNum]._width;
ySize = (*_dartGraphics)[dartNum]._height;
- ocx = drawX = cx - (*_dartGraphics)[dartNum]._width / 2;
- ocy = drawY = cy - (*_dartGraphics)[dartNum]._height;
+ ocx = drawPos.x = cx - (*_dartGraphics)[dartNum]._width / 2;
+ ocy = drawPos.y = cy - (*_dartGraphics)[dartNum]._height;
// Draw dart
- screen._backBuffer1.transBlitFrom((*_dartGraphics)[dartNum], dartPos);
+ screen._backBuffer1.transBlitFrom((*_dartGraphics)[dartNum], drawPos);
- if (drawX < 0) {
- xSize += drawX;
+ if (drawPos.x < 0) {
+ xSize += drawPos.x;
if (xSize < 0)
xSize = 1;
- drawX = 0;
+ drawPos.x = 0;
}
- if (drawY < 0) {
- ySize += drawY;
+ if (drawPos.y < 0) {
+ ySize += drawPos.y;
if (ySize < 0)
ySize = 1;
- drawY = 0;
+ drawPos.y = 0;
}
// Flush the drawn dart to the screen
- screen.slamArea(drawX, drawY, xSize, ySize);
- if (oldDrawX != -1)
+ screen.slamArea(drawPos.x, drawPos.y, xSize, ySize);
+ if (oldDrawPos.x != -1)
// Flush the erased dart area
- screen.slamArea(oldDrawX, oldDrawY, oldxSize, oldySize);
+ screen.slamArea(oldDrawPos.x, oldDrawPos.y, oldxSize, oldySize);
- screen._backBuffer1.blitFrom(screen._backBuffer2, Common::Point(drawX, drawY),
- Common::Rect(drawX, drawY, drawX + xSize, drawY + ySize));
+ screen._backBuffer1.blitFrom(screen._backBuffer2, Common::Point(drawPos.x, drawPos.y),
+ Common::Rect(drawPos.x, drawPos.y, drawPos.x + xSize, drawPos.y + ySize));
- oldDrawX = drawX;
- oldDrawY = drawY;
+ oldDrawPos.x = drawPos.x;
+ oldDrawPos.y = drawPos.y;
oldxSize = xSize;
oldySize = ySize;
@@ -654,15 +648,15 @@ void Darts::drawDartThrow(const Common::Point &dartPos, int computer) {
screen.slamArea(handOCx, handOCy, handOldxSize, handOldySize);
// Erase the old dart
- if (oldDrawX != -1)
- screen.slamArea(oldDrawX, oldDrawY, oldxSize, oldySize);
+ if (oldDrawPos.x != -1)
+ screen.slamArea(oldDrawPos.x, oldDrawPos.y, oldxSize, oldySize);
- screen._backBuffer1.blitFrom(screen._backBuffer2, Common::Point(drawX, drawY),
- Common::Rect(drawX, drawY, drawX + xSize, drawY + ySize));
+ screen._backBuffer1.blitFrom(screen._backBuffer2, Common::Point(drawPos.x, drawPos.y),
+ Common::Rect(drawPos.x, drawPos.y, drawPos.x + xSize, drawPos.y + ySize));
cx = dartPos.x;
cy = dartPos.y + 2;
- oldDrawX = oldDrawY = -1;
+ oldDrawPos.x = oldDrawPos.y = -1;
for (int idx = 5; idx <= 23; ++idx) {
dartNum = idx - 4;
@@ -680,38 +674,37 @@ void Darts::drawDartThrow(const Common::Point &dartPos, int computer) {
xSize = (*_dartGraphics)[dartNum]._width;
ySize = (*_dartGraphics)[dartNum]._height;
- ocx = drawX = cx - (*_dartGraphics)[dartNum]._width / 2;
- ocy = drawY = cy - (*_dartGraphics)[dartNum]._height;
+ ocx = drawPos.x = cx - (*_dartGraphics)[dartNum]._width / 2;
+ ocy = drawPos.y = cy - (*_dartGraphics)[dartNum]._height;
- screen._backBuffer1.transBlitFrom((*_dartGraphics)[dartNum], Common::Point(drawX, drawY));
+ screen._backBuffer1.transBlitFrom((*_dartGraphics)[dartNum], Common::Point(drawPos.x, drawPos.y));
- if (drawX < 0) {
- xSize += drawX;
+ if (drawPos.x < 0) {
+ xSize += drawPos.x;
if (xSize < 0)
xSize = 1;
- drawX = 0;
+ drawPos.x = 0;
}
- if (drawY < 0) {
- ySize += drawY;
+ if (drawPos.y < 0) {
+ ySize += drawPos.y;
if (ySize < 0)
ySize = 1;
- drawY = 0;
+ drawPos.y = 0;
}
// flush the dart
- screen.slamArea(drawX, drawY, xSize, ySize);
- if (oldDrawX != -1)
- screen.slamArea(oldDrawX, oldDrawY, oldxSize, oldySize);
+ screen.slamArea(drawPos.x, drawPos.y, xSize, ySize);
+ if (oldDrawPos.x != -1)
+ screen.slamArea(oldDrawPos.x, oldDrawPos.y, oldxSize, oldySize);
if (idx != 23)
- screen._backBuffer1.blitFrom(screen._backBuffer2, Common::Point(drawX, drawY),
- Common::Rect(drawX, drawY, drawX + xSize, drawY + ySize)); // erase dart
+ screen._backBuffer1.blitFrom(screen._backBuffer2, drawPos,
+ Common::Rect(drawPos.x, drawPos.y, drawPos.x + xSize, drawPos.y + ySize)); // erase dart
events.wait(1);
- oldDrawX = drawX;
- oldDrawY = drawY;
+ oldDrawPos = drawPos;
oldxSize = xSize;
oldySize = ySize;
}
@@ -787,8 +780,6 @@ void Darts::getComputerNumber(int playerNum, Common::Point &targetPos) {
int score;
int aim = 0;
Common::Point pt;
- bool done = false;
- int cricketaimset = false;
bool shootBull = false;
score = (playerNum == 0) ? _score1 : _score2;
@@ -799,6 +790,7 @@ void Darts::getComputerNumber(int playerNum, Common::Point &targetPos) {
if(score > 60)
shootBull = true;
} else {
+ bool cricketaimset = false;
if (_cricketScore[playerNum][6] < 3) {
// shoot at bull first
aim = CRICKET_VALUE[6];
@@ -842,6 +834,7 @@ void Darts::getComputerNumber(int playerNum, Common::Point &targetPos) {
}
} else {
// Loop in case number does not exist on board
+ bool done = false;
do {
done = findNumberOnBoard(aim, pt);
--aim;
@@ -906,7 +899,7 @@ int Darts::throwDart(int dartNum, int computer) {
if (!computer) {
// Wait for a hit
while (!dartHit() && !_vm->shouldQuit())
- ;
+ events.wait(1);
if (_escapePressed)
return 0;
} else {
@@ -930,7 +923,7 @@ int Darts::throwDart(int dartNum, int computer) {
if (_escapePressed)
return 0;
- height = doPowerBar(Common::Point(DART_BAR_VX, DART_HEIGHT_Y), DART_COLOR_FORE, targetPos.y, 1);
+ height = doPowerBar(Common::Point(DART_BAR_VX, DART_HEIGHT_Y), DART_BAR_FORE, targetPos.y, 1);
if (_escapePressed)
return 0;
diff --git a/engines/sherlock/tattoo/tattoo_fixed_text.cpp b/engines/sherlock/tattoo/tattoo_fixed_text.cpp
index c9345e44d1..38acd78aba 100644
--- a/engines/sherlock/tattoo/tattoo_fixed_text.cpp
+++ b/engines/sherlock/tattoo/tattoo_fixed_text.cpp
@@ -27,23 +27,22 @@ namespace Sherlock {
namespace Tattoo {
-static const char *const FIXED_TEXT_ENGLISH[] = {
+static const char *const fixedTextEN[] = {
"Money",
- "Card",
- "Tobacco",
- "Timetable",
- "Summons",
- "Foolscap",
- "Damp Paper",
- "Bull's Eye",
-
"Money",
"Card",
+ "Card",
+ "Tobacco",
"Tobacco",
"Timetable",
+ "Timetable",
+ "Summons",
"Summons",
"Foolscap",
"Foolscap",
+ "Damp Paper",
+ "Foolscap",
+ "Bull's Eye",
"Bull's Eye Lantern",
"Open",
@@ -60,7 +59,7 @@ static const char *const FIXED_TEXT_ENGLISH[] = {
"Picked up",
"Page %d",
- "Close Journal",
+ "Close Journal",
"Search Journal",
"Save Journal",
"Abort Search",
@@ -77,13 +76,13 @@ static const char *const FIXED_TEXT_ENGLISH[] = {
"to start",
"Hit a key",
"Press a key",
- "bullseye",
+ "bullseye", // ??
"GAME OVER",
"BUSTED",
"Wins",
"Scored",
"points",
- "Hit",
+ "Hit %s %d",
"Double",
"Triple",
@@ -106,65 +105,167 @@ static const char *const FIXED_TEXT_ENGLISH[] = {
"Yes",
"No",
"Enter Password",
- "Going East"
+ "Going East", // correct password, was not and should not to be translated
+ // SH2: People names
+ "Sherlock Holmes",
+ "Dr. Watson",
+ "Mrs. Hudson",
+ "Stanley Forbes",
+ "Mycroft Holmes",
+ "Wiggins",
+ "Police Constable Burns",
+ "Augustus Trimble",
+ "Police Constable Daley",
+ "Matron",
+ "Sister Grace",
+ "Preston McCabe",
+ "Bob Colleran",
+ "Jonas Rigby",
+ "Police Constable Roach",
+ "James Dewar",
+ "Sergeant Jeremy Duncan",
+ "Inspector Gregson",
+ "Inspector Lestrade",
+ "Jesse Needhem",
+ "Arthur Fleming",
+ "Mr. Thomas Pratt",
+ "Mathilda (Tillie) Mason",
+ "Adrian Russell",
+ "Eldridge Whitney",
+ "Hepplethwaite",
+ "Horace Silverbridge",
+ "Old Sherman",
+ "Maxwell Verner",
+ "Millicent Redding",
+ "Virgil Silverbridge",
+ "George O'Keeffe",
+ "Lord Denys Lawton",
+ "Jenkins",
+ "Jock Mahoney",
+ "Bartender",
+ "Lady Cordelia Lockridge",
+ "Pettigrew",
+ "Sir Avery Fanshawe",
+ "Hodgkins",
+ "Wilbur \"Birdy\" Heywood",
+ "Jacob Farthington",
+ "Philip Bledsoe",
+ "Sidney Fowler",
+ "Professor Theodore Totman",
+ "Rose Hinchem",
+ "Tallboy",
+ "Ethlebert \"Stitch\" Rumsey",
+ "Charles Freedman",
+ "Nigel Hemmings",
+ "Fairfax Carter",
+ "Wilhelm II",
+ "Wachthund",
+ "Jonathan Wilson",
+ "David Lloyd-Jones",
+ "Edward Hargrove",
+ "Misteray",
+ "The Lascar",
+ "Parrot",
+ "Vincent Scarrett",
+ "Alexandra",
+ "Queen Victoria",
+ "John Brown",
+ "A Patient",
+ "A Patient",
+ "Patron",
+ "Queen Victoria",
+ "Patient in white",
+ "Lush",
+ "Drunk",
+ "Prostitute",
+ "Mudlark",
+ "Grinder",
+ "Bouncer",
+ "Agnes Ratchet",
+ "Aloysius Ratchet",
+ "Real Estate Agent",
+ "Candy Clerk",
+ "Beadle",
+ "Prussian",
+ "Mrs. Rowbottom",
+ "Miss Lloyd-Jones",
+ "Tavern patron",
+ "User",
+ "Toby",
+ "Stationer",
+ "Law Clerk",
+ "Ministry Clerk",
+ "Bather",
+ "Maid",
+ "Lady Fanshawe",
+ "Sidney Ratchet",
+ "Boy",
+ "Patron",
+ "Constable Brit",
+ "Wagon Driver"
};
-static const char *const FIXED_TEXT_GERMAN[] = {
+// sharp-s : 0xE1 / octal 341
+// small a-umlaut: 0x84 / octal 204
+// small o-umlaut: 0x94 / octal 224
+// small u-umlaut: 0x81 / octal 201
+// large O-umlaut: 0x99 / octal 231
+static const char *const fixedTextDE[] = {
"Geld",
- "S. Holmes",
- "Tabak",
- "Plan",
- "Aufforderg.",
- "Blatt pap.",
- "Dunstig pap",
- "Handlampe",
-
"Geld",
"S. Holmes",
+ "S. Holmes",
"Tabak",
+ "Tabak",
+ "Plan",
"Plan",
"Aufforderg.",
+ "Aufforderg.",
+ "Blatt pap.",
"Pergament",
"Dunstig pap",
+ "Dunstig pap",
+ "Handlampe",
"Handlampe",
- "ffne",
+ "\231ffne",
"Schau",
"Rede",
"Benutze",
- "Journal",
- "Inventory",
- "Options",
- "Losen",
+ "Tagebuch",
+ "Tasche",
+ "Optionen",
+ "L\224osen",
"mit",
"Keine Wirkung...",
- "Diese Person weic im Augenblick nichts zu berichten.",
+ "Diese Person wei\341 im Augenblick nichts zu berichten.",
+ "Picked up", // <-- ??
"Seite %d",
- "Schliecen",
- "Lessen",
+ "Schlie\341en",
+ "Lessen", // <--
"In Datei sichern",
"Suche abbrechen",
- "Rbckwarts suchen ",
+ "R\201ckw\204rts suchen ",
"Vorwarts suchen ",
"Text nicht gefunden",
"Holmes",
"Jock",
"Bull",
- "Runde",
- "Gesamt",
- "Pfeil",
+ "Runde: %d",
+ "Gesamt: %d",
+ "Pfeil # %d",
"zum Starten",
- "Taste dracken",
- "Taste dracken",
- "Bullseye",
- "SPIEL BEENDET",
- "VERLOREN",
- "Gewinnt",
- "Erzielte",
- "Punkte",
- "Treffer",
+ "Taste dr\201cken",
+ "Taste dr\201cken",
+ "Bullseye", // ??
+ "SPIEL BEENDET!",
+ "VERLOREN!",
+ "Gewinnt!", // "Holmes Gewinnt!", "%s Gewinnt!"
+ "Erzielte %d Punkte",
+ "Punkte", // ??
+ "Treffer %s %d",
"Doppel",
"Dreifach",
@@ -177,7 +278,7 @@ static const char *const FIXED_TEXT_GERMAN[] = {
"Soundeffekte",
"Voices",
"Textfenster",
- "Transparente Menbs",
+ "Transparente Men\201s",
"Schriftart andern",
"Aus",
"An",
@@ -186,19 +287,499 @@ static const char *const FIXED_TEXT_GERMAN[] = {
"Sind Sie sicher ?",
"Ja",
"Nein",
- "Pacwort eingeben",
- "Going East"
+ "Pa\341wort eingeben",
+ "Going East", // correct password, was not and should not to be translated
+ // SH2: People names
+ "Sherlock Holmes", // note: People names were not translated in the German interpreter
+ "Dr. Watson",
+ "Mrs. Hudson",
+ "Stanley Forbes",
+ "Mycroft Holmes",
+ "Wiggins",
+ "Police Constable Burns",
+ "Augustus Trimble",
+ "Police Constable Daley",
+ "Matron",
+ "Sister Grace",
+ "Preston McCabe",
+ "Bob Colleran",
+ "Jonas Rigby",
+ "Police Constable Roach",
+ "James Dewar",
+ "Sergeant Jeremy Duncan",
+ "Inspector Gregson",
+ "Inspector Lestrade",
+ "Jesse Needhem",
+ "Arthur Fleming",
+ "Mr. Thomas Pratt",
+ "Mathilda (Tillie) Mason",
+ "Adrian Russell",
+ "Eldridge Whitney",
+ "Hepplethwaite",
+ "Horace Silverbridge",
+ "Old Sherman",
+ "Maxwell Verner",
+ "Millicent Redding",
+ "Virgil Silverbridge",
+ "George O'Keeffe",
+ "Lord Denys Lawton",
+ "Jenkins",
+ "Jock Mahoney",
+ "Bartender",
+ "Lady Cordelia Lockridge",
+ "Pettigrew",
+ "Sir Avery Fanshawe",
+ "Hodgkins",
+ "Wilbur \"Birdy\" Heywood",
+ "Jacob Farthington",
+ "Philip Bledsoe",
+ "Sidney Fowler",
+ "Professor Theodore Totman",
+ "Rose Hinchem",
+ "Tallboy",
+ "Ethlebert \"Stitch\" Rumsey",
+ "Charles Freedman",
+ "Nigel Hemmings",
+ "Fairfax Carter",
+ "Wilhelm II",
+ "Wachthund",
+ "Jonathan Wilson",
+ "David Lloyd-Jones",
+ "Edward Hargrove",
+ "Misteray",
+ "The Lascar",
+ "Parrot",
+ "Vincent Scarrett",
+ "Alexandra",
+ "Queen Victoria",
+ "John Brown",
+ "A Patient",
+ "A Patient",
+ "Patron",
+ "Queen Victoria",
+ "Patient in white",
+ "Lush",
+ "Drunk",
+ "Prostitute",
+ "Mudlark",
+ "Grinder",
+ "Bouncer",
+ "Agnes Ratchet",
+ "Aloysius Ratchet",
+ "Real Estate Agent",
+ "Candy Clerk",
+ "Beadle",
+ "Prussian",
+ "Mrs. Rowbottom",
+ "Miss Lloyd-Jones",
+ "Tavern patron",
+ "User",
+ "Toby",
+ "Stationer",
+ "Law Clerk",
+ "Ministry Clerk",
+ "Bather",
+ "Maid",
+ "Lady Fanshawe",
+ "Sidney Ratchet",
+ "Boy",
+ "Patron",
+ "Constable Brit",
+ "Wagon Driver"
+};
+
+// small a w/ accent grave: 0x85 / octal 205
+// small e w/ accent acute: 0x82 / octal 202
+// small e w/ accent grave: 0x8A / octal 212
+// small e w/ circonflexe: 0x88 / octal 210
+// small cedilla: 0x87 / octal 207
+static const char *const fixedTextFR[] = {
+ "Argent",
+ "Argent",
+ "S. Holmes",
+ "S. Holmes",
+ "Tabac",
+ "Tabac",
+ "Horaire",
+ "Horaire",
+ "Convocation",
+ "Convocation",
+ "Feuille",
+ "Feuille",
+ "F. humide",
+ "Feuille",
+ "Lanterne",
+ "Lanterne",
+
+ "Ouvrir",
+ "Regarder",
+ "Parler",
+ "Utiliser",
+ "Journal", // <--
+ "Inventaire",
+ "Options",
+ "R\202soudre",
+ "avec",
+ "Sans effet...",
+ "Cette personne n'a rien \205 ajouter pour le moment.",
+ "Picked up", // <-- ??
+
+ "Page %d",
+ "Fermer",
+ "Lessen", // <--
+ "Sauvegarder",
+ "Annuler ",
+ "Chercher avant",
+ "Chercher apr\212s",
+ "Texte introuvable !",
+
+ "Holmes",
+ "Jock",
+ "Bull",
+ "Tour: %d",
+ "Total: %d",
+ "Fl\202chette # %d",
+ "pour commencer",
+ "Appuyez sur C",
+ "Appuyez sur C",
+ "Bullseye", // ??
+ "FIN DE LA PARTIE!", // original: "Fin de la partie!"
+ "FIASCO!",
+ "Gagnant!", // "Holmes Gagnant!", "%s Gagnant!"
+ "Total des points: %d",
+ "Punkte", // ??
+ "Treffer %s %d",
+ "double",
+ "triple",
+
+ "Mouillez",
+ "Puis",
+ "Chauffez",
+ "Charger",
+ "Sauvegarder",
+ "Musique",
+ "Sons",
+ "Voix",
+ "Fen\210tres de texte", // 0x88
+ "Menu Transparent",
+ "Changer la fonte",
+ "Aus", // ???
+ "An", // ???
+ "Quitter",
+ "Voulez-vous quitter?",
+ "Sind Sie sicher ?", // ???
+ "Oui",
+ "Non",
+ "Entrez le mot de passe",
+ "Going East", // correct password, was not and should not to be translated
+ // SH2: People names
+ "Sherlock Holmes",
+ "Dr. Watson",
+ "Mme. Hudson",
+ "Stanley Forbes",
+ "Mycroft Holmes",
+ "Wiggins",
+ "Sergent Burns",
+ "Augustus Trimble",
+ "Sergent Daley",
+ "Infirmi\212re chef",
+ "Mme. Grace",
+ "Preston McCabe",
+ "Bob Colleran",
+ "Jonas Rigby",
+ "Sergent Roach",
+ "James Dewar",
+ "Sergent Jeremy Duncan",
+ "Inspecteur Gregson",
+ "Inspecteur Lestrade",
+ "Jesse Needhem",
+ "Arthur Fleming",
+ "M. Thomas Pratt",
+ "Mathilda (Tillie) Mason",
+ "Adrian Russell",
+ "Eldridge Whitney",
+ "Hepplethwaite",
+ "Horace Silverbridge",
+ "Sherman",
+ "Maxwell Verner",
+ "Millicent Redding",
+ "Virgil Silverbridge",
+ "George O'Keeffe",
+ "Lord Denys Lawton",
+ "Jenkins",
+ "Jock Mahoney",
+ "Serveur",
+ "Lady Cordelia Lockridge",
+ "Pettigrew",
+ "Sir Avery Fanshawe",
+ "Hodgkins",
+ "Wilbur \"Birdy\" Heywood",
+ "Jacob Farthington",
+ "Philip Bledsoe",
+ "Sidney Fowler",
+ "Professeur Theodore Totman",
+ "Rose Hinchem",
+ "Tallboy",
+ "Ethlebert \"Stitch\" Rumsey",
+ "Charles Freedman",
+ "Nigel Hemmings",
+ "Fairfax Carter",
+ "Wilhelm II",
+ "Wachthund",
+ "Jonathan Wilson",
+ "David Lloyd-Jones",
+ "Edward Hargrove",
+ "Misteray",
+ "Le Lascar",
+ "Oiseau",
+ "Vincent Scarrett",
+ "Alexandra",
+ "Queen Victoria",
+ "John Brown",
+ "Patient",
+ "Patient",
+ "Client",
+ "Queen Victoria",
+ "Patient en blanc",
+ "Ivrogne",
+ "Ivrogne",
+ "Belle femme",
+ "Mudlark",
+ "Broyeur",
+ "Videur",
+ "Agnes Ratchet",
+ "Aloysius Ratchet",
+ "Immobilier",
+ "Gar\207on",
+ "Beadle",
+ "Prussian",
+ "Mme. Rowbottom",
+ "Mme Lloyd-Jones",
+ "Tavern Client",
+ "User",
+ "Toby",
+ "Papeterie",
+ "Law Clerc",
+ "Ministry Employ\202",
+ "Clint du thermes",
+ "Bonne",
+ "Lady Fanshawe",
+ "Sidney Ratchet",
+ "Gar\207on",
+ "Client",
+ "Sergent Brit",
+ "Wagon Driver"
+};
+
+// small a w/ accent bottom to top : 0xA0 / octal 240
+// small i w/ accent bottom to top : 0xA1 / octal 241
+// small o w/ accent bottom to top : 0xA2 / octal 242
+// small u w/ accent bottom to top : 0xA3 / octal 243
+// small n w/ wavy line : 0xA4 / octal 244
+// inverted question mark : 0xA8 / octal 250
+static const char *const fixedTextES[] = {
+ "Dinero",
+ "Dinero",
+ "Tarjeta",
+ "Tarjeta",
+ "Tabaco",
+ "Tabaco",
+ "Horarios",
+ "Horarios",
+ "Mensaje",
+ "Mensaje",
+ "Papel",
+ "Papel",
+ "Papel",
+ "Papel",
+ "Linterna",
+ "Linterna",
+
+ "Abrir",
+ "Mirar",
+ "Hablar",
+ "Usar",
+ "Diario",
+ "Inventario",
+ "Opciones",
+ "Resolver",
+ "con",
+ "Sin Efecto...",
+ "Esta persona no tiene nada que decir en este momento",
+ "Picked up", // <-- ??
+
+ "P\240gina %d",
+ "Cerrar Diario",
+ "Lessen", // <-- not included?!?!
+ "Salvar en Archivo",
+ "Detener B\243squeda",
+ "Buscar Hacia Atr\240s",
+ "Buscar Hacia Delante",
+ "Texto No Encontrado !",
+
+ "Holmes", //
+ "Jock",
+ "Bull",
+ "Vuelta: %d",
+ "Total del Turno: %d",
+ "Dardo # %d",
+ "para empezar",
+ "Pulsa una tecla",
+ "Pulsa una tecla",
+ "Golpe %s ojo de buey", // ??
+ "FIN DE LA PARTIDA!",
+ "ROTO!",
+ "Gana!", // "Holmes Gana!", "%s Gana!"
+ "Puntuado %d puntos",
+ "puntos", // ??
+ "Golpe %s %d",
+ "doble",
+ "triple",
+
+ "aplicar",
+ "Agua",
+ "Calentar",
+ "Cargar Partida",
+ "Salvar Partida",
+ "M\243sica",
+ "Efectos de Sonido",
+ "Voces",
+ "Ventanas de Texto",
+ "Men\243s Transparentes",
+ "Cambiar Tipo de Letra",
+ "Off", // ???
+ "On", // ???
+ "Salir",
+ "quieres salir?",
+ "\250Est\240s seguro de que",
+ "Si",
+ "Non",
+ "Introducir Palabra Clave",
+ "Vas al Este", // correct password, was translated in Spanish version (???)
+ // SH2: People names
+ "Sherlock Holmes",
+ "Dr. Watson",
+ "Sta. Hudson",
+ "Stanley Forbes",
+ "Mycroft Holmes",
+ "Wiggins",
+ "Agente de Polic\241a Burns",
+ "Augustus Trimble",
+ "Agente de Polic\241a Daley",
+ "Enfermera",
+ "Hermana Grace",
+ "Preston McCabe",
+ "Bob Colleran",
+ "Jonas Rigby",
+ "Agente de Polic\241a Roach",
+ "James Dewar",
+ "Sargento Jeremy Duncan",
+ "Inspector Gregson",
+ "Inspector Lestrade",
+ "Jesse Needhem",
+ "Arthur Fleming",
+ "Sr. Thomas Pratt",
+ "Mathilda (Tillie) Mason",
+ "Adrian Russell",
+ "Eldridge Whitney",
+ "Hepplethwaite",
+ "Horace Silverbridge",
+ "Old Sherman",
+ "Maxwell Verner",
+ "Millicent Redding",
+ "Virgil Silverbridge",
+ "George O'Keeffe",
+ "Lord Denys Lawton",
+ "Jenkins",
+ "Jock Mahoney",
+ "Camarero",
+ "Lady Cordelia Lockridge",
+ "Pettigrew",
+ "Sir Avery Fanshawe",
+ "Hodgkins",
+ "Wilbur \"Birdy\" Heywood",
+ "Jacob Farthington",
+ "Philip Bledsoe",
+ "Sidney Fowler",
+ "Profesor Theodore Totman",
+ "Rose Hinchem",
+ "Tallboy",
+ "Ethlebert \"Stitch\" Rumsey",
+ "Charles Freedman",
+ "Nigel Hemmings",
+ "Fairfax Carter",
+ "Guillermo II",
+ "Wachthund",
+ "Jonathan Wilson",
+ "David Lloyd-Jones",
+ "Edward Hargrove",
+ "Misteray",
+ "The Lascar",
+ "Loro",
+ "Vincent Scarrett",
+ "Alexandra",
+ "Reina Victoria",
+ "John Brown",
+ "Un Paciente",
+ "Un Paciente",
+ "Cliente",
+ "Reina Victoria",
+ "Paciente de blanco",
+ "Exuberante",
+ "Borracho",
+ "Prostituta",
+ "Mudlark",
+ "Grinder",
+ "Mat\242n", // sic? means block in Spanish and not bouncer?!
+ "Agnes Ratchet",
+ "Aloysius Ratchet",
+ "Agente de Bienes Ra\241ces",
+ "Candy Clerk",
+ "Beadle",
+ "Prusiano",
+ "Sta. Rowbottom",
+ "Sra. Lloyd-Jones",
+ "Parroquiano",
+ "Usuario",
+ "Toby",
+ "Papelero",
+ "Secretario de Justicia",
+ "Secreatrio del Ministerio",
+ "Ba\244ista",
+ "Criada",
+ "Lady Fanshawe",
+ "Sidney Ratchet",
+ "Chico",
+ "Patron", // ??? not found??
+ "Agente Brit",
+ "Cochero"
+};
+
+// TODO: There also was a Spanish version of Sherlock Holmes 2
+static const FixedTextLanguageEntry fixedTextLanguages[] = {
+ { Common::DE_DEU, fixedTextDE },
+ { Common::ES_ESP, fixedTextES },
+ { Common::EN_ANY, fixedTextEN },
+ { Common::FR_FRA, fixedTextFR },
+ { Common::UNK_LANG, fixedTextEN }
};
TattooFixedText::TattooFixedText(SherlockEngine *vm) : FixedText(vm) {
- if (vm->getLanguage() == Common::DE_DEU)
- _fixedText = FIXED_TEXT_GERMAN;
- else
- _fixedText = FIXED_TEXT_ENGLISH;
+ // Figure out which fixed texts to use
+ Common::Language curLanguage = _vm->getLanguage();
+
+ const FixedTextLanguageEntry *curLanguageEntry = fixedTextLanguages;
+
+ while (curLanguageEntry->language != Common::UNK_LANG) {
+ if (curLanguageEntry->language == curLanguage)
+ break; // found current language
+ curLanguageEntry++;
+ }
+ _curLanguageEntry = curLanguageEntry;
}
const char *TattooFixedText::getText(int fixedTextId) {
- return _fixedText[fixedTextId];
+ return _curLanguageEntry->fixedTextArray[fixedTextId];
}
const Common::String TattooFixedText::getActionMessage(FixedTextActionId actionId, int messageIndex) {
diff --git a/engines/sherlock/tattoo/tattoo_fixed_text.h b/engines/sherlock/tattoo/tattoo_fixed_text.h
index 3f43678ca2..48d237db3c 100644
--- a/engines/sherlock/tattoo/tattoo_fixed_text.h
+++ b/engines/sherlock/tattoo/tattoo_fixed_text.h
@@ -31,20 +31,20 @@ namespace Tattoo {
enum FixedTextId {
kFixedText_Inv1,
- kFixedText_Inv2,
- kFixedText_Inv3,
- kFixedText_Inv4,
- kFixedText_Inv5,
- kFixedText_Inv6,
- kFixedText_Inv7,
- kFixedText_Inv8,
kFixedText_InvDesc1,
+ kFixedText_Inv2,
kFixedText_InvDesc2,
+ kFixedText_Inv3,
kFixedText_InvDesc3,
+ kFixedText_Inv4,
kFixedText_InvDesc4,
+ kFixedText_Inv5,
kFixedText_InvDesc5,
+ kFixedText_Inv6,
kFixedText_InvDesc6,
+ kFixedText_Inv7,
kFixedText_InvDesc7,
+ kFixedText_Inv8,
kFixedText_InvDesc8,
kFixedText_Open,
kFixedText_Look,
@@ -106,12 +106,114 @@ enum FixedTextId {
kFixedText_Yes,
kFixedText_No,
kFixedText_EnterPassword,
- kFixedText_CorrectPassword
+ kFixedText_CorrectPassword,
+ // SH2: People names
+ kFixedText_People_SherlockHolmes,
+ kFixedText_People_DrWatson,
+ kFixedText_People_MrsHudson,
+ kFixedText_People_StanleyForbes,
+ kFixedText_People_MycroftHolmes,
+ kFixedText_People_Wiggins,
+ kFixedText_People_PoliceConstableBurns,
+ kFixedText_People_AugustusTrimble,
+ kFixedText_People_PoliceConstableDaley,
+ kFixedText_People_Matron,
+ kFixedText_People_SisterGrace,
+ kFixedText_People_PrestonMcCabe,
+ kFixedText_People_BobColleran,
+ kFixedText_People_JonasRigby,
+ kFixedText_People_PoliceConstableRoach,
+ kFixedText_People_JamesDewar,
+ kFixedText_People_SergeantJeremyDuncan,
+ kFixedText_People_InspectorGregson,
+ kFixedText_People_InspectorLestrade,
+ kFixedText_People_JesseNeedhem,
+ kFixedText_People_ArthurFleming,
+ kFixedText_People_MrThomasPratt,
+ kFixedText_People_MathildaTillieMason,
+ kFixedText_People_AdrianRussell,
+ kFixedText_People_EldridgeWhitney,
+ kFixedText_People_Hepplethwaite,
+ kFixedText_People_HoraceSilverbridge,
+ kFixedText_People_OldSherman,
+ kFixedText_People_MaxwellVerner,
+ kFixedText_People_MillicentRedding,
+ kFixedText_People_VirgilSilverbridge,
+ kFixedText_People_GeorgeOKeeffe,
+ kFixedText_People_LordDenysLawton,
+ kFixedText_People_Jenkins,
+ kFixedText_People_JockMahoney,
+ kFixedText_People_Bartender,
+ kFixedText_People_LadyCordeliaLockridge,
+ kFixedText_People_Pettigrew,
+ kFixedText_People_SirAveryFanshawe,
+ kFixedText_People_Hodgkins,
+ kFixedText_People_WilburBirdyHeywood,
+ kFixedText_People_JacobFarthington,
+ kFixedText_People_PhilipBledsoe,
+ kFixedText_People_SidneyFowler,
+ kFixedText_People_ProfessorTheodoreTotman,
+ kFixedText_People_RoseHinchem,
+ kFixedText_People_Tallboy,
+ kFixedText_People_EthlebertStitchRumsey,
+ kFixedText_People_CharlesFreedman,
+ kFixedText_People_NigelHemmings,
+ kFixedText_People_FairfaxCarter,
+ kFixedText_People_WilhelmII,
+ kFixedText_People_Wachthund,
+ kFixedText_People_JonathanWilson,
+ kFixedText_People_DavidLloydJones,
+ kFixedText_People_EdwardHargrove,
+ kFixedText_People_Misteray,
+ kFixedText_People_TheLascar,
+ kFixedText_People_Parrot,
+ kFixedText_People_VincentScarrett,
+ kFixedText_People_Alexandra,
+ kFixedText_People_QueenVictoria,
+ kFixedText_People_JohnBrown,
+ kFixedText_People_APatient1,
+ kFixedText_People_APatient2,
+ kFixedText_People_Patron,
+ kFixedText_People_QueenVictoria2,
+ kFixedText_People_PatientInWhite,
+ kFixedText_People_Lush,
+ kFixedText_People_Drunk,
+ kFixedText_People_Prostitute,
+ kFixedText_People_Mudlark,
+ kFixedText_People_Grinder,
+ kFixedText_People_Bouncer,
+ kFixedText_People_AgnesRatchet,
+ kFixedText_People_AloysiusRatchet,
+ kFixedText_People_RealEstateAgent,
+ kFixedText_People_CandyClerk,
+ kFixedText_People_Beadle,
+ kFixedText_People_Prussian,
+ kFixedText_People_MrsRowbottom,
+ kFixedText_People_MissLloydJones,
+ kFixedText_People_TavernPatron,
+ kFixedText_People_User,
+ kFixedText_People_Toby,
+ kFixedText_People_Stationer,
+ kFixedText_People_LawClerk,
+ kFixedText_People_MinistryClerk,
+ kFixedText_People_Bather,
+ kFixedText_People_Maid,
+ kFixedText_People_LadyFanshawe,
+ kFixedText_People_SidneyRatchet,
+ kFixedText_People_Boy,
+ kFixedText_People_Patron2,
+ kFixedText_People_ConstableBrit,
+ kFixedText_People_WagonDriver
+};
+
+struct FixedTextLanguageEntry {
+ Common::Language language;
+ const char *const *fixedTextArray;
};
class TattooFixedText: public FixedText {
private:
- const char *const *_fixedText;
+ const FixedTextLanguageEntry *_curLanguageEntry;
public:
TattooFixedText(SherlockEngine *vm);
virtual ~TattooFixedText() {}
diff --git a/engines/sherlock/tattoo/tattoo_inventory.cpp b/engines/sherlock/tattoo/tattoo_inventory.cpp
index 6bd1822c10..14e79e9f33 100644
--- a/engines/sherlock/tattoo/tattoo_inventory.cpp
+++ b/engines/sherlock/tattoo/tattoo_inventory.cpp
@@ -43,10 +43,10 @@ void TattooInventory::loadInv() {
Common::SeekableReadStream *stream = _vm->_res->load("invent.txt");
int count = stream->readByte();
- char c;
for (int idx = 0; idx < count; ++idx) {
Common::String name;
+ char c;
while ((c = stream->readByte()) != 0)
name += c;
diff --git a/engines/sherlock/tattoo/tattoo_journal.cpp b/engines/sherlock/tattoo/tattoo_journal.cpp
index 29b40096cb..e836cca620 100644
--- a/engines/sherlock/tattoo/tattoo_journal.cpp
+++ b/engines/sherlock/tattoo/tattoo_journal.cpp
@@ -253,9 +253,11 @@ void TattooJournal::handleButtons() {
// FIgure out the left of the scrollbar scroll area and paging data
const int scrollingWidth = JOURNAL_BAR_WIDTH - BUTTON_SIZE * 2 - 6;
const int scrollingLeft = (SHERLOCK_SCREEN_WIDTH - JOURNAL_BAR_WIDTH) / 2 + BUTTON_SIZE + 3;
- const int numPages = (_maxPage + LINES_PER_PAGE - 1) / LINES_PER_PAGE - 1;
- const int barWidth = CLIP(scrollingWidth / numPages, BUTTON_SIZE, JOURNAL_BAR_WIDTH - BUTTON_SIZE * 2 - 6);
+ const int numPages = (_maxPage + LINES_PER_PAGE - 1) / LINES_PER_PAGE;
+ if (numPages == 1)
+ return;
+ const int barWidth = CLIP(scrollingWidth / numPages, BUTTON_SIZE, JOURNAL_BAR_WIDTH - BUTTON_SIZE * 2 - 6);
const int scrollOffset = mousePos.x - scrollingLeft;
const int page = scrollOffset * FIXED_INT_MULTIPLIER / ((scrollingWidth - barWidth) * (FIXED_INT_MULTIPLIER / (numPages - 1))) + 1;
@@ -345,16 +347,16 @@ void TattooJournal::handleButtons() {
disableControls();
bool notFound = false;
- int dir;
do {
+ int dir;
if ((dir = getFindName(notFound)) != 0) {
_savedIndex = _index;
_savedSub = _sub;
_savedPage = _page;
- if (drawJournal(dir + 2, 1000 * LINES_PER_PAGE) == 0)
- {
+ bool drawResult = drawJournal(dir + 2, 1000 * LINES_PER_PAGE);
+ if (!drawResult) {
_index = _savedIndex;
_sub = _savedSub;
_page = _savedPage;
@@ -362,12 +364,13 @@ void TattooJournal::handleButtons() {
drawFrame();
drawJournal(0, 0);
notFound = true;
- } else {
- break;
}
highlightJournalControls(false);
screen.slamArea(0, 0, SHERLOCK_SCREEN_WIDTH, SHERLOCK_SCREEN_HEIGHT);
+
+ if (drawResult)
+ break;
} else {
break;
}
@@ -555,7 +558,7 @@ void TattooJournal::highlightJournalControls(bool slamIt) {
_selector = JH_NONE;
} else {
// Calculate the Scroll Position Bar
- int numPages = (_maxPage + LINES_PER_PAGE - 1) / LINES_PER_PAGE - 1;
+ int numPages = (_maxPage + LINES_PER_PAGE - 1) / LINES_PER_PAGE;
int barWidth = (r.width() - BUTTON_SIZE * 2 - 6) / numPages;
barWidth = CLIP(barWidth, BUTTON_SIZE, r.width() - BUTTON_SIZE * 2 - 6);
@@ -671,7 +674,7 @@ void TattooJournal::drawScrollBar() {
r.moveTo((SHERLOCK_SCREEN_WIDTH - r.width()) / 2, SHERLOCK_SCREEN_HEIGHT - r.height());
// Calculate the Scroll Position Bar
- int numPages = (_maxPage + LINES_PER_PAGE - 1) / LINES_PER_PAGE - 1;
+ int numPages = (_maxPage + LINES_PER_PAGE - 1) / LINES_PER_PAGE;
int barWidth = (r.width() - BUTTON_SIZE * 2 - 6) / numPages;
barWidth = CLIP(barWidth, BUTTON_SIZE, r.width() - BUTTON_SIZE * 2 - 6);
int barX;
@@ -729,7 +732,7 @@ void TattooJournal::drawScrollBar() {
void TattooJournal::disableControls() {
Screen &screen = *_vm->_screen;
Common::Rect r(JOURNAL_BAR_WIDTH, BUTTON_SIZE + screen.fontHeight() + 13);
- r.moveTo((SHERLOCK_SCREEN_HEIGHT - r.width()) / 2, SHERLOCK_SCREEN_HEIGHT - r.height());
+ r.moveTo((SHERLOCK_SCREEN_WIDTH - r.width()) / 2, SHERLOCK_SCREEN_HEIGHT - r.height());
const char *JOURNAL_COMMANDS[3] = { FIXED(CloseJournal), FIXED(SearchJournal), FIXED(SaveJournal) };
// Print the Journal commands
@@ -752,7 +755,9 @@ int TattooJournal::getFindName(bool printError) {
int done = 0;
Common::String name;
int cursorX, cursorY;
- bool flag = false;
+ bool blinkFlag = false;
+ int blinkCountdown = 1;
+ enum SearchButtons { SB_CANCEL = 0, SB_BACKWARDS = 1, SB_FORWARDS = 2 };
Common::Rect r(JOURNAL_BAR_WIDTH, (screen.fontHeight() + 4) * 2 + 9);
r.moveTo((SHERLOCK_SCREEN_WIDTH - r.width()) / 2, (SHERLOCK_SCREEN_HEIGHT - r.height()) / 2);
@@ -761,6 +766,7 @@ int TattooJournal::getFindName(bool printError) {
cursorY = r.top + screen.fontHeight() + 12;
drawControls(1);
+ disableControls();
// Backup the area under the text entry
Surface bgSurface(r.width() - 6, screen.fontHeight());
@@ -768,7 +774,8 @@ int TattooJournal::getFindName(bool printError) {
r.right - 3, cursorY + screen.fontHeight()));
if (printError) {
- screen.gPrint(Common::Point(0, cursorY), INFO_TOP, "%s", FIXED(TextNotFound));
+ screen.gPrint(Common::Point(r.left + (r.width() - screen.stringWidth(FIXED(TextNotFound))) / 2, cursorY),
+ INFO_TOP, "%s", FIXED(TextNotFound));
} else {
// If there was a name already entered, copy it to name and display it
if (!_find.empty()) {
@@ -820,21 +827,27 @@ int TattooJournal::getFindName(bool printError) {
events.setButtonState();
// Handle blinking cursor
- flag = !flag;
- if (flag) {
- // Draw cursor
- screen._backBuffer1.fillRect(Common::Rect(cursorX, cursorY, cursorX + 7, cursorY + 8), COMMAND_HIGHLIGHTED);
- screen.slamArea(cursorX, cursorY, 8, 9);
- } else {
- // Erase cursor by restoring background and writing current text
- screen._backBuffer1.blitFrom(bgSurface, Common::Point(r.left + 3, cursorY));
- screen.gPrint(Common::Point(r.left + screen.widestChar() + 3, cursorY), COMMAND_HIGHLIGHTED, "%s", name.c_str());
- screen.slamArea(r.left + 3, r.top, r.width() - 3, screen.fontHeight());
+ if (--blinkCountdown == 0) {
+ blinkCountdown = 3;
+ blinkFlag = !blinkFlag;
+ if (blinkFlag) {
+ // Draw cursor
+ screen._backBuffer1.fillRect(Common::Rect(cursorX, cursorY, cursorX + 7, cursorY + 8), COMMAND_HIGHLIGHTED);
+ screen.slamArea(cursorX, cursorY, 8, 9);
+ }
+ else {
+ // Erase cursor by restoring background and writing current text
+ screen._backBuffer1.blitFrom(bgSurface, Common::Point(r.left + 3, cursorY));
+ screen.gPrint(Common::Point(r.left + screen.widestChar() + 3, cursorY), COMMAND_HIGHLIGHTED, "%s", name.c_str());
+ screen.slamArea(r.left + 3, cursorY, r.width() - 3, screen.fontHeight());
+ }
}
highlightSearchControls(true);
events.wait(2);
+ if (_vm->shouldQuit())
+ return 0;
}
if (events.kbHit()) {
@@ -881,10 +894,11 @@ int TattooJournal::getFindName(bool printError) {
}
}
- if (keyState.ascii && keyState.ascii != '@' && name.size() < 50) {
+ if (keyState.ascii >= ' ' && keyState.ascii != '@' && name.size() < 50) {
if ((cursorX + screen.charWidth(keyState.ascii)) < (r.right - screen.widestChar() * 3)) {
- cursorX += screen.charWidth(keyState.ascii);
- name += toupper(keyState.ascii);
+ char c = toupper(keyState.ascii);
+ cursorX += screen.charWidth(c);
+ name += c;
}
}
@@ -897,13 +911,13 @@ int TattooJournal::getFindName(bool printError) {
if (events._released || events._rightReleased) {
switch (_selector) {
- case JH_CLOSE:
+ case (int)SB_CANCEL:
done = -1;
break;
- case JH_SEARCH:
+ case (int)SB_BACKWARDS:
done = 2;
break;
- case JH_PRINT:
+ case (int)SB_FORWARDS:
done = 1;
break;
default:
@@ -913,6 +927,7 @@ int TattooJournal::getFindName(bool printError) {
} while (!done);
if (done != -1) {
+ // Forwards or backwards search, so save the entered name
_find = name;
result = done;
} else {
diff --git a/engines/sherlock/tattoo/tattoo_map.cpp b/engines/sherlock/tattoo/tattoo_map.cpp
index 4bd85bd5c0..4c7e8c8fef 100644
--- a/engines/sherlock/tattoo/tattoo_map.cpp
+++ b/engines/sherlock/tattoo/tattoo_map.cpp
@@ -134,6 +134,7 @@ int TattooMap::show() {
screen.slamArea(screen._currentScroll.x, screen._currentScroll.y, SHERLOCK_SCREEN_WIDTH, SHERLOCK_SCREEN_WIDTH);
}
+ music.checkSongProgress();
checkMapNames(true);
if (mousePos.x < (SHERLOCK_SCREEN_WIDTH / 6))
@@ -364,8 +365,8 @@ void TattooMap::showCloseUp(int closeUpNum) {
Events &events = *_vm->_events;
Screen &screen = *_vm->_screen;
- // Reset scroll position
- screen._currentScroll = Common::Point(0, 0);
+ // Hide the cursor
+ events.hideCursor();
// Get the closeup images
Common::String fname = Common::String::format("res%02d.vgs", closeUpNum + 1);
@@ -402,7 +403,8 @@ void TattooMap::showCloseUp(int closeUpNum) {
for (int step = 0; step < CLOSEUP_STEPS; ++step) {
Common::Point picSize(pic[0].sDrawXSize(scaleVal), pic[0].sDrawYSize(scaleVal));
- Common::Point pt(closeUp.x / 100 - picSize.x / 2, closeUp.y / 100 - picSize.y / 2);
+ Common::Point pt(screen._currentScroll.x + closeUp.x / 100 - picSize.x / 2,
+ screen._currentScroll.y + closeUp.y / 100 - picSize.y / 2);
restoreArea(oldBounds);
screen._backBuffer1.transBlitFrom(pic[0], pt, false, 0, scaleVal);
@@ -418,15 +420,18 @@ void TattooMap::showCloseUp(int closeUpNum) {
}
// Handle final drawing of closeup
- Common::Rect r(SHERLOCK_SCREEN_WIDTH / 2 - pic[0]._width / 2, SHERLOCK_SCREEN_HEIGHT / 2 - pic[0]._height / 2,
- SHERLOCK_SCREEN_WIDTH / 2 - pic[0]._width / 2 + pic[0]._width,
- SHERLOCK_SCREEN_HEIGHT / 2 - pic[0]._height / 2 + pic[0]._height);
+ Common::Rect r(screen._currentScroll.x + SHERLOCK_SCREEN_WIDTH / 2 - pic[0]._width / 2,
+ screen._currentScroll.y + SHERLOCK_SCREEN_HEIGHT / 2 - pic[0]._height / 2,
+ screen._currentScroll.x + SHERLOCK_SCREEN_WIDTH / 2 - pic[0]._width / 2 + pic[0]._width,
+ screen._currentScroll.y + SHERLOCK_SCREEN_HEIGHT / 2 - pic[0]._height / 2 + pic[0]._height);
restoreArea(oldBounds);
screen._backBuffer1.transBlitFrom(pic[0], Common::Point(r.left, r.top));
screen.slamRect(oldBounds);
screen.slamRect(r);
+
events.wait(60);
+ events.showCursor();
}
} // End of namespace Tattoo
diff --git a/engines/sherlock/tattoo/tattoo_people.cpp b/engines/sherlock/tattoo/tattoo_people.cpp
index e3e957e35c..0af8deff9f 100644
--- a/engines/sherlock/tattoo/tattoo_people.cpp
+++ b/engines/sherlock/tattoo/tattoo_people.cpp
@@ -121,12 +121,13 @@ TattooPerson::TattooPerson() : Person() {
_lookHolmes = false;
}
-void TattooPerson::freeAltGraphics() {
- if (_altImages != nullptr) {
- delete _altImages;
- _altImages = nullptr;
- }
+TattooPerson::~TattooPerson() {
+ delete _altImages;
+}
+void TattooPerson::freeAltGraphics() {
+ delete _altImages;
+ _altImages = nullptr;
_altSeq = 0;
}
@@ -874,8 +875,8 @@ Common::Point TattooPerson::getSourcePoint() const {
TattooScene &scene = *(TattooScene *)_vm->_scene;
int scaleVal = scene.getScaleVal(_position);
- return Common::Point(_position.x / FIXED_INT_MULTIPLIER + _imageFrame->sDrawXSize(scaleVal) / 2,
- _position.y / FIXED_INT_MULTIPLIER);
+ return Common::Point(_position.x / FIXED_INT_MULTIPLIER +
+ (_imageFrame ? _imageFrame->sDrawXSize(scaleVal) / 2 : 0), _position.y / FIXED_INT_MULTIPLIER);
}
void TattooPerson::setObjTalkSequence(int seq) {
@@ -1010,7 +1011,6 @@ void TattooPerson::walkHolmesToNPC() {
Screen &screen = *_vm->_screen;
Talk &talk = *_vm->_talk;
TattooPerson &holmes = people[HOLMES];
- int facing;
// Save the character's details
pushNPCPath();
@@ -1073,9 +1073,8 @@ void TattooPerson::walkHolmesToNPC() {
if (!talk._talkToAbort) {
// Setup correct direction for Holmes to face
-
// See where Holmes is with respect to the NPC (x coords)
- facing = (holmes._position.x < _position.x) ? STOP_RIGHT : STOP_LEFT;
+ int facing = (holmes._position.x < _position.x) ? STOP_RIGHT : STOP_LEFT;
// See where Holmes is with respect to the NPC (y coords)
if (holmes._position.y < (_position.y - (10 * FIXED_INT_MULTIPLIER))) {
diff --git a/engines/sherlock/tattoo/tattoo_people.h b/engines/sherlock/tattoo/tattoo_people.h
index 722c4a9aaa..e0d53c67dd 100644
--- a/engines/sherlock/tattoo/tattoo_people.h
+++ b/engines/sherlock/tattoo/tattoo_people.h
@@ -128,7 +128,7 @@ public:
bool _lookHolmes;
public:
TattooPerson();
- virtual ~TattooPerson() {}
+ virtual ~TattooPerson();
/**
* Clear the NPC related data
diff --git a/engines/sherlock/tattoo/tattoo_resources.cpp b/engines/sherlock/tattoo/tattoo_resources.cpp
index 3be41e2650..4b73356d58 100644
--- a/engines/sherlock/tattoo/tattoo_resources.cpp
+++ b/engines/sherlock/tattoo/tattoo_resources.cpp
@@ -21,309 +21,111 @@
*/
#include "sherlock/tattoo/tattoo_resources.h"
+#include "sherlock/tattoo/tattoo_fixed_text.h"
namespace Sherlock {
namespace Tattoo {
-const char PORTRAITS[TATTOO_MAX_PEOPLE][5] = {
- { "HOLM" }, // Sherlock Holmes
- { "WATS" }, // Dr. Watson
- { "HUDS" }, // Mrs. Hudson
- { "FORB" }, // Stanley Forbes
- { "MYCR" }, // Mycroft Holmes
- { "WIGG" }, // Wiggins
- { "BURN" }, // Police Constable Burns
- { "TRIM" }, // Augustus Trimble
- { "DALE" }, // Police Constable Daley
- { "MATR" }, // Matron
- { "GRAC" }, // Sister Grace
- { "MCCA" }, // Preston McCabe
- { "COLL" }, // Bob Colleran
- { "JONA" }, // Jonas Rigby
- { "ROAC" }, // Police Constable Roach
- { "DEWA" }, // James Dewar
- { "JERE" }, // Sergeant Jeremy Duncan
- { "GREG" }, // Inspector Gregson
- { "LEST" }, // Inspector Lestrade
- { "NEED" }, // Jesse Needhem
- { "FLEM" }, // Arthur Fleming
- { "PRAT" }, // Mr. Thomas Pratt
- { "TILL" }, // Mathilda (Tillie) Mason
- { "RUSS" }, // Adrian Russell
- { "WHIT" }, // Eldridge Whitney
- { "HEPP" }, // Hepplethwaite
- { "HORA" }, // Horace Silverbridge
- { "SHER" }, // Old Sherman
- { "VERN" }, // Maxwell Verner
- { "REDD" }, // Millicent Redding
- { "VIRG" }, // Virgil Silverbridge
- { "GEOR" }, // George O'Keeffe
- { "LAWT" }, // Lord Denys Lawton
- { "JENK" }, // Jenkins
- { "JOCK" }, // Jock Mahoney
- { "BART" }, // Bartender
- { "LADY" }, // Lady Cordelia Lockridge
- { "PETT" }, // Pettigrew
- { "FANS" }, // Sir Avery Fanshawe
- { "HODG" }, // Hodgkins
- { "WILB" }, // Wilbur "Birdy" Heywood
- { "JACO" }, // Jacob Farthington
- { "BLED" }, // Philip Bledsoe
- { "FOWL" }, // Sidney Fowler
- { "PROF" }, // Professor Theodore Totman
- { "ROSE" }, // Rose Hinchem
- { "TALL" }, // Tallboy
- { "STIT" }, // Ethlebert "Stitch" Rumsey
- { "FREE" }, // Charles Freedman
- { "HEMM" }, // Nigel Hemmings
- { "CART" }, // Fairfax Carter
- { "WILH" }, // Wilhelm II
- { "WACH" }, // Wachthund
- { "WILS" }, // Jonathan Wilson
- { "DAVE" }, // David Lloyd-Jones
- { "HARG" }, // Edward Hargrove
- { "MORI" }, // Professor James Moriarty
- { "LASC" }, // The Lascar
- { "PARR" }, // Parrot
- { "SCAR" }, // Vincent Scarrett
- { "ALEX" }, // Alexandra
- { "QUEE" }, // Queen Victoria
- { "JOHN" }, // John Brown
- { "PAT1" }, // Patient #1
- { "PAT2" }, // Patient #2
- { "PATR" }, // Patron
- { "QUEN" }, // Queen Victoria
- { "WITE" }, // Patient in White
- { "LUSH" }, // Lush
- { "DRNK" }, // Drunk
- { "PROS" }, // Prostitute
- { "MUDL" }, // Mudlark
- { "GRIN" }, // Grinder
- { "BOUN" }, // Bouncer
- { "RATC" }, // Agnes Ratchet
- { "ALOY" }, // Aloysius Ratchet
- { "REAL" }, // Real Estate Agent
- { "CAND" }, // Candy Clerk
- { "BEAD" }, // Beadle
- { "PRUS" }, // Prussian
- { "ROWB" }, // Mrs. Rowbottom
- { "MSLJ" }, // Miss Lloyd-Jones
- { "TPAT" }, // Tavern patron
- { "USER" }, // User
- { "TOBY" }, // Toby
- { "STAT" }, // Stationer
- { "CLRK" }, // Law Clerk
- { "CLER" }, // Ministry Clerk
- { "BATH" }, // Bather
- { "MAID" }, // Maid
- { "LADF" }, // Lady Fanshawe
- { "SIDN" }, // Sidney Ratchet
- { "BOYO" }, // Boy
- { "PTR2" }, // Second Patron
- { "BRIT" }, // Constable Brit
- { "DROV" } // Wagon Driver
+const PeopleData PEOPLE_DATA[TATTOO_MAX_PEOPLE] = {
+ { "HOLM", kFixedText_People_SherlockHolmes },
+ { "WATS", kFixedText_People_DrWatson },
+ { "HUDS", kFixedText_People_MrsHudson },
+ { "FORB", kFixedText_People_StanleyForbes },
+ { "MYCR", kFixedText_People_MycroftHolmes },
+ { "WIGG", kFixedText_People_Wiggins },
+ { "BURN", kFixedText_People_PoliceConstableBurns },
+ { "TRIM", kFixedText_People_AugustusTrimble },
+ { "DALE", kFixedText_People_PoliceConstableDaley },
+ { "MATR", kFixedText_People_Matron },
+ { "GRAC", kFixedText_People_SisterGrace },
+ { "MCCA", kFixedText_People_PrestonMcCabe },
+ { "COLL", kFixedText_People_BobColleran },
+ { "JONA", kFixedText_People_JonasRigby },
+ { "ROAC", kFixedText_People_PoliceConstableRoach },
+ { "DEWA", kFixedText_People_JamesDewar },
+ { "JERE", kFixedText_People_SergeantJeremyDuncan },
+ { "GREG", kFixedText_People_InspectorGregson },
+ { "LEST", kFixedText_People_InspectorLestrade },
+ { "NEED", kFixedText_People_JesseNeedhem },
+ { "FLEM", kFixedText_People_ArthurFleming },
+ { "PRAT", kFixedText_People_MrThomasPratt },
+ { "TILL", kFixedText_People_MathildaTillieMason },
+ { "RUSS", kFixedText_People_AdrianRussell },
+ { "WHIT", kFixedText_People_EldridgeWhitney },
+ { "HEPP", kFixedText_People_Hepplethwaite },
+ { "HORA", kFixedText_People_HoraceSilverbridge },
+ { "SHER", kFixedText_People_OldSherman },
+ { "VERN", kFixedText_People_MaxwellVerner },
+ { "REDD", kFixedText_People_MillicentRedding },
+ { "VIRG", kFixedText_People_VirgilSilverbridge },
+ { "GEOR", kFixedText_People_GeorgeOKeeffe },
+ { "LAWT", kFixedText_People_LordDenysLawton },
+ { "JENK", kFixedText_People_Jenkins },
+ { "JOCK", kFixedText_People_JockMahoney },
+ { "BART", kFixedText_People_Bartender },
+ { "LADY", kFixedText_People_LadyCordeliaLockridge },
+ { "PETT", kFixedText_People_Pettigrew },
+ { "FANS", kFixedText_People_SirAveryFanshawe },
+ { "HODG", kFixedText_People_Hodgkins },
+ { "WILB", kFixedText_People_WilburBirdyHeywood },
+ { "JACO", kFixedText_People_JacobFarthington },
+ { "BLED", kFixedText_People_PhilipBledsoe },
+ { "FOWL", kFixedText_People_SidneyFowler },
+ { "PROF", kFixedText_People_ProfessorTheodoreTotman },
+ { "ROSE", kFixedText_People_RoseHinchem },
+ { "TALL", kFixedText_People_Tallboy },
+ { "STIT", kFixedText_People_EthlebertStitchRumsey },
+ { "FREE", kFixedText_People_CharlesFreedman },
+ { "HEMM", kFixedText_People_NigelHemmings },
+ { "CART", kFixedText_People_FairfaxCarter },
+ { "WILH", kFixedText_People_WilhelmII },
+ { "WACH", kFixedText_People_Wachthund },
+ { "WILS", kFixedText_People_JonathanWilson },
+ { "DAVE", kFixedText_People_DavidLloydJones },
+ { "HARG", kFixedText_People_EdwardHargrove },
+ { "MORI", kFixedText_People_Misteray },
+ { "LASC", kFixedText_People_TheLascar },
+ { "PARR", kFixedText_People_Parrot },
+ { "SCAR", kFixedText_People_VincentScarrett },
+ { "ALEX", kFixedText_People_Alexandra },
+ { "QUEE", kFixedText_People_QueenVictoria },
+ { "JOHN", kFixedText_People_JohnBrown },
+ { "PAT1", kFixedText_People_APatient1 },
+ { "PAT2", kFixedText_People_APatient2 },
+ { "PATR", kFixedText_People_Patron },
+ { "QUEN", kFixedText_People_QueenVictoria },
+ { "WITE", kFixedText_People_PatientInWhite },
+ { "LUSH", kFixedText_People_Lush },
+ { "DRNK", kFixedText_People_Drunk },
+ { "PROS", kFixedText_People_Prostitute },
+ { "MUDL", kFixedText_People_Mudlark },
+ { "GRIN", kFixedText_People_Grinder },
+ { "BOUN", kFixedText_People_Bouncer },
+ { "RATC", kFixedText_People_AgnesRatchet },
+ { "ALOY", kFixedText_People_AloysiusRatchet },
+ { "REAL", kFixedText_People_RealEstateAgent },
+ { "CAND", kFixedText_People_CandyClerk },
+ { "BEAD", kFixedText_People_Beadle },
+ { "PRUS", kFixedText_People_Prussian },
+ { "ROWB", kFixedText_People_MrsRowbottom },
+ { "MSLJ", kFixedText_People_MissLloydJones },
+ { "TPAT", kFixedText_People_TavernPatron },
+ { "USER", kFixedText_People_User },
+ { "TOBY", kFixedText_People_Toby },
+ { "STAT", kFixedText_People_Stationer },
+ { "CLRK", kFixedText_People_LawClerk },
+ { "CLER", kFixedText_People_MinistryClerk },
+ { "BATH", kFixedText_People_Bather },
+ { "MAID", kFixedText_People_Maid },
+ { "LADF", kFixedText_People_LadyFanshawe },
+ { "SIDN", kFixedText_People_SidneyRatchet },
+ { "BOYO", kFixedText_People_Boy },
+ { "PTR2", kFixedText_People_Patron2 },
+ { "BRIT", kFixedText_People_ConstableBrit },
+ { "DROV", kFixedText_People_WagonDriver }
};
-const char *const FRENCH_NAMES[TATTOO_MAX_PEOPLE] = {
- "Sherlock Holmes",
- "Dr. Watson",
- "Mme. Hudson",
- "Stanley Forbes",
- "Mycroft Holmes",
- "Wiggins",
- "Sergent Burns",
- "Augustus Trimble",
- "Sergent Daley",
- "Infirmi?re chef",
- "Mme. Grace",
- "Preston McCabe",
- "Bob Colleran",
- "Jonas Rigby",
- "Sergent Roach",
- "James Dewar",
- "Sergent Jeremy Duncan",
- "Inspecteur Gregson",
- "Inspecteur Lestrade",
- "Jesse Needhem",
- "Arthur Fleming",
- "M. Thomas Pratt",
- "Mathilda (Tillie) Mason",
- "Adrian Russell",
- "Eldridge Whitney",
- "Hepplethwaite",
- "Horace Silverbridge",
- "Sherman",
- "Maxwell Verner",
- "Millicent Redding",
- "Virgil Silverbridge",
- "George O'Keeffe",
- "Lord Denys Lawton",
- "Jenkins",
- "Jock Mahoney",
- "Serveur",
- "Lady Cordelia Lockridge",
- "Pettigrew",
- "Sir Avery Fanshawe",
- "Hodgkins",
- "Wilbur \"Birdy\" Heywood",
- "Jacob Farthington",
- "Philip Bledsoe",
- "Sidney Fowler",
- "Professeur Theodore Totman",
- "Rose Hinchem",
- "Tallboy",
- "Ethlebert \"Stitch\" Rumsey",
- "Charles Freedman",
- "Nigel Hemmings",
- "Fairfax Carter",
- "Wilhelm II",
- "Wachthund",
- "Jonathan Wilson",
- "David Lloyd-Jones",
- "Edward Hargrove",
- "Misteray",
- "Le Lascar",
- "Oiseau",
- "Vincent Scarrett",
- "Alexandra",
- "Queen Victoria",
- "John Brown",
- "Patient",
- "Patient",
- "Client",
- "Queen Victoria",
- "Patient en blanc",
- "Ivrogne",
- "Ivrogne",
- "Belle femme",
- "Mudlark",
- "Broyeur",
- "Videur",
- "Agnes Ratchet",
- "Aloysius Ratchet",
- "Immobilier",
- "Gar?on",
- "Beadle",
- "Prussian",
- "Mme. Rowbottom",
- "Mme Lloyd-Jones",
- "Tavern Client",
- "User",
- "Toby",
- "Papeterie",
- "Law Clerc",
- "Ministry Employ?",
- "Clint du thermes",
- "Bonne",
- "Lady Fanshawe",
- "Sidney Ratchet",
- "Gar?on",
- "Client",
- "Sergent Brit",
- "Wagon Driver"
-};
-
-const char *const ENGLISH_NAMES[TATTOO_MAX_PEOPLE] = {
- "Sherlock Holmes",
- "Dr. Watson",
- "Mrs. Hudson",
- "Stanley Forbes",
- "Mycroft Holmes",
- "Wiggins",
- "Police Constable Burns",
- "Augustus Trimble",
- "Police Constable Daley",
- "Matron",
- "Sister Grace",
- "Preston McCabe",
- "Bob Colleran",
- "Jonas Rigby",
- "Police Constable Roach",
- "James Dewar",
- "Sergeant Jeremy Duncan",
- "Inspector Gregson",
- "Inspector Lestrade",
- "Jesse Needhem",
- "Arthur Fleming",
- "Mr. Thomas Pratt",
- "Mathilda (Tillie) Mason",
- "Adrian Russell",
- "Eldridge Whitney",
- "Hepplethwaite",
- "Horace Silverbridge",
- "Old Sherman",
- "Maxwell Verner",
- "Millicent Redding",
- "Virgil Silverbridge",
- "George O'Keeffe",
- "Lord Denys Lawton",
- "Jenkins",
- "Jock Mahoney",
- "Bartender",
- "Lady Cordelia Lockridge",
- "Pettigrew",
- "Sir Avery Fanshawe",
- "Hodgkins",
- "Wilbur \"Birdy\" Heywood",
- "Jacob Farthington",
- "Philip Bledsoe",
- "Sidney Fowler",
- "Professor Theodore Totman",
- "Rose Hinchem",
- "Tallboy",
- "Ethlebert \"Stitch\" Rumsey",
- "Charles Freedman",
- "Nigel Hemmings",
- "Fairfax Carter",
- "Wilhelm II",
- "Wachthund",
- "Jonathan Wilson",
- "David Lloyd-Jones",
- "Edward Hargrove",
- "Misteray",
- "The Lascar",
- "Parrot",
- "Vincent Scarrett",
- "Alexandra",
- "Queen Victoria",
- "John Brown",
- "A Patient",
- "A Patient",
- "Patron",
- "Queen Victoria",
- "Patient in white",
- "Lush",
- "Drunk",
- "Prostitute",
- "Mudlark",
- "Grinder",
- "Bouncer",
- "Agnes Ratchet",
- "Aloysius Ratchet",
- "Real Estate Agent",
- "Candy Clerk",
- "Beadle",
- "Prussian",
- "Mrs. Rowbottom",
- "Miss Lloyd-Jones",
- "Tavern patron",
- "User",
- "Toby",
- "Stationer",
- "Law Clerk",
- "Ministry Clerk",
- "Bather",
- "Maid",
- "Lady Fanshawe",
- "Sidney Ratchet",
- "Boy",
- "Patron",
- "Constable Brit",
- "Wagon Driver"
-};
-
-
} // End of namespace Tattoo
} // End of namespace Sherlock
diff --git a/engines/sherlock/tattoo/tattoo_resources.h b/engines/sherlock/tattoo/tattoo_resources.h
index b706d90f2d..85a78734b9 100644
--- a/engines/sherlock/tattoo/tattoo_resources.h
+++ b/engines/sherlock/tattoo/tattoo_resources.h
@@ -31,9 +31,12 @@ namespace Tattoo {
#define TATTOO_MAX_PEOPLE 96
-extern const char PORTRAITS[TATTOO_MAX_PEOPLE][5];
-extern const char *const FRENCH_NAMES[TATTOO_MAX_PEOPLE];
-extern const char *const ENGLISH_NAMES[TATTOO_MAX_PEOPLE];
+struct PeopleData {
+ const char *portrait;
+ int fixedTextId;
+};
+
+extern const PeopleData PEOPLE_DATA[TATTOO_MAX_PEOPLE];
} // End of namespace Tattoo
diff --git a/engines/sherlock/tattoo/tattoo_scene.cpp b/engines/sherlock/tattoo/tattoo_scene.cpp
index f13d0588df..27f37665dc 100644
--- a/engines/sherlock/tattoo/tattoo_scene.cpp
+++ b/engines/sherlock/tattoo/tattoo_scene.cpp
@@ -90,20 +90,25 @@ bool TattooScene::loadScene(const Common::String &filename) {
}
}
+ // Handle loading music for the scene
+ if (talk._scriptMoreFlag != 1 && talk._scriptMoreFlag != 3)
+ music._nextSongName = Common::String::format("res%02d", _currentScene);
+
// Set the NPC paths for the scene
setNPCPath(WATSON);
- // Handle loading music for the scene
- if (music._musicOn) {
- if (talk._scriptMoreFlag != 1 && talk._scriptMoreFlag != 3)
- music._nextSongName = Common::String::format("res%02d", _currentScene);
-
- // If it's a new song, then start it up
- if (music._currentSongName.compareToIgnoreCase(music._nextSongName)) {
- if (music.loadSong(music._nextSongName)) {
- if (music._musicOn)
- music.startSong();
- }
+ // If it's a new song, then start it up
+ if (music._currentSongName.compareToIgnoreCase(music._nextSongName)) {
+ // WORKAROUND: Stop playing music after Diogenes fire scene in the intro,
+ // since it overlaps slightly into the next scene
+ if (talk._scriptName == "prol80p" && _currentScene == 80) {
+ music.stopMusic();
+ events.wait(5);
+ }
+
+ if (music.loadSong(music._nextSongName)) {
+ if (music._musicOn)
+ music.startSong();
}
}
@@ -340,12 +345,14 @@ void TattooScene::doBgAnimCheckCursor() {
void TattooScene::doBgAnim() {
TattooEngine &vm = *(TattooEngine *)_vm;
Events &events = *_vm->_events;
+ Music &music = *_vm->_music;
TattooPeople &people = *(TattooPeople *)_vm->_people;
Screen &screen = *_vm->_screen;
Talk &talk = *_vm->_talk;
TattooUserInterface &ui = *((TattooUserInterface *)_vm->_ui);
doBgAnimCheckCursor();
+ music.checkSongProgress();
talk._talkToAbort = false;
@@ -653,8 +660,6 @@ int TattooScene::startCAnim(int cAnimNum, int playRate) {
if (ui._windowOpen)
ui.banishWindow();
- //_activeCAnim._filesize = cAnim._size;
-
// Open up the room resource file and get the data for the animation
Common::SeekableReadStream *stream = res.load(_roomFilename);
stream->seek(44 + cAnimNum * 4);
@@ -690,6 +695,7 @@ int TattooScene::startCAnim(int cAnimNum, int playRate) {
_goToScene = STARTING_GAME_SCENE;
talk._talkToAbort = true;
_activeCAnim.close();
+ break;
}
}
}
@@ -716,6 +722,7 @@ int TattooScene::startCAnim(int cAnimNum, int playRate) {
// Flag the Canimation to be cleared
_activeCAnim._zPlacement = REMOVE;
_activeCAnim._removeBounds = _activeCAnim._oldBounds;
+ _vm->_ui->_bgFound = -1;
// Free up the animation
_activeCAnim.close();
@@ -809,13 +816,12 @@ void TattooScene::synchronize(Serializer &s) {
int TattooScene::closestZone(const Common::Point &pt) {
int zone = -1;
int dist = 9999;
- int d;
for (uint idx = 0; idx < _zones.size(); ++idx) {
Common::Rect &r = _zones[idx];
// Check the distance from the point to the center of the zone
- d = ABS(r.left + (r.width() / 2) - pt.x) + ABS(r.top + (r.height() / 2) - pt.y);
+ int d = ABS(r.left + (r.width() / 2) - pt.x) + ABS(r.top + (r.height() / 2) - pt.y);
if (d < dist) {
dist = d;
zone = idx;
diff --git a/engines/sherlock/tattoo/tattoo_talk.cpp b/engines/sherlock/tattoo/tattoo_talk.cpp
index a4ceca042b..a5ada7b63e 100644
--- a/engines/sherlock/tattoo/tattoo_talk.cpp
+++ b/engines/sherlock/tattoo/tattoo_talk.cpp
@@ -341,6 +341,10 @@ OpcodeReturn TattooTalk::cmdNextSong(const byte *&str) {
music._nextSongName += str[idx];
str += 7;
+ // WORKAROUND: Original game set wrong music name at the end of the introduction sequence
+ if (_scriptName == "prol80p" && music._nextSongName == "default")
+ music._nextSongName = "01cue90";
+
return RET_SUCCESS;
}
diff --git a/engines/sherlock/tattoo/tattoo_user_interface.cpp b/engines/sherlock/tattoo/tattoo_user_interface.cpp
index 160b1ca5a0..ee028f89c2 100644
--- a/engines/sherlock/tattoo/tattoo_user_interface.cpp
+++ b/engines/sherlock/tattoo/tattoo_user_interface.cpp
@@ -85,7 +85,6 @@ void TattooUserInterface::lookAtObject() {
Talk &talk = *_vm->_talk;
Common::Point mousePos = events.mousePos();
Common::String desc;
- int cAnimSpeed = 0;
_lookPos = mousePos;
_menuMode = LOOK_MODE;
@@ -95,7 +94,7 @@ void TattooUserInterface::lookAtObject() {
} else {
// Check if there is a Look animation
if (_bgShape->_lookcAnim != 0) {
- cAnimSpeed = _bgShape->_lookcAnim & 0xe0;
+ int cAnimSpeed = _bgShape->_lookcAnim & 0xe0;
cAnimSpeed >>= 5;
++cAnimSpeed;
@@ -216,9 +215,10 @@ void TattooUserInterface::doJournal() {
TattooJournal &journal = *(TattooJournal *)_vm->_journal;
TattooScene &scene = *(TattooScene *)_vm->_scene;
Screen &screen = *_vm->_screen;
- byte lookupTable[PALETTE_SIZE];
+ byte lookupTable[PALETTE_COUNT], lookupTable1[PALETTE_COUNT];
- Common::copy(&_lookupTable[0], &_lookupTable[PALETTE_SIZE], &lookupTable[0]);
+ Common::copy(&_lookupTable[0], &_lookupTable[PALETTE_COUNT], &lookupTable[0]);
+ Common::copy(&_lookupTable1[0], &_lookupTable1[PALETTE_COUNT], &lookupTable1[0]);
_menuMode = JOURNAL_MODE;
journal.show();
@@ -229,7 +229,8 @@ void TattooUserInterface::doJournal() {
// Restore the the old screen palette and greyscale lookup table
screen.clear();
screen.setPalette(screen._cMap);
- Common::copy(&lookupTable[0], &lookupTable[PALETTE_SIZE], &_lookupTable[0]);
+ Common::copy(&lookupTable[0], &lookupTable[PALETTE_COUNT], &_lookupTable[0]);
+ Common::copy(&lookupTable1[0], &lookupTable1[PALETTE_COUNT], &_lookupTable1[0]);
// Restore the scene
screen._backBuffer1.blitFrom(screen._backBuffer2);
@@ -276,7 +277,7 @@ void TattooUserInterface::handleInput() {
scene._goToScene = STARTING_GAME_SCENE;
} else if (_menuMode == STD_MODE) {
if (_keyState.keycode == Common::KEYCODE_s && vm._allowFastMode) {
- vm._fastMode = !vm._fastMode;
+ events.toggleSpeed();
} else if (_keyState.keycode == Common::KEYCODE_l && _bgFound != -1) {
// Beging used for testing that Look dialogs work
@@ -374,10 +375,10 @@ void TattooUserInterface::doStandardControl() {
TattooEngine &vm = *(TattooEngine *)_vm;
Events &events = *_vm->_events;
People &people = *_vm->_people;
+ SaveManager &saves = *_vm->_saves;
TattooScene &scene = *(TattooScene *)_vm->_scene;
Talk &talk = *_vm->_talk;
Common::Point mousePos = events.mousePos();
- bool noDesc = false;
// Don't do any input processing whilst the prolog is running
if (vm._runningProlog)
@@ -458,6 +459,7 @@ void TattooUserInterface::doStandardControl() {
if (_arrowZone == -1 || events._rightReleased)
freeMenu();
+ bool noDesc = false;
if (_personFound) {
if (people[_bgFound - 1000]._description.empty() || people[_bgFound - 1000]._description.hasPrefix(" "))
noDesc = true;
@@ -471,6 +473,7 @@ void TattooUserInterface::doStandardControl() {
if (events._rightReleased) {
// Show the verbs menu for the highlighted object
_tooltipWidget.banishWindow();
+ saves.createThumbnail();
_verbsWidget.load(!noDesc);
_verbsWidget.summonWindow();
@@ -515,11 +518,9 @@ void TattooUserInterface::doStandardControl() {
void TattooUserInterface::doLookControl() {
Events &events = *_vm->_events;
TattooScene &scene = *(TattooScene *)_vm->_scene;
- Sound &sound = *_vm->_sound;
- // See if a mouse button was released or a key pressed, and we want to initiate an action
- // TODO: Not sure about _soundOn.. should be check for speaking voice for text being complete
- if (events._released || events._rightReleased || _keyState.keycode || (sound._voices && !sound._soundOn)) {
+ // See if a mouse button was released or a key pressed to close the active look dialog
+ if (events._released || events._rightReleased || _keyState.keycode) {
// See if we were looking at an inventory object
if (!_invLookFlag) {
// See if there is any more text to display
diff --git a/engines/sherlock/tattoo/tattoo_user_interface.h b/engines/sherlock/tattoo/tattoo_user_interface.h
index c92ff21dd1..d89da4a6da 100644
--- a/engines/sherlock/tattoo/tattoo_user_interface.h
+++ b/engines/sherlock/tattoo/tattoo_user_interface.h
@@ -185,6 +185,9 @@ public:
*/
void doBgAnimEraseBackground();
+ /**
+ * Draws overlays onto the scene. Basically, the smoke effects some scenes have
+ */
void drawMaskArea(bool mode);
/**
diff --git a/engines/sherlock/tattoo/widget_base.cpp b/engines/sherlock/tattoo/widget_base.cpp
index 9e10cee0d1..8f0649130a 100644
--- a/engines/sherlock/tattoo/widget_base.cpp
+++ b/engines/sherlock/tattoo/widget_base.cpp
@@ -33,6 +33,7 @@ namespace Tattoo {
WidgetBase::WidgetBase(SherlockEngine *vm) : _vm(vm) {
_scroll = false;
_dialogTimer = 0;
+ _outsideMenu = false;
}
void WidgetBase::summonWindow() {
diff --git a/engines/sherlock/tattoo/widget_files.cpp b/engines/sherlock/tattoo/widget_files.cpp
index c9a20b0f8a..ca5e1bff93 100644
--- a/engines/sherlock/tattoo/widget_files.cpp
+++ b/engines/sherlock/tattoo/widget_files.cpp
@@ -143,19 +143,17 @@ void WidgetFiles::render(FilesRenderMode mode) {
int yp = _surface.fontHeight() + 14;
for (int idx = _savegameIndex; idx < (_savegameIndex + FILES_LINES_COUNT); ++idx) {
- if (OP_NAMES || idx == _selector || idx == _oldSelector) {
- if (idx == _selector && mode != RENDER_ALL)
- color = COMMAND_HIGHLIGHTED;
- else
- color = INFO_TOP;
+ if (idx == _selector && mode != RENDER_ALL)
+ color = COMMAND_HIGHLIGHTED;
+ else
+ color = INFO_TOP;
- if (mode == RENDER_NAMES_AND_SCROLLBAR)
- _surface.fillRect(Common::Rect(4, yp, _surface.w() - BUTTON_SIZE - 9, yp + _surface.fontHeight()), TRANSPARENCY);
+ if (mode == RENDER_NAMES_AND_SCROLLBAR)
+ _surface.fillRect(Common::Rect(4, yp, _surface.w() - BUTTON_SIZE - 9, yp + _surface.fontHeight()), TRANSPARENCY);
- Common::String numStr = Common::String::format("%d.", idx + 1);
- _surface.writeString(numStr, Common::Point(_surface.widestChar(), yp), color);
- _surface.writeString(_savegames[idx], Common::Point(xp, yp), color);
- }
+ Common::String numStr = Common::String::format("%d.", idx + 1);
+ _surface.writeString(numStr, Common::Point(_surface.widestChar(), yp), color);
+ _surface.writeString(_savegames[idx], Common::Point(xp, yp), color);
yp += _surface.fontHeight() + 1;
}
@@ -253,7 +251,6 @@ bool WidgetFiles::getFilename() {
int done = 0;
bool blinkFlag = false;
int blinkCountdown = 0;
- int width;
int cursorColor = 192;
byte color, textColor;
bool insert = true;
@@ -285,7 +282,7 @@ bool WidgetFiles::getFilename() {
char currentChar = (index == (int)filename.size()) ? ' ' : filename[index];
Common::String charString = Common::String::format("%c", currentChar);
- width = screen.charWidth(currentChar);
+ int width = screen.charWidth(currentChar);
// Wait for keypress
while (!events.kbHit()) {
diff --git a/engines/sherlock/tattoo/widget_inventory.cpp b/engines/sherlock/tattoo/widget_inventory.cpp
index 3555ecdffd..b49e30b30d 100644
--- a/engines/sherlock/tattoo/widget_inventory.cpp
+++ b/engines/sherlock/tattoo/widget_inventory.cpp
@@ -641,10 +641,12 @@ void WidgetInventory::handleEvents() {
bool found = false;
if (ui._bgFound != -1) {
if (ui._personFound) {
+ Person &person = people[ui._bgFound - 1000];
+
for (int idx = 0; idx < 2; ++idx) {
- if (!people[ui._bgFound - 1000]._use[idx]._verb.compareToIgnoreCase(_verb) &&
- !people[ui._bgFound - 1000]._use[idx]._target.compareToIgnoreCase(_invTarget)) {
- ui.checkAction(people[ui._bgFound - 1000]._use[idx], ui._bgFound);
+ if (!person._use[idx]._verb.compareToIgnoreCase(_verb) &&
+ !person._use[idx]._target.compareToIgnoreCase(_invTarget)) {
+ ui.checkAction(person._use[idx], ui._bgFound);
found = true;
}
}
diff --git a/engines/sherlock/tattoo/widget_lab.cpp b/engines/sherlock/tattoo/widget_lab.cpp
index 2873b12f22..eb32e2e22c 100644
--- a/engines/sherlock/tattoo/widget_lab.cpp
+++ b/engines/sherlock/tattoo/widget_lab.cpp
@@ -45,7 +45,6 @@ void WidgetLab::handleEvents() {
Common::Point mousePos = events.mousePos();
WidgetBase::handleEvents();
- bool noDesc = false;
// Handle drawing tooltips. If the user is dragging a lab item, display a tooltip for using the item
// on another. Otherwise, fall back on showing standard tooltips
@@ -65,6 +64,7 @@ void WidgetLab::handleEvents() {
if (ui._arrowZone == -1 || events._rightReleased)
ui._tooltipWidget.setText("");
+ bool noDesc = false;
if (ui._bgFound != -1) {
if (ui._bgShape->_description.hasPrefix(" ") || ui._bgShape->_description.empty())
noDesc = true;
diff --git a/engines/sherlock/tattoo/widget_talk.cpp b/engines/sherlock/tattoo/widget_talk.cpp
index 00e8233a95..6e7bde292f 100644
--- a/engines/sherlock/tattoo/widget_talk.cpp
+++ b/engines/sherlock/tattoo/widget_talk.cpp
@@ -369,11 +369,11 @@ void WidgetTalk::handleEvents() {
void WidgetTalk::render(Highlight highlightMode) {
TattooTalk &talk = *(TattooTalk *)_vm->_talk;
- int yp = 5;
- int statementNum = 1;
- byte color;
if (highlightMode != HL_SCROLLBAR_ONLY) {
+ int yp = 5;
+ int statementNum = 1;
+
// Draw all the statements
// Check whether scrolling has occurred, and if so, figure out what the starting
// number for the first visible statement will be
@@ -392,7 +392,7 @@ void WidgetTalk::render(Highlight highlightMode) {
_surface.fillRect(Common::Rect(3, yp, _surface.w() - BUTTON_SIZE - 3, yp + _surface.fontHeight()), TRANSPARENCY);
// Different coloring based on whether the option has been previously chosen or not
- color = (!talk._talkHistory[talk._converseNum][_statementLines[idx]._num]) ?
+ byte color = (!talk._talkHistory[talk._converseNum][_statementLines[idx]._num]) ?
INFO_TOP : INFO_BOTTOM;
if (_statementLines[idx]._num == _selector && highlightMode == HL_CHANGED_HIGHLIGHTS)
diff --git a/engines/sherlock/tattoo/widget_verbs.cpp b/engines/sherlock/tattoo/widget_verbs.cpp
index 0b523a93e9..499afb2e79 100644
--- a/engines/sherlock/tattoo/widget_verbs.cpp
+++ b/engines/sherlock/tattoo/widget_verbs.cpp
@@ -58,9 +58,8 @@ void WidgetVerbs::load(bool objectsOn) {
// person or an object
if (ui._personFound) {
TattooPerson &person = people[ui._activeObj - 1000];
- TattooPerson &npc = people[ui._activeObj - 1001];
- if (!scumm_strnicmp(npc._npcName.c_str(), "WATS", 4))
+ if (!scumm_strnicmp(person._npcName.c_str(), "WATS", 4))
isWatson = true;
@@ -158,7 +157,6 @@ void WidgetVerbs::handleEvents() {
Talk &talk = *_vm->_talk;
TattooUserInterface &ui = *(TattooUserInterface *)_vm->_ui;
Common::Point mousePos = events.mousePos();
- bool noDesc = false;
Common::String strLook = fixedText.getText(kFixedText_Look);
Common::String strTalk = fixedText.getText(kFixedText_Talk);
@@ -184,6 +182,7 @@ void WidgetVerbs::handleEvents() {
ui._personFound = ui._bgFound >= 1000;
ui._bgShape = ui._personFound || ui._bgFound == -1 ? nullptr : &scene._bgShapes[ui._bgFound];
+ bool noDesc = false;
if (ui._personFound) {
if (people[ui._bgFound - 1000]._description.empty() || people[ui._bgFound - 1000]._description.hasPrefix(" "))
noDesc = true;
diff --git a/engines/sword25/detection_tables.h b/engines/sword25/detection_tables.h
index a9f263b7d4..644b8ef366 100644
--- a/engines/sword25/detection_tables.h
+++ b/engines/sword25/detection_tables.h
@@ -129,6 +129,19 @@ static const ADGameDescription gameDescriptions[] = {
GF_EXTRACTED | ADGF_UNSTABLE,
GUIO1(GUIO_NOASPECT)
},
+
+ // Distributed by ScummVM
+ // Contains all language packs, English voice-overs and Hungarian version
+ {
+ "sword25",
+ "Latest version",
+ AD_ENTRY1s("data.b25c", "880a8a67faf4a4e7ab62cf114b771428", 827397764),
+ Common::EN_ANY,
+ Common::kPlatformUnknown,
+ ADGF_UNSTABLE,
+ GUIO1(GUIO_NOASPECT)
+ },
+
AD_TABLE_END_MARKER
};
diff --git a/engines/sword25/gfx/graphicengine.cpp b/engines/sword25/gfx/graphicengine.cpp
index f887c3cd51..fd3b63aeee 100644
--- a/engines/sword25/gfx/graphicengine.cpp
+++ b/engines/sword25/gfx/graphicengine.cpp
@@ -60,13 +60,13 @@ enum {
namespace Sword25 {
-static const uint FRAMETIME_SAMPLE_COUNT = 5; // Anzahl der Framezeiten ќber die, die Framezeit gemittelt wird
+static const uint FRAMETIME_SAMPLE_COUNT = 5; // Frame duration is averaged over FRAMETIME_SAMPLE_COUNT frames
GraphicEngine::GraphicEngine(Kernel *pKernel) :
_width(0),
_height(0),
_bitDepth(0),
- _lastTimeStamp((uint) -1), // max. BS_INT64 um beim ersten Aufruf von _UpdateLastFrameDuration() einen Reset zu erzwingen
+ _lastTimeStamp((uint) -1), // force reset of _UpdateLastFrameDuration() on first call
_lastFrameDuration(0),
_timerActive(true),
_frameTimeSampleSlot(0),
@@ -87,19 +87,18 @@ GraphicEngine::~GraphicEngine() {
}
bool GraphicEngine::init(int width, int height, int bitDepth, int backbufferCount) {
- // Warnung ausgeben, wenn eine nicht unterstќtzte Bittiefe gewфhlt wurde.
+ // Warn when an unsupported bit depth has been selected.
if (bitDepth != BIT_DEPTH) {
warning("Can't use a bit depth of %d (not supported). Falling back to %d.", bitDepth, BIT_DEPTH);
_bitDepth = BIT_DEPTH;
}
- // Warnung ausgeben, wenn nicht genau ein Backbuffer gewфhlt wurde.
+ // Warn when wrong BackBuffer is specified.
if (backbufferCount != BACKBUFFER_COUNT) {
warning("Can't use %d backbuffers (not supported). Falling back to %d.", backbufferCount, BACKBUFFER_COUNT);
backbufferCount = BACKBUFFER_COUNT;
}
- // Parameter in lokale Variablen kopieren
_width = width;
_height = height;
_bitDepth = bitDepth;
@@ -112,13 +111,13 @@ bool GraphicEngine::init(int width, int height, int bitDepth, int backbufferCoun
_backSurface.create(width, height, format);
- // Standardmфпig ist Vsync an.
+ // By default Vsync is on.
setVsync(true);
- // Layer-Manager initialisieren.
+ // Layer-Manager initialization
_renderObjectManagerPtr.reset(new RenderObjectManager(width, height, backbufferCount + 1));
- // Hauptpanel erstellen
+ // Create the main panel
_mainPanelPtr = _renderObjectManagerPtr->getTreeRoot()->addPanel(width, height, BS_ARGB(0, 0, 0, 0));
if (!_mainPanelPtr.isValid())
return false;
@@ -128,11 +127,10 @@ bool GraphicEngine::init(int width, int height, int bitDepth, int backbufferCoun
}
bool GraphicEngine::startFrame(bool updateAll) {
- // Berechnen, wie viel Zeit seit dem letzten Frame vergangen ist.
- // Dieser Wert kann ќber GetLastFrameDuration() von Modulen abgefragt werden, die zeitabhфngig arbeiten.
+ // Calculate how much time has elapsed since the last frame.
updateLastFrameDuration();
- // Den Layer-Manager auf den nфchsten Frame vorbereiten
+ // Prepare the Layer Manager for the next frame
_renderObjectManagerPtr->startFrame();
return true;
@@ -276,7 +274,7 @@ Resource *GraphicEngine::loadResource(const Common::String &filename) {
PackageManager *pPackage = Kernel::getInstance()->getPackage();
assert(pPackage);
- // Datei laden
+ // Loading data
byte *pFileData;
uint fileSize;
pFileData = pPackage->getFile(filename, &fileSize);
@@ -375,10 +373,10 @@ bool GraphicEngine::saveThumbnailScreenshot(const Common::String &filename) {
void GraphicEngine::ARGBColorToLuaColor(lua_State *L, uint color) {
lua_Number components[4] = {
- (lua_Number)((color >> 16) & 0xff), // Rot
- (lua_Number)((color >> 8) & 0xff), // Grќn
- (lua_Number)(color & 0xff), // Blau
- (lua_Number)(color >> 24), // Alpha
+ (lua_Number)((color >> 16) & 0xff), // Red
+ (lua_Number)((color >> 8) & 0xff), // Green
+ (lua_Number)(color & 0xff), // Blue
+ (lua_Number)(color >> 24), // Alpha
};
lua_newtable(L);
@@ -395,11 +393,11 @@ uint GraphicEngine::luaColorToARGBColor(lua_State *L, int stackIndex) {
int __startStackDepth = lua_gettop(L);
#endif
- // Sicherstellen, dass wir wirklich eine Tabelle betrachten
+ // Make sure that we really look at a table
luaL_checktype(L, stackIndex, LUA_TTABLE);
- // Grіпe der Tabelle auslesen
+ // getting table size
uint n = luaL_getn(L, stackIndex);
- // RGB oder RGBA Farben werden unterstќtzt und sonst keine
+ // only RGB or RGBA colors are supported
if (n != 3 && n != 4)
luaL_argcheck(L, 0, stackIndex, "at least 3 of the 4 color components have to be specified");
diff --git a/engines/sword25/gfx/image/vectorimage.cpp b/engines/sword25/gfx/image/vectorimage.cpp
index 0e5dfb9c53..756d063d43 100644
--- a/engines/sword25/gfx/image/vectorimage.cpp
+++ b/engines/sword25/gfx/image/vectorimage.cpp
@@ -283,7 +283,18 @@ VectorImage::VectorImage(const byte *pFileData, uint fileSize, bool &success, co
case 32:
success = parseDefineShape(3, bs);
return;
+ case 9:
+ // SetBackgroundColor
+ {
+ byte r, g, b;
+ r = bs.getByte();
+ g = bs.getByte();
+ b = bs.getByte();
+ _bgColor = Graphics::ARGBToColor<Graphics::ColorMasks<8888> >(0xff, r, g, b);
+ }
+ break;
default:
+ warning("Ignoring tag: %d, %d bytes", tagType, tagLength);
// Ignore unknown tags
bs.skipBytes(tagLength);
}
diff --git a/engines/sword25/gfx/image/vectorimage.h b/engines/sword25/gfx/image/vectorimage.h
index 057064fc6a..b5c2100681 100644
--- a/engines/sword25/gfx/image/vectorimage.h
+++ b/engines/sword25/gfx/image/vectorimage.h
@@ -228,6 +228,7 @@ private:
byte *_pixelData;
Common::String _fname;
+ uint _bgColor;
};
} // End of namespace Sword25
diff --git a/engines/sword25/gfx/screenshot.cpp b/engines/sword25/gfx/screenshot.cpp
index 4b4f967f29..eeaece97f2 100644
--- a/engines/sword25/gfx/screenshot.cpp
+++ b/engines/sword25/gfx/screenshot.cpp
@@ -40,7 +40,7 @@ namespace Sword25 {
bool Screenshot::saveToFile(Graphics::Surface *data, Common::WriteStream *stream) {
// Convert the RGBA data to RGB
- const byte *pSrc = (const byte *)data->getPixels();
+ const uint32 *pSrc = (const uint32 *)data->getPixels();
// Write our own custom header
stream->writeUint32BE(MKTAG('S','C','R','N')); // SCRN, short for "Screenshot"
@@ -52,11 +52,12 @@ bool Screenshot::saveToFile(Graphics::Surface *data, Common::WriteStream *stream
for (uint x = 0; x < data->w; x++) {
// This is only called by createThumbnail below, which
// provides a fake 'surface' with LE data in it.
- uint32 srcPixel = READ_LE_UINT32(pSrc);
- pSrc += sizeof(uint32);
- stream->writeByte((srcPixel >> 16) & 0xff); // R
- stream->writeByte((srcPixel >> 8) & 0xff); // G
- stream->writeByte(srcPixel & 0xff); // B
+ byte a, r, g, b;
+
+ data->format.colorToARGB(*pSrc++, a, r, g, b);
+ stream->writeByte(r);
+ stream->writeByte(g);
+ stream->writeByte(b);
}
}
@@ -81,30 +82,27 @@ Common::SeekableReadStream *Screenshot::createThumbnail(Graphics::Surface *data)
Graphics::Surface thumbnail;
thumbnail.create(200, 125, g_system->getScreenFormat());
- // мber das Zielbild iterieren und einen Pixel zur Zeit berechnen.
+ // Uber das Zielbild iterieren und einen Pixel zur Zeit berechnen.
uint x, y;
x = y = 0;
- for (byte *pDest = (byte *)thumbnail.getPixels(); pDest < ((byte *)thumbnail.getBasePtr(0, thumbnail.h)); ) {
+ for (uint32 *pDest = (uint32 *)thumbnail.getPixels(); pDest < thumbnail.getBasePtr(0, thumbnail.h); ) {
// Get an average over a 4x4 pixel block in the source image
int alpha, red, green, blue;
alpha = red = green = blue = 0;
for (int j = 0; j < 4; ++j) {
const uint32 *srcP = (const uint32 *)data->getBasePtr(x * 4, y * 4 + j + 50);
for (int i = 0; i < 4; ++i) {
- uint32 pixel = READ_UINT32(srcP + i);
- alpha += (pixel >> 24);
- red += (pixel >> 16) & 0xff;
- green += (pixel >> 8) & 0xff;
- blue += pixel & 0xff;
+ byte a, r, g, b;
+ data->format.colorToARGB(*(srcP + i), a, r, g, b);
+ alpha += a;
+ red += r;
+ green += g;
+ blue += b;
}
}
- // Write target pixel
- *pDest++ = blue / 16;
- *pDest++ = green / 16;
- *pDest++ = red / 16;
- *pDest++ = alpha / 16;
+ *pDest++ = thumbnail.format.ARGBToColor(alpha / 16, red / 16, green / 16, blue / 16);
// Move to next block
++x;
diff --git a/engines/sword25/gfx/staticbitmap.cpp b/engines/sword25/gfx/staticbitmap.cpp
index 1a6c812508..7ab76e625e 100644
--- a/engines/sword25/gfx/staticbitmap.cpp
+++ b/engines/sword25/gfx/staticbitmap.cpp
@@ -124,6 +124,10 @@ uint StaticBitmap::getPixel(int x, int y) const {
assert(pResource->getType() == Resource::TYPE_BITMAP);
BitmapResource *pBitmapResource = static_cast<BitmapResource *>(pResource);
uint result = pBitmapResource->getPixel(x, y);
+ // Convert to LUA-ready format
+ byte a;
+ a = result & 0xff;
+ result = (result >> 8) | (a << 24);
pResource->release();
return result;
}
diff --git a/engines/sword25/gfx/text.cpp b/engines/sword25/gfx/text.cpp
index 904435fcb0..d409c538c0 100644
--- a/engines/sword25/gfx/text.cpp
+++ b/engines/sword25/gfx/text.cpp
@@ -29,10 +29,6 @@
*
*/
-// TODO:
-// Entweder Fontfile absolut abspeichern, oder Verzeichniswechseln verbieten
-// Eine relative Fontfile-Angabe kіnnte verwandt werden nachdem das Verzeichnis bereits gewechselt wurde und die Datei wќrde nicht mehr gefunden
-
#include "sword25/kernel/kernel.h"
#include "sword25/kernel/outputpersistenceblock.h"
#include "sword25/kernel/inputpersistenceblock.h"
@@ -99,7 +95,7 @@ void Text::setText(const Common::String &text) {
}
void Text::setColor(uint32 modulationColor) {
- uint32 newModulationColor = (modulationColor & 0xffffff00) | (_modulationColor & 0x000000ff);
+ uint32 newModulationColor = (modulationColor & 0x00ffffff) | (_modulationColor & 0xff000000);
if (newModulationColor != _modulationColor) {
_modulationColor = newModulationColor;
forceRefresh();
@@ -108,7 +104,7 @@ void Text::setColor(uint32 modulationColor) {
void Text::setAlpha(int alpha) {
assert(alpha >= 0 && alpha < 256);
- uint32 newModulationColor = (_modulationColor & 0xffffff00) | alpha;
+ uint32 newModulationColor = (_modulationColor & 0xffffff) | (alpha << 24);
if (newModulationColor != _modulationColor) {
_modulationColor = newModulationColor;
forceRefresh();
@@ -132,12 +128,12 @@ void Text::setAutoWrapThreshold(uint32 autoWrapThreshold) {
}
bool Text::doRender(RectangleList *updateRects) {
- // Font-Resource locken.
+ // lock Font Resource
FontResource *fontPtr = lockFontResource();
if (!fontPtr)
return false;
- // Charactermap-Resource locken.
+ // lock Character map resource
ResourceManager *rmPtr = getResourceManager();
BitmapResource *charMapPtr;
{
@@ -154,18 +150,18 @@ bool Text::doRender(RectangleList *updateRects) {
charMapPtr = static_cast<BitmapResource *>(pResource);
}
- // Framebufferobjekt holen.
+ // Getting frame buffer object
GraphicEngine *gfxPtr = Kernel::getInstance()->getGfx();
assert(gfxPtr);
bool result = true;
Common::Array<Line>::iterator iter = _lines.begin();
for (; iter != _lines.end(); ++iter) {
- // Feststellen, ob ќberhaupt Buchstaben der aktuellen Zeile vom Update betroffen sind.
+ // Determine whether any letters of the current line are affected by the update.
Common::Rect checkRect = (*iter).bbox;
checkRect.translate(_absoluteX, _absoluteY);
- // Jeden Buchstaben einzeln Rendern.
+ // Render each letter individually.
int curX = _absoluteX + (*iter).bbox.left;
int curY = _absoluteY + (*iter).bbox.top;
for (uint i = 0; i < (*iter).text.size(); ++i) {
@@ -181,24 +177,24 @@ bool Text::doRender(RectangleList *updateRects) {
}
}
- // Charactermap-Resource freigeben.
+ // Free Character map resource
charMapPtr->release();
- // Font-Resource freigeben.
+ // Free Font resource
fontPtr->release();
return result;
}
ResourceManager *Text::getResourceManager() {
- // Pointer auf den Resource-Manager holen.
+ // Getting pointer to resource manager
return Kernel::getInstance()->getResourceManager();
}
FontResource *Text::lockFontResource() {
ResourceManager *rmPtr = getResourceManager();
- // Font-Resource locken.
+ // Lock font resource
FontResource *fontPtr;
{
Resource *resourcePtr = rmPtr->requestResource(_font);
@@ -278,7 +274,7 @@ void Text::updateFormat() {
i = lastSpace;
}
- // Bounding-Box der einzelnen Zeilen relativ zur ersten festlegen (vor allem zentrieren).
+ // Bounding box of each line relative to the first set (center aligned).
_height = 0;
Common::Array<Line>::iterator iter = _lines.begin();
for (; iter != _lines.end(); ++iter) {
@@ -290,7 +286,7 @@ void Text::updateFormat() {
_height += bbox.height();
}
} else {
- // Keine automatische Formatierung, also wird der gesamte Text in nur eine Zeile kopiert.
+ // No auto format, so all the text is copied to a single line.
_lines[0].text = _text;
_lines[0].bbox = Common::Rect(0, 0, _width, _height);
}
@@ -333,11 +329,11 @@ bool Text::unpersist(InputPersistenceBlock &reader) {
result &= RenderObject::unpersist(reader);
- // Farbe und Alpha einlesen.
+ // Read color and alpha
reader.read(_modulationColor);
- // Beim Laden der anderen Member werden die Set-Methoden benutzt statt der tatsфchlichen Member.
- // So wird das Layout automatisch aktualisiert und auch alle anderen notwendigen Methoden ausgefќhrt.
+ // Run all methods on loading relevant members.
+ // So, the layout is automatically updated and all necessary logic is executed.
Common::String font;
reader.readString(font);
diff --git a/engines/sword25/util/lua/scummvm_file.cpp b/engines/sword25/util/lua/scummvm_file.cpp
index c38aba004f..bdceff0c0c 100644
--- a/engines/sword25/util/lua/scummvm_file.cpp
+++ b/engines/sword25/util/lua/scummvm_file.cpp
@@ -183,7 +183,7 @@ Common::String Sword25FileProxy::getLanguage() {
case Common::FR_FRA:
return "fr";
case Common::HU_HUN:
- return "hr";
+ return "hu";
case Common::IT_ITA:
return "it";
case Common::PL_POL:
@@ -210,7 +210,7 @@ void Sword25FileProxy::setLanguage(const Common::String &lang) {
ConfMan.set("language", Common::getLanguageCode(Common::ES_ESP));
else if (lang == "fr")
ConfMan.set("language", Common::getLanguageCode(Common::FR_FRA));
- else if (lang == "hr")
+ else if (lang == "hu")
ConfMan.set("language", Common::getLanguageCode(Common::HU_HUN));
else if (lang == "it")
ConfMan.set("language", Common::getLanguageCode(Common::IT_ITA));
diff --git a/engines/tinsel/music.cpp b/engines/tinsel/music.cpp
index 9b4e2494e0..2a9804263a 100644
--- a/engines/tinsel/music.cpp
+++ b/engines/tinsel/music.cpp
@@ -418,9 +418,12 @@ MidiMusicPlayer::MidiMusicPlayer(TinselEngine *vm) {
// Version 2: drivers got installed and fat.opl got copied over by the user
_driver = Audio::MidiDriver_Miles_AdLib_create("MIDPAK.AD", "");
} else {
- // Version 1: sample.ad / sample.opl, have to be copied over by the user for this version
- // That's why we check those last, because then the user gets a proper error message for them
- _driver = Audio::MidiDriver_Miles_AdLib_create("SAMPLE.AD", "SAMPLE.OPL");
+ if ((fileClass.exists("SAMPLE.AD")) || (fileClass.exists("SAMPLE.OPL"))) {
+ // Version 1: sample.ad / sample.opl, have to be copied over by the user for this version
+ _driver = Audio::MidiDriver_Miles_AdLib_create("SAMPLE.AD", "SAMPLE.OPL");
+ } else {
+ error("MILES-ADLIB: timbre file not found (may be called FAT.OPL, MIDPAK.AD, SAMPLE.AD or SAMPLE.OPL, may be in a subdirectory)");
+ }
}
}
break;
diff --git a/engines/tucker/staticres.cpp b/engines/tucker/staticres.cpp
index b884851d7e..b9f6a6efee 100644
--- a/engines/tucker/staticres.cpp
+++ b/engines/tucker/staticres.cpp
@@ -329,8 +329,13 @@ static const SoundSequenceData _soundDataSeq19_20[] = {
{ 53, 2, 14, 100, 1 }, { 78, 2, 0, 100, 2 }, { 80, 0, 0, 100, 4 },
};
+// I've been told that there are versions of the game that don't play the
+// "introdub" music (130) for the first scene of the intro. The English "Euro
+// power pack" release does however, and I see no harm in doing it for every
+// version here. The volume is just a guess, though.
+
const SoundSequenceDataList AnimationSequencePlayer::_soundSeqDataList[] = {
- { 0, 0, 14, 10, 58, _soundDataSeq3_4 },
+ { 130, 80, 14, 10, 58, _soundDataSeq3_4 },
{ 0, 0, 14, 5, 60, _soundDataSeq9_10 },
{ 0, 0, 14, 9, 48, _soundDataSeq21_20 },
{ 1, 80, 14, 4, 25, _soundDataSeq13_14 },
@@ -471,6 +476,7 @@ const char *const AnimationSequencePlayer::_audioFileNamesTable[] = {
"rdfx38.wav",
"rdfx8.wav",
"rdfx9.wav",
+ "introdub.raw",
};
} // namespace Tucker
diff --git a/engines/tucker/tucker.h b/engines/tucker/tucker.h
index a423915a5f..3bbf6a57f5 100644
--- a/engines/tucker/tucker.h
+++ b/engines/tucker/tucker.h
@@ -246,6 +246,15 @@ private:
};
inline int scaleMixerVolume(int volume, int max = 100) {
+ if (volume > max) {
+ // This happens for instance for Bud's line, "Is that the
+ // great mystery invention you had hidden away?" in the intro,
+ // which is played at volume 110 out of 100. This made it very
+ // hard to hear. I'm not sure if this was a bug in the original
+ // game, or if it had the ability to amplify sounds.
+ warning("scaleMixerVolume: Adjusting volume %d to %d", volume, max);
+ volume = max;
+ }
return volume * Audio::Mixer::kMaxChannelVolume / max;
}
diff --git a/engines/wintermute/base/file/base_file.cpp b/engines/wintermute/base/file/base_file.cpp
index 2927c908e2..4589721e7e 100644
--- a/engines/wintermute/base/file/base_file.cpp
+++ b/engines/wintermute/base/file/base_file.cpp
@@ -57,7 +57,7 @@ bool BaseFile::isEOF() {
Common::SeekableReadStream *BaseFile::getMemStream() {
uint32 oldPos = getPos();
seek(0);
- byte *data = new byte[getSize()];
+ byte *data = (byte *)malloc(getSize());
read(data, getSize());
seek(oldPos);
Common::MemoryReadStream *memStream = new Common::MemoryReadStream(data, getSize(), DisposeAfterUse::YES);
diff --git a/engines/wintermute/base/gfx/base_surface.cpp b/engines/wintermute/base/gfx/base_surface.cpp
index f8b96b5baf..3aa500b224 100644
--- a/engines/wintermute/base/gfx/base_surface.cpp
+++ b/engines/wintermute/base/gfx/base_surface.cpp
@@ -75,11 +75,6 @@ bool BaseSurface::displayHalfTrans(int x, int y, Rect32 rect) {
}
//////////////////////////////////////////////////////////////////////////
-bool BaseSurface::displayTransform(int x, int y, Rect32 rect, Rect32 newRect, const Graphics::TransformStruct &transform) {
- return displayTransform(x, y, rect, newRect, transform);
-}
-
-//////////////////////////////////////////////////////////////////////////
bool BaseSurface::create(int width, int height) {
return STATUS_FAILED;
}
diff --git a/engines/wintermute/detection_tables.h b/engines/wintermute/detection_tables.h
index 4e3320159a..25a01766e4 100644
--- a/engines/wintermute/detection_tables.h
+++ b/engines/wintermute/detection_tables.h
@@ -140,9 +140,18 @@ static const WMEGameDescription gameDescriptions[] = {
// Five Lethal Demons
WME_WINENTRY("5ld", "",
WME_ENTRY1s("data.dcp", "1037a77cbd001e0644898addc022322c", 15407750), Common::EN_ANY, ADGF_UNSTABLE, LATEST_VERSION),
- // Five Magical Amulets
+ // Five Magical Amulets (Czech)
WME_WINENTRY("5ma", "",
- WME_ENTRY1s("data.dcp", "0134e92bcd5fd2837df3971087e96067", 163316498), Common::EN_ANY, ADGF_UNSTABLE, WME_1_7_0),
+ WME_ENTRY2s("czech.dcp", "7b2515a8ceb955c72bc14f0f1fca869e", 184,
+ "data.dcp", "0134e92bcd5fd2837df3971087e96067", 163316498), Common::CZ_CZE, ADGF_UNSTABLE, WME_1_7_0),
+ // Five Magical Amulets (English)
+ WME_WINENTRY("5ma", "",
+ WME_ENTRY2s("english.dcp", "2f97bca09260ba23b645da9f0855ce7f", 893681,
+ "data.dcp", "0134e92bcd5fd2837df3971087e96067", 163316498), Common::EN_ANY, ADGF_UNSTABLE, WME_1_7_0),
+ // Five Magical Amulets (Polish)
+ WME_WINENTRY("5ma", "",
+ WME_ENTRY2s("polish.dcp", "bb877d48795471a17f25b0b5109100d1", 1132197,
+ "data.dcp", "0134e92bcd5fd2837df3971087e96067", 163316498), Common::PL_POL, ADGF_UNSTABLE, WME_1_7_0),
// Actual Destination
WME_WINENTRY("actualdest", "",
WME_ENTRY1s("data.dcp", "6926f44b26f21ceb1d840eaab9aeb510", 9081740), Common::EN_ANY, ADGF_UNSTABLE, LATEST_VERSION),
@@ -334,6 +343,22 @@ static const WMEGameDescription gameDescriptions[] = {
// Oknytt
WME_WINENTRY("oknytt", "Version 1.0",
WME_ENTRY1s("data.dcp", "6456cf8f429905c83f07509f9da536dd", 109502959), Common::EN_ANY, ADGF_UNSTABLE, LATEST_VERSION),
+ // Oknytt (Version 1.13 English) (These are detected along with d_sounds.dcp to avoid mass-detecting in the languages-subfolder.)
+ WME_WINENTRY("oknytt", "Version 1.13",
+ WME_ENTRY2s("english.dcp", "d2afd722c78cfe66b7d4250d11f6ae16", 293274135,
+ "d_sounds.dcp", "7d04dff8ca11174486bd4b7a80fdcabb", 154943401), Common::EN_ANY, ADGF_UNSTABLE, LATEST_VERSION),
+ // Oknytt (Version 1.13 German)
+ WME_WINENTRY("oknytt", "Version 1.13",
+ WME_ENTRY2s("german.dcp", "0fc6401d8d76b04f6da49206ecafa0dc", 304292574,
+ "d_sounds.dcp", "7d04dff8ca11174486bd4b7a80fdcabb", 154943401), Common::DE_DEU, ADGF_UNSTABLE, LATEST_VERSION),
+ // Oknytt (Version 1.13 Russian)
+ WME_WINENTRY("oknytt", "Version 1.13",
+ WME_ENTRY2s("russian.dcp", "dd24a1c0b36a82e2b02fb6c1050d4aad", 362681669,
+ "d_sounds.dcp", "7d04dff8ca11174486bd4b7a80fdcabb", 154943401), Common::RU_RUS, ADGF_UNSTABLE, LATEST_VERSION),
+ // Oknytt (Version 1.13 Spanish)
+ WME_WINENTRY("oknytt", "Version 1.13",
+ WME_ENTRY2s("spanish.dcp", "10c46152cb29581671f3b6b7c229c957", 319406572,
+ "d_sounds.dcp", "7d04dff8ca11174486bd4b7a80fdcabb", 154943401), Common::ES_ESP, ADGF_UNSTABLE, LATEST_VERSION),
// Night Train Demo
WME_WINENTRY("nighttrain", "",
WME_ENTRY1s("data.dcp", "5a027ef84b083a730c9a4c85ec1d3a32", 131760816), Common::EN_ANY, ADGF_UNSTABLE | ADGF_DEMO, LATEST_VERSION),
diff --git a/engines/wintermute/utils/convert_utf.cpp b/engines/wintermute/utils/convert_utf.cpp
index 7ebc011d01..cdb48103d0 100644
--- a/engines/wintermute/utils/convert_utf.cpp
+++ b/engines/wintermute/utils/convert_utf.cpp
@@ -55,8 +55,6 @@ static const UTF32 halfMask = 0x3FFUL;
#define UNI_SUR_HIGH_END (UTF32)0xDBFF
#define UNI_SUR_LOW_START (UTF32)0xDC00
#define UNI_SUR_LOW_END (UTF32)0xDFFF
-#define false 0
-#define true 1
/* --------------------------------------------------------------------- */
@@ -311,7 +309,7 @@ ConversionResult ConvertUTF16toUTF8(
* definition of UTF-8 goes up to 4-byte sequences.
*/
-static Boolean isLegalUTF8(const UTF8 *source, int length) {
+static bool isLegalUTF8(const UTF8 *source, int length) {
UTF8 a;
const UTF8 *srcptr = source + length;
switch (length) {
@@ -356,7 +354,7 @@ static Boolean isLegalUTF8(const UTF8 *source, int length) {
* Exported function to return whether a UTF-8 sequence is legal or not.
* This is not used here; it's just exported.
*/
-Boolean isLegalUTF8Sequence(const UTF8 *source, const UTF8 *sourceEnd) {
+bool isLegalUTF8Sequence(const UTF8 *source, const UTF8 *sourceEnd) {
int length = trailingBytesForUTF8[*source] + 1;
if (source + length > sourceEnd) {
return false;
diff --git a/engines/wintermute/utils/convert_utf.h b/engines/wintermute/utils/convert_utf.h
index a5f34456f5..d2e54f4af4 100644
--- a/engines/wintermute/utils/convert_utf.h
+++ b/engines/wintermute/utils/convert_utf.h
@@ -96,7 +96,6 @@ namespace Wintermute {
typedef uint32 UTF32; /* at least 32 bits */
typedef uint16 UTF16; /* at least 16 bits */
typedef uint8 UTF8; /* typically 8 bits */
-typedef uint8 Boolean; /* 0 or 1 */
/* Some fundamental constants */
#define UNI_REPLACEMENT_CHAR (UTF32)0x0000FFFD
@@ -141,7 +140,7 @@ ConversionResult ConvertUTF32toUTF16(
const UTF32 **sourceStart, const UTF32 *sourceEnd,
UTF16 **targetStart, UTF16 *targetEnd, ConversionFlags flags);
-Boolean isLegalUTF8Sequence(const UTF8 *source, const UTF8 *sourceEnd);
+bool isLegalUTF8Sequence(const UTF8 *source, const UTF8 *sourceEnd);
} // End of namespace Wintermute
diff --git a/engines/zvision/POTFILES b/engines/zvision/POTFILES
index 48e2782648..61cf42ded2 100644
--- a/engines/zvision/POTFILES
+++ b/engines/zvision/POTFILES
@@ -1 +1 @@
-engines/zvision/detection.cpp
+engines/zvision/detection_tables.h
diff --git a/engines/zvision/video/zork_avi_decoder.cpp b/engines/zvision/video/zork_avi_decoder.cpp
index cf8505ec82..1d23546551 100644
--- a/engines/zvision/video/zork_avi_decoder.cpp
+++ b/engines/zvision/video/zork_avi_decoder.cpp
@@ -34,44 +34,43 @@
namespace ZVision {
Video::AVIDecoder::AVIAudioTrack *ZorkAVIDecoder::createAudioTrack(Video::AVIDecoder::AVIStreamHeader sHeader, Video::AVIDecoder::PCMWaveFormat wvInfo) {
- ZorkAVIDecoder::ZorkAVIAudioTrack *audioTrack = new ZorkAVIDecoder::ZorkAVIAudioTrack(sHeader, wvInfo, _soundType);
- return (Video::AVIDecoder::AVIAudioTrack *)audioTrack;
+ if (wvInfo.tag != kWaveFormatZorkPCM)
+ return new AVIAudioTrack(sHeader, wvInfo, _soundType);
+
+ assert(wvInfo.size == 8);
+ return new ZorkAVIAudioTrack(sHeader, wvInfo, _soundType);
+}
+
+ZorkAVIDecoder::ZorkAVIAudioTrack::ZorkAVIAudioTrack(const AVIStreamHeader &streamHeader, const PCMWaveFormat &waveFormat, Audio::Mixer::SoundType soundType) :
+ Video::AVIDecoder::AVIAudioTrack(streamHeader, waveFormat, soundType), _queueStream(0), _decoder(waveFormat.channels == 2) {
}
-void ZorkAVIDecoder::ZorkAVIAudioTrack::queueSound(Common::SeekableReadStream *stream) {
- bool updateCurChunk = true;
- if (_audStream) {
- if (_wvInfo.tag == kWaveFormatZorkPCM) {
- assert(_wvInfo.size == 8);
- RawChunkStream::RawChunk chunk = decoder->readNextChunk(stream);
- delete stream;
+void ZorkAVIDecoder::ZorkAVIAudioTrack::createAudioStream() {
+ _queueStream = Audio::makeQueuingAudioStream(_wvInfo.samplesPerSec, _wvInfo.channels == 2);
+ _audioStream = _queueStream;
+}
+
+void ZorkAVIDecoder::ZorkAVIAudioTrack::queueSound(Common::SeekableReadStream *stream) {
+ RawChunkStream::RawChunk chunk = _decoder.readNextChunk(stream);
+ delete stream;
- if (chunk.data) {
- byte flags = Audio::FLAG_16BITS | Audio::FLAG_STEREO;
+ if (chunk.data) {
+ byte flags = Audio::FLAG_16BITS;
+ if (_wvInfo.channels == 2)
+ flags |= Audio::FLAG_STEREO;
#ifdef SCUMM_LITTLE_ENDIAN
- // RawChunkStream produces native endianness int16
- flags |= Audio::FLAG_LITTLE_ENDIAN;
+ // RawChunkStream produces native endianness int16
+ flags |= Audio::FLAG_LITTLE_ENDIAN;
#endif
- _audStream->queueBuffer((byte *)chunk.data, chunk.size, DisposeAfterUse::YES, flags);
- }
- } else {
- updateCurChunk = false;
- AVIAudioTrack::queueSound(stream);
- }
- } else {
- delete stream;
+ _queueStream->queueBuffer((byte *)chunk.data, chunk.size, DisposeAfterUse::YES, flags);
}
- // The superclass always updates _curChunk, whether or not audio has
- // been queued, so we should do that too. Unless the superclass already
- // has done it for us.
- if (updateCurChunk) {
- _curChunk++;
- }
+ _curChunk++;
}
void ZorkAVIDecoder::ZorkAVIAudioTrack::resetStream() {
- decoder->init();
+ AVIAudioTrack::resetStream();
+ _decoder.init();
}
} // End of namespace ZVision
diff --git a/engines/zvision/video/zork_avi_decoder.h b/engines/zvision/video/zork_avi_decoder.h
index 89c0d1e4b9..afcdb05676 100644
--- a/engines/zvision/video/zork_avi_decoder.h
+++ b/engines/zvision/video/zork_avi_decoder.h
@@ -39,22 +39,15 @@ public:
private:
class ZorkAVIAudioTrack : public Video::AVIDecoder::AVIAudioTrack {
public:
- ZorkAVIAudioTrack(const AVIStreamHeader &streamHeader, const PCMWaveFormat &waveFormat, Audio::Mixer::SoundType soundType) :
- Video::AVIDecoder::AVIAudioTrack(streamHeader, waveFormat, soundType),
- decoder(NULL) {
- if (_audStream) {
- decoder = new RawChunkStream(_audStream->isStereo());
- }
- }
- virtual ~ZorkAVIAudioTrack() {
- if (decoder)
- delete decoder;
- }
+ ZorkAVIAudioTrack(const AVIStreamHeader &streamHeader, const PCMWaveFormat &waveFormat, Audio::Mixer::SoundType soundType);
+ void createAudioStream();
void queueSound(Common::SeekableReadStream *stream);
void resetStream();
+
private:
- RawChunkStream *decoder;
+ Audio::QueuingAudioStream *_queueStream;
+ RawChunkStream _decoder;
};
Video::AVIDecoder::AVIAudioTrack *createAudioTrack(Video::AVIDecoder::AVIStreamHeader sHeader, Video::AVIDecoder::PCMWaveFormat wvInfo);
diff --git a/graphics/module.mk b/graphics/module.mk
index 2705322c79..b6919cf1ab 100644
--- a/graphics/module.mk
+++ b/graphics/module.mk
@@ -12,6 +12,7 @@ MODULE_OBJS := \
fonts/ttf.o \
fonts/winfont.o \
maccursor.o \
+ pixelformat.o \
primitives.o \
scaler.o \
scaler/thumbnail_intern.o \
diff --git a/graphics/pixelformat.cpp b/graphics/pixelformat.cpp
new file mode 100644
index 0000000000..0a46411254
--- /dev/null
+++ b/graphics/pixelformat.cpp
@@ -0,0 +1,64 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * 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 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.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "graphics/pixelformat.h"
+#include "common/algorithm.h"
+
+namespace Graphics {
+
+Common::String PixelFormat::toString() const {
+ if (bytesPerPixel == 1)
+ return "CLUT8";
+
+ // We apply a trick to simplify the code here. We encode all the shift,
+ // loss, and component name in the component entry. By having the shift as
+ // highest entry we can sort according to shift.
+ // This works because in valid RGB PixelFormats shift values needs to be
+ // distinct except when the loss is 8. However, components with loss value
+ // of 8 are not printed, thus their position does not matter.
+ int component[4];
+ component[0] = (rShift << 16) | (rLoss << 8) | 'R';
+ component[1] = (gShift << 16) | (gLoss << 8) | 'G';
+ component[2] = (bShift << 16) | (bLoss << 8) | 'B';
+ component[3] = (aShift << 16) | (aLoss << 8) | 'A';
+
+ // Sort components according to descending shift value.
+ Common::sort(component, component + ARRAYSIZE(component), Common::Greater<int>());
+
+ Common::String letters, digits;
+ for (int i = 0; i < ARRAYSIZE(component); ++i) {
+ const int componentLoss = (component[i] >> 8) & 0xFF;
+ // A loss of 8 means that the component does not exist.
+ if (componentLoss == 8) {
+ continue;
+ }
+
+ const char componentName = component[i] & 0xFF;
+
+ letters += componentName;
+ digits += '0' + 8 - componentLoss;
+ }
+
+ return letters + digits;
+}
+
+} // End of namespace Graphics
diff --git a/graphics/pixelformat.h b/graphics/pixelformat.h
index 00db6702fc..9dd06241b7 100644
--- a/graphics/pixelformat.h
+++ b/graphics/pixelformat.h
@@ -24,6 +24,7 @@
#define GRAPHICS_PIXELFORMAT_H
#include "common/scummsys.h"
+#include "common/str.h"
namespace Graphics {
@@ -260,6 +261,8 @@ struct PixelFormat {
// Unsupported
return 0;
}
+
+ Common::String toString() const;
};
} // End of namespace Graphics
diff --git a/graphics/transparent_surface.cpp b/graphics/transparent_surface.cpp
index f6e8cacb8b..992a5dc879 100644
--- a/graphics/transparent_surface.cpp
+++ b/graphics/transparent_surface.cpp
@@ -41,8 +41,6 @@
namespace Graphics {
-static const int kAShift = 0;//img->format.aShift;
-
static const int kBModShift = 0;//img->format.bShift;
static const int kGModShift = 8;//img->format.gShift;
static const int kRModShift = 16;//img->format.rShift;
@@ -118,7 +116,7 @@ void doBlitBinaryFast(byte *ino, byte *outo, uint32 width, uint32 height, uint32
in = ino;
for (uint32 j = 0; j < width; j++) {
uint32 pix = *(uint32 *)in;
- int a = (pix >> kAShift) & 0xff;
+ int a = (pix >> kAModShift) & 0xff;
if (a != 0) { // Full opacity (Any value not exactly 0 is Opaque here)
*(uint32 *)out = pix;
@@ -338,7 +336,7 @@ Common::Rect TransparentSurface::blit(Graphics::Surface &target, int posX, int p
retSize.setWidth(0);
retSize.setHeight(0);
// Check if we need to draw anything at all
- int ca = (color >> 24) & 0xff;
+ int ca = (color >> kAModShift) & 0xff;
if (ca == 0) {
return retSize;
diff --git a/gui/ThemeEngine.cpp b/gui/ThemeEngine.cpp
index ed01204180..6562a1d922 100644
--- a/gui/ThemeEngine.cpp
+++ b/gui/ThemeEngine.cpp
@@ -739,12 +739,23 @@ bool ThemeEngine::loadDefaultXML() {
// Use the Python script "makedeftheme.py" to convert a normal XML theme
// into the "default.inc" file, which is ready to be included in the code.
#ifndef DISABLE_GUI_BUILTIN_THEME
- const char *defaultXML =
#include "themes/default.inc"
- ;
+ int xmllen = 0;
+
+ for (int i = 0; i < ARRAYSIZE(defaultXML); i++)
+ xmllen += strlen(defaultXML[i]);
+
+ byte *tmpXML = (byte *)malloc(xmllen + 1);
+ tmpXML[0] = '\0';
+
+ for (int i = 0; i < ARRAYSIZE(defaultXML); i++)
+ strncat((char *)tmpXML, defaultXML[i], xmllen);
+
+ if (!_parser->loadBuffer(tmpXML, xmllen)) {
+ free(tmpXML);
- if (!_parser->loadBuffer((const byte *)defaultXML, strlen(defaultXML)))
return false;
+ }
_themeName = "ScummVM Classic Theme (Builtin Version)";
_themeId = "builtin";
@@ -753,6 +764,8 @@ bool ThemeEngine::loadDefaultXML() {
bool result = _parser->parse();
_parser->close();
+ free(tmpXML);
+
return result;
#else
warning("The built-in theme is not enabled in the current build. Please load an external theme");
diff --git a/gui/credits.h b/gui/credits.h
index 7ae12bf599..2e66a7065e 100644
--- a/gui/credits.h
+++ b/gui/credits.h
@@ -77,12 +77,20 @@ static const char *credits[] = {
"C0""Ludvig Strigeus",
"C2""(retired)",
"",
+"C1""Access",
+"A0""Arnaud Boutonne",
+"C0""Arnaud Boutonn\351",
+"C0""Paul Gilbert",
+"",
"C1""Avalanche",
"A0""Peter Bozso",
"C0""Peter Bozs\363",
"A0""Arnaud Boutonne",
"C0""Arnaud Boutonn\351",
"",
+"C1""BBVS",
+"C0""Benjamin Haisch",
+"",
"C1""CGE",
"A0""Arnaud Boutonne",
"C0""Arnaud Boutonn\351",
@@ -233,6 +241,10 @@ static const char *credits[] = {
"C0""Jordi Vilalta Prat",
"C0""Lars Skovlund",
"",
+"C1""Sherlock",
+"C0""Paul Gilbert",
+"C0""Martin Kiewitz",
+"",
"C1""Sky",
"A0""Robert Goeffringmann",
"C0""Robert G\366ffringmann",
@@ -398,6 +410,9 @@ static const char *credits[] = {
"C1""Wii",
"C0""Andre Heider",
"",
+"C1""Raspberry Pi",
+"C0""Manuel Alfayate",
+"",
"",
"C1""Other subsystems",
"C1""Infrastructure",
@@ -872,5 +887,7 @@ static const char *credits[] = {
"C0""",
"C0""Bob Bell, Michel Kripalani, Tommy Yune, from Presto Studios for providing the source code of The Journeyman Project: Pegasus Prime.",
"C0""",
+"C0""Electronic Arts IP Preservation Team, particularly Stefan Serbicki, and Vasyl Tsvirkunov of Electronic Arts for providing the source code of the two Lost Files of Sherlock Holmes games. James M. Ferguson and Barry Duncan for their tenacious efforts to recover the sources.",
+"C0""",
"",
};
diff --git a/gui/filebrowser-dialog.cpp b/gui/filebrowser-dialog.cpp
new file mode 100644
index 0000000000..93395ba909
--- /dev/null
+++ b/gui/filebrowser-dialog.cpp
@@ -0,0 +1,160 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * 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 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.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "gui/filebrowser-dialog.h"
+
+#include "common/system.h"
+#include "common/algorithm.h"
+#include "common/savefile.h"
+#include "common/str-array.h"
+
+#include "common/translation.h"
+
+#include "gui/widgets/list.h"
+#include "gui/message.h"
+
+namespace GUI {
+
+enum {
+ kChooseCmd = 'Chos'
+};
+
+FileBrowserDialog::FileBrowserDialog(const char *title, const char *fileExtension, int mode)
+ : Dialog("FileBrowser"), _mode(mode), _fileExt(fileExtension) {
+
+ _fileMask = "*.";
+ _fileMask += fileExtension;
+ _fileList = NULL;
+
+ new StaticTextWidget(this, "FileBrowser.Headline", title ? title :
+ mode == kFBModeLoad ? _("Choose file for loading") : _("Enter filename for saving"));
+
+ _fileName = new EditTextWidget(this, "FileBrowser.Filename", "");
+
+ if (mode == kFBModeLoad)
+ _fileName->setEnabled(false);
+
+ // Add file list
+ _fileList = new ListWidget(this, "FileBrowser.List");
+ _fileList->setNumberingMode(kListNumberingOff);
+ _fileList->setEditable(false);
+
+ _backgroundType = GUI::ThemeEngine::kDialogBackgroundPlain;
+
+ // Buttons
+ new ButtonWidget(this, "FileBrowser.Cancel", _("Cancel"), 0, kCloseCmd);
+ new ButtonWidget(this, "FileBrowser.Choose", _("Choose"), 0, kChooseCmd);
+}
+
+void FileBrowserDialog::open() {
+ // Call super implementation
+ Dialog::open();
+
+ updateListing();
+}
+
+void FileBrowserDialog::handleCommand(CommandSender *sender, uint32 cmd, uint32 data) {
+ switch (cmd) {
+ case kChooseCmd:
+ if (_fileName->getEditString().empty())
+ break;
+
+ normalieFileName();
+
+ if (!isProceedSave())
+ break;
+
+ setResult(1);
+ close();
+ break;
+ case kListSelectionChangedCmd:
+ _fileName->setEditString(_fileList->getList().operator[](_fileList->getSelected()).c_str());
+ _fileName->draw();
+ break;
+ case kListItemActivatedCmd:
+ case kListItemDoubleClickedCmd:
+ normalieFileName();
+
+ if (!isProceedSave())
+ break;
+
+ setResult(1);
+ close();
+ break;
+ default:
+ Dialog::handleCommand(sender, cmd, data);
+ }
+}
+
+void FileBrowserDialog::normalieFileName() {
+ Common::String filename = _fileName->getEditString();
+
+ if (filename.matchString(_fileMask))
+ return;
+
+ _fileName->setEditString(filename + "." + _fileExt);
+}
+
+
+bool FileBrowserDialog::isProceedSave() {
+ bool matched = false;
+
+ if (_mode == kFBModeLoad)
+ return true;
+
+ for (ListWidget::StringArray::const_iterator file = _fileList->getList().begin(); file != _fileList->getList().end(); ++file) {
+ if (*file == _fileName->getEditString()) {
+ matched = true;
+ break;
+ }
+ }
+
+ if (matched) {
+ GUI::MessageDialog alert(_("Do you really want to overwrite the file?"), _("Yes"), _("No"));
+
+ if (alert.runModal() != GUI::kMessageOK)
+ return false;
+ }
+
+ return true;
+}
+
+void FileBrowserDialog::updateListing() {
+ Common::SaveFileManager *saveFileMan = g_system->getSavefileManager();
+
+ ListWidget::StringArray list;
+
+ Common::StringArray filenames = saveFileMan->listSavefiles(_fileMask);
+ Common::sort(filenames.begin(), filenames.end());
+
+ for (Common::StringArray::const_iterator file = filenames.begin(); file != filenames.end(); ++file) {
+ list.push_back(file->c_str());
+ }
+
+ _fileList->setList(list);
+ _fileList->scrollTo(0);
+
+ // Finally, redraw
+ draw();
+}
+
+} // End of namespace GUI
diff --git a/gui/filebrowser-dialog.h b/gui/filebrowser-dialog.h
new file mode 100644
index 0000000000..5916d76c80
--- /dev/null
+++ b/gui/filebrowser-dialog.h
@@ -0,0 +1,64 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * 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 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.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef FILEBROWSER_DIALOG_H
+#define FILEBROWSER_DIALOG_H
+
+#include "gui/dialog.h"
+#include "gui/widgets/edittext.h"
+
+namespace GUI {
+
+class ListWidget;
+class EditTextWidget;
+class CommandSender;
+
+enum {
+ kFBModeLoad = 0,
+ kFBModeSave
+};
+
+class FileBrowserDialog : public Dialog {
+public:
+ FileBrowserDialog(const char *title, const char *fileExtension, int mode);
+
+ virtual void open();
+
+ virtual void handleCommand(CommandSender *sender, uint32 cmd, uint32 data);
+
+ const char *getResult() { return Dialog::getResult() ? _fileName->getEditString().c_str() : NULL; }
+
+protected:
+ EditTextWidget *_fileName;
+ ListWidget *_fileList;
+ Common::String _fileMask;
+ Common::String _fileExt;
+ int _mode;
+
+ void updateListing();
+ void normalieFileName();
+ bool isProceedSave();
+};
+
+} // End of namespace GUI
+
+#endif
diff --git a/gui/module.mk b/gui/module.mk
index 338e43c6a4..e355212620 100644
--- a/gui/module.mk
+++ b/gui/module.mk
@@ -8,6 +8,7 @@ MODULE_OBJS := \
dialog.o \
error.o \
EventRecorder.o \
+ filebrowser-dialog.o \
gui-manager.o \
launcher.o \
massadd.o \
diff --git a/gui/recorderdialog.cpp b/gui/recorderdialog.cpp
index 5617d2ba9a..2d74cebbb6 100644
--- a/gui/recorderdialog.cpp
+++ b/gui/recorderdialog.cpp
@@ -171,7 +171,7 @@ void RecorderDialog::handleCommand(CommandSender *sender, uint32 cmd, uint32 dat
const EnginePlugin *plugin = 0;
GameDescriptor desc = EngineMan.findGame(gameId, &plugin);
g_system->getTimeAndDate(t);
- EditRecordDialog editDlg("Unknown Author", Common::String::format("%.2d.%.2d.%.4d ", t.tm_mday, t.tm_mon, 1900 + t.tm_year) + desc.description(), "");
+ EditRecordDialog editDlg(_("Unknown Author"), Common::String::format("%.2d.%.2d.%.4d ", t.tm_mday, t.tm_mon, 1900 + t.tm_year) + desc.description(), "");
if (editDlg.runModal() != kOKCmd) {
return;
}
diff --git a/gui/themes/default.inc b/gui/themes/default.inc
index aa2a24bf00..90d7967bc0 100644
--- a/gui/themes/default.inc
+++ b/gui/themes/default.inc
@@ -1,5 +1,6 @@
- "<?xml version = '1.0'?>"
-"<render_info>"
+const char *defaultXML1 = "<?xml version = '1.0'?>"
+;
+ const char *defaultXML2 = "<render_info>"
"<palette>"
"<color name='black' "
"rgb='0,0,0' "
@@ -610,7 +611,8 @@
"/>"
"</drawdata>"
"</render_info>"
-"<layout_info resolution='y>399'>"
+;
+ const char *defaultXML3 = "<layout_info resolution='y>399'>"
"<globals>"
"<def var='Line.Height' value='16' />"
"<def var='Font.Height' value='16' />"
@@ -771,6 +773,28 @@
"</layout>"
"</layout>"
"</dialog>"
+"<dialog name='FileBrowser' overlays='screen' inset='32' shading='dim'>"
+"<layout type='vertical' padding='16,16,16,16'>"
+"<widget name='Headline' "
+"height='Globals.Line.Height' "
+"/>"
+"<widget name='Filename' "
+"height='Globals.Line.Height' "
+"/>"
+"<space size='10' />"
+"<widget name='List'/>"
+"<layout type='vertical' padding='0,0,16,0'>"
+"<layout type='horizontal' padding='0,0,0,0'>"
+"<widget name='Cancel' "
+"type='Button' "
+"/>"
+"<widget name='Choose' "
+"type='Button' "
+"/>"
+"</layout>"
+"</layout>"
+"</layout>"
+"</dialog>"
"<dialog name='GlobalOptions' overlays='Dialog.Launcher.GameList' shading='dim'>"
"<layout type='vertical' padding='0,0,0,0'>"
"<widget name='TabWidget'/>"
@@ -1873,7 +1897,8 @@
"</layout>"
"</dialog>"
"</layout_info>"
-"<layout_info resolution='y<400'>"
+;
+ const char *defaultXML4 = "<layout_info resolution='y<400'>"
"<globals>"
"<def var='Line.Height' value='12' />"
"<def var='Font.Height' value='10' />"
@@ -2031,6 +2056,28 @@
"</layout>"
"</layout>"
"</dialog>"
+"<dialog name='FileBrowser' overlays='screen' inset='16' shading='dim'>"
+"<layout type='vertical' padding='16,16,16,16'>"
+"<widget name='Headline' "
+"height='Globals.Line.Height' "
+"/>"
+"<widget name='Filename' "
+"height='Globals.Line.Height' "
+"/>"
+"<space size='5' />"
+"<widget name='List'/>"
+"<layout type='vertical' padding='0,0,16,0'>"
+"<layout type='horizontal' padding='0,0,0,0'>"
+"<widget name='Cancel' "
+"type='Button' "
+"/>"
+"<widget name='Choose' "
+"type='Button' "
+"/>"
+"</layout>"
+"</layout>"
+"</layout>"
+"</dialog>"
"<dialog name='GlobalOptions' overlays='screen' inset='16' shading='dim'>"
"<layout type='vertical' padding='0,0,0,0'>"
"<widget name='TabWidget'/>"
@@ -3105,3 +3152,5 @@
"</layout>"
"</dialog>"
"</layout_info>"
+;
+const char *defaultXML[] = { defaultXML1, defaultXML2, defaultXML3, defaultXML4 };
diff --git a/gui/themes/scummclassic.zip b/gui/themes/scummclassic.zip
index 1b555a6c27..d7016cab58 100644
--- a/gui/themes/scummclassic.zip
+++ b/gui/themes/scummclassic.zip
Binary files differ
diff --git a/gui/themes/scummclassic/classic_layout.stx b/gui/themes/scummclassic/classic_layout.stx
index cf8268696d..26656deaf9 100644
--- a/gui/themes/scummclassic/classic_layout.stx
+++ b/gui/themes/scummclassic/classic_layout.stx
@@ -196,6 +196,29 @@
</layout>
</dialog>
+ <dialog name = 'FileBrowser' overlays = 'screen' inset = '32' shading = 'dim'>
+ <layout type = 'vertical' padding = '16, 16, 16, 16'>
+ <widget name = 'Headline'
+ height = 'Globals.Line.Height'
+ />
+ <widget name = 'Filename'
+ height = 'Globals.Line.Height'
+ />
+ <space size = '10' />
+ <widget name = 'List'/>
+ <layout type = 'vertical' padding = '0, 0, 16, 0'>
+ <layout type = 'horizontal' padding = '0, 0, 0, 0'>
+ <widget name = 'Cancel'
+ type = 'Button'
+ />
+ <widget name = 'Choose'
+ type = 'Button'
+ />
+ </layout>
+ </layout>
+ </layout>
+ </dialog>
+
<dialog name = 'GlobalOptions' overlays = 'Dialog.Launcher.GameList' shading = 'dim'>
<layout type = 'vertical' padding = '0, 0, 0, 0'>
<widget name = 'TabWidget'/>
@@ -673,7 +696,7 @@
/>
</layout>
</dialog>
-
+
<dialog name = 'GlobalMenu' overlays = 'screen_center'>
<layout type = 'vertical' padding = '16, 16, 16, 16' center = 'true'>
<widget name = 'Title'
@@ -1040,7 +1063,7 @@
width = '180'
height = '170'
/>
- <layout type = 'horizontal' padding = '0, 0, 0, 0'>
+ <layout type = 'horizontal' padding = '0, 0, 0, 0'>
<widget name = 'NextScreenShotButton'
width = '25'
height = '25'
@@ -1115,15 +1138,15 @@
<layout type = 'horizontal' spacing = '5' padding = '0, 0, 0, 10'>
<widget name = 'AuthorLabel'
type = 'EditRecordLabel'
- />
+ />
<widget name = 'AuthorEdit'
type = 'EditRecord'
- />
+ />
</layout>
<layout type = 'horizontal' spacing = '5' padding = '0, 0, 0, 10'>
<widget name = 'NameLabel'
type = 'EditRecordLabel'
- />
+ />
<widget name = 'NameEdit'
type = 'EditRecord'
/>
@@ -1142,11 +1165,11 @@
/>
<widget name = 'OK'
type = 'Button'
- />
+ />
</layout>
</layout>
</dialog>
-
+
<dialog name = 'ScummHelp' overlays = 'screen_center'>
<layout type = 'vertical' padding = '8, 8, 8, 8' center = 'true'>
<widget name = 'Title'
@@ -1250,7 +1273,7 @@
<layout type = 'horizontal' padding = '5, 5, 5, 5'>
<widget name = 'Word'
width = '190'
- height = 'Globals.Button.Height'
+ height = 'Globals.Button.Height'
/>
<widget name = 'Delete'
width = '20'
@@ -1315,7 +1338,7 @@
/>
</layout>
<space size = '5' />
- <layout type = 'horizontal' padding = '3, 3, 3, 3'>
+ <layout type = 'horizontal' padding = '3, 3, 3, 3'>
<widget name = 'Add'
width = 'Globals.Predictive.Button.Width'
height = 'Globals.Button.Height'
diff --git a/gui/themes/scummclassic/classic_layout_lowres.stx b/gui/themes/scummclassic/classic_layout_lowres.stx
index 506657ef31..60057fa4ba 100644
--- a/gui/themes/scummclassic/classic_layout_lowres.stx
+++ b/gui/themes/scummclassic/classic_layout_lowres.stx
@@ -193,6 +193,29 @@
</layout>
</dialog>
+ <dialog name = 'FileBrowser' overlays = 'screen' inset = '16' shading = 'dim'>
+ <layout type = 'vertical' padding = '16, 16, 16, 16'>
+ <widget name = 'Headline'
+ height = 'Globals.Line.Height'
+ />
+ <widget name = 'Filename'
+ height = 'Globals.Line.Height'
+ />
+ <space size = '5' />
+ <widget name = 'List'/>
+ <layout type = 'vertical' padding = '0, 0, 16, 0'>
+ <layout type = 'horizontal' padding = '0, 0, 0, 0'>
+ <widget name = 'Cancel'
+ type = 'Button'
+ />
+ <widget name = 'Choose'
+ type = 'Button'
+ />
+ </layout>
+ </layout>
+ </layout>
+ </dialog>
+
<dialog name = 'GlobalOptions' overlays = 'screen' inset = '16' shading = 'dim'>
<layout type = 'vertical' padding = '0, 0, 0, 0'>
<widget name = 'TabWidget'/>
@@ -685,7 +708,7 @@
/>
</layout>
</dialog>
-
+
<dialog name = 'GlobalMenu' overlays = 'screen_center'>
<layout type = 'vertical' padding = '2, 2, 2, 6' center = 'true' spacing='0'>
<widget name = 'Title'
@@ -1086,15 +1109,15 @@
<layout type = 'horizontal' spacing = '5' padding = '0, 0, 0, 10'>
<widget name = 'AuthorLabel'
type = 'EditRecordLabel'
- />
+ />
<widget name = 'AuthorEdit'
type = 'EditRecord'
- />
+ />
</layout>
<layout type = 'horizontal' spacing = '5' padding = '0, 0, 0, 10'>
<widget name = 'NameLabel'
type = 'EditRecordLabel'
- />
+ />
<widget name = 'NameEdit'
type = 'EditRecord'
/>
@@ -1113,7 +1136,7 @@
/>
<widget name = 'OK'
type = 'Button'
- />
+ />
</layout>
</layout>
</dialog>
@@ -1220,7 +1243,7 @@
<layout type = 'horizontal' padding = '3, 3, 3, 3'>
<widget name = 'Word'
width = '120'
- height = 'Globals.Button.Height'
+ height = 'Globals.Button.Height'
/>
<widget name = 'Delete'
width = '20'
diff --git a/gui/themes/scummmodern.zip b/gui/themes/scummmodern.zip
index c7c585654d..5bf1b8e17d 100644
--- a/gui/themes/scummmodern.zip
+++ b/gui/themes/scummmodern.zip
Binary files differ
diff --git a/gui/themes/scummmodern/scummmodern_layout.stx b/gui/themes/scummmodern/scummmodern_layout.stx
index 7e61d6820e..3254049c62 100644
--- a/gui/themes/scummmodern/scummmodern_layout.stx
+++ b/gui/themes/scummmodern/scummmodern_layout.stx
@@ -67,7 +67,7 @@
<widget name = 'Button'
size = '108, 24'
- />
+ />
<widget name = 'Slider'
size = '128, 18'
@@ -210,6 +210,29 @@
</layout>
</dialog>
+ <dialog name = 'FileBrowser' overlays = 'screen' inset = '32' shading = 'dim'>
+ <layout type = 'vertical' padding = '16, 16, 16, 16'>
+ <widget name = 'Headline'
+ height = 'Globals.Line.Height'
+ />
+ <widget name = 'Filename'
+ height = 'Globals.Line.Height'
+ />
+ <space size = '10' />
+ <widget name = 'List'/>
+ <layout type = 'vertical' padding = '0, 0, 16, 0'>
+ <layout type = 'horizontal' padding = '0, 0, 0, 0'>
+ <widget name = 'Cancel'
+ type = 'Button'
+ />
+ <widget name = 'Choose'
+ type = 'Button'
+ />
+ </layout>
+ </layout>
+ </layout>
+ </dialog>
+
<dialog name = 'GlobalOptions' overlays = 'Dialog.Launcher.GameList' shading = 'dim'>
<layout type = 'vertical' padding = '0, 0, 0, 0'>
<widget name = 'TabWidget'/>
@@ -687,7 +710,7 @@
/>
</layout>
</dialog>
-
+
<dialog name = 'GlobalMenu' overlays = 'screen_center'>
<layout type = 'vertical' padding = '16, 16, 16, 16' center = 'true'>
<widget name = 'Logo'
@@ -1054,7 +1077,7 @@
width = '180'
height = '170'
/>
- <layout type = 'horizontal' padding = '0, 0, 0, 0'>
+ <layout type = 'horizontal' padding = '0, 0, 0, 0'>
<widget name = 'NextScreenShotButton'
width = '25'
height = '25'
@@ -1130,15 +1153,15 @@
<layout type = 'horizontal' spacing = '5' padding = '0, 0, 0, 10'>
<widget name = 'AuthorLabel'
type = 'EditRecordLabel'
- />
+ />
<widget name = 'AuthorEdit'
type = 'EditRecord'
- />
+ />
</layout>
<layout type = 'horizontal' spacing = '5' padding = '0, 0, 0, 10'>
<widget name = 'NameLabel'
type = 'EditRecordLabel'
- />
+ />
<widget name = 'NameEdit'
type = 'EditRecord'
/>
@@ -1157,11 +1180,11 @@
/>
<widget name = 'OK'
type = 'Button'
- />
+ />
</layout>
</layout>
</dialog>
-
+
<dialog name = 'ScummHelp' overlays = 'screen_center'>
<layout type = 'vertical' padding = '8, 8, 8, 8' center = 'true'>
<widget name = 'Title'
@@ -1252,7 +1275,7 @@
type = 'Button'
/>
</layout>
- </dialog>
+ </dialog>
<dialog name = 'Predictive' overlays = 'screen_center'>
<layout type = 'vertical' padding = '5, 5, 5, 5' center = 'true'>
<widget name = 'Headline'
@@ -1264,7 +1287,7 @@
<layout type = 'horizontal' padding = '5, 5, 5, 5'>
<widget name = 'Word'
width = '190'
- height = 'Globals.Button.Height'
+ height = 'Globals.Button.Height'
/>
<widget name = 'Delete'
width = '20'
diff --git a/gui/themes/scummmodern/scummmodern_layout_lowres.stx b/gui/themes/scummmodern/scummmodern_layout_lowres.stx
index cee1e4af2b..2b4dc099a0 100644
--- a/gui/themes/scummmodern/scummmodern_layout_lowres.stx
+++ b/gui/themes/scummmodern/scummmodern_layout_lowres.stx
@@ -191,6 +191,29 @@
</layout>
</dialog>
+ <dialog name = 'FileBrowser' overlays = 'screen' inset = '16' shading = 'dim'>
+ <layout type = 'vertical' padding = '16, 16, 16, 16'>
+ <widget name = 'Headline'
+ height = 'Globals.Line.Height'
+ />
+ <widget name = 'Filename'
+ height = 'Globals.Line.Height'
+ />
+ <space size = '5' />
+ <widget name = 'List'/>
+ <layout type = 'vertical' padding = '0, 0, 16, 0'>
+ <layout type = 'horizontal' padding = '0, 0, 0, 0'>
+ <widget name = 'Cancel'
+ type = 'Button'
+ />
+ <widget name = 'Choose'
+ type = 'Button'
+ />
+ </layout>
+ </layout>
+ </layout>
+ </dialog>
+
<dialog name = 'GlobalOptions' overlays = 'screen' inset = '16' shading = 'dim'>
<layout type = 'vertical' padding = '0, 0, 0, 0'>
<widget name = 'TabWidget'/>
@@ -683,7 +706,7 @@
/>
</layout>
</dialog>
-
+
<dialog name = 'GlobalMenu' overlays = 'screen_center'>
<layout type = 'vertical' padding = '4, 4, 4, 4' center = 'true' spacing='2'>
<widget name = 'Title'
@@ -1105,15 +1128,15 @@
<layout type = 'horizontal' spacing = '5' padding = '0, 0, 0, 10'>
<widget name = 'AuthorLabel'
type = 'EditRecordLabel'
- />
+ />
<widget name = 'AuthorEdit'
type = 'EditRecord'
- />
+ />
</layout>
<layout type = 'horizontal' spacing = '5' padding = '0, 0, 0, 10'>
<widget name = 'NameLabel'
type = 'EditRecordLabel'
- />
+ />
<widget name = 'NameEdit'
type = 'EditRecord'
/>
@@ -1132,11 +1155,11 @@
/>
<widget name = 'OK'
type = 'Button'
- />
+ />
</layout>
</layout>
</dialog>
-
+
<dialog name = 'ScummHelp' overlays = 'screen' inset = '8'>
<layout type = 'vertical' padding = '8, 8, 8, 8'>
<widget name = 'Title'
@@ -1237,7 +1260,7 @@
<layout type = 'horizontal' padding = '0, 0, 2, 2'>
<widget name = 'Word'
width = '120'
- height = 'Globals.Button.Height'
+ height = 'Globals.Button.Height'
/>
<widget name = 'Delete'
width = '20'
diff --git a/gui/themes/scummtheme.py b/gui/themes/scummtheme.py
index 94dc08f1ef..d5fa4dfca7 100755
--- a/gui/themes/scummtheme.py
+++ b/gui/themes/scummtheme.py
@@ -35,11 +35,15 @@ def buildAllThemes():
if os.path.isdir(os.path.join('.', f)) and not f[0] == '.':
buildTheme(f)
-def parseSTX(theme_file, def_file):
+def parseSTX(theme_file, def_file, subcount):
comm = re.compile("<!--(.*?)-->", re.DOTALL)
head = re.compile("<\?(.*?)\?>")
strlitcount = 0
+ subcount += 1
+
+ def_file.write(";\n const char *defaultXML" + str(subcount) + " = ")
+
output = ""
for line in theme_file:
output += line.rstrip("\r\n\t ").lstrip()
@@ -55,8 +59,12 @@ def parseSTX(theme_file, def_file):
for line in output.splitlines():
if line and not line.isspace():
strlitcount += len(line)
+ if strlitcount > 65535:
+ subcount += 1
+ def_file.write(";\n const char *defaultXML" + str(subcount) + " = ")
+ strlitcount = len(line)
def_file.write("\"" + line + "\"\n")
- return strlitcount
+ return subcount
def buildDefTheme(themeName):
def_file = open("default.inc", "w")
@@ -64,8 +72,8 @@ def buildDefTheme(themeName):
if not os.path.isdir(themeName):
print ("Cannot open default theme dir.")
- def_file.write(""" "<?xml version = '1.0'?>"\n""")
- strlitcount = 24
+ def_file.write("""const char *defaultXML1 = "<?xml version = '1.0'?>"\n""")
+ subcount = 1
filenames = os.listdir(themeName)
filenames.sort()
@@ -73,16 +81,16 @@ def buildDefTheme(themeName):
filename = os.path.join(themeName, filename)
if os.path.isfile(filename) and filename.endswith(".stx"):
theme_file = open(filename, "r")
- strlitcount += parseSTX(theme_file, def_file)
+ subcount = parseSTX(theme_file, def_file, subcount)
theme_file.close()
- def_file.close()
+ def_file.write(";\nconst char *defaultXML[] = { defaultXML1")
+ for sub in range(2, subcount + 1):
+ def_file.write(", defaultXML" + str(sub))
- if strlitcount > 65535:
- print("WARNING: default.inc string literal is of length %d which exceeds the" % strlitcount)
- print(" maximum length of 65536 that C++ compilers are required to support.")
- print(" It is likely that bugs will occur dependent on compiler behaviour.")
- print(" To avoid this, reduce the size of the theme.")
+ def_file.write(" };\n")
+
+ def_file.close()
def printUsage():
print ("===============================")
diff --git a/gui/themes/translations.dat b/gui/themes/translations.dat
index 4f83477c13..f141524ba3 100644
--- a/gui/themes/translations.dat
+++ b/gui/themes/translations.dat
Binary files differ
diff --git a/gui/widgets/editable.cpp b/gui/widgets/editable.cpp
index af3e5e9b9a..2d929113b1 100644
--- a/gui/widgets/editable.cpp
+++ b/gui/widgets/editable.cpp
@@ -79,7 +79,7 @@ bool EditableWidget::tryInsertChar(byte c, int pos) {
void EditableWidget::handleTickle() {
uint32 time = g_system->getMillis();
- if (_caretTime < time) {
+ if (_caretTime < time && isEnabled()) {
_caretTime = time + kCaretBlinkTime;
drawCaret(_caretVisible);
}
@@ -90,6 +90,9 @@ bool EditableWidget::handleKeyDown(Common::KeyState state) {
bool dirty = false;
bool forcecaret = false;
+ if (!isEnabled())
+ return false;
+
// First remove caret
if (_caretVisible)
drawCaret(true);
diff --git a/gui/widgets/edittext.cpp b/gui/widgets/edittext.cpp
index 550b1bd153..1481bebae3 100644
--- a/gui/widgets/edittext.cpp
+++ b/gui/widgets/edittext.cpp
@@ -62,6 +62,9 @@ void EditTextWidget::reflowLayout() {
void EditTextWidget::handleMouseDown(int x, int y, int button, int clickCount) {
+ if (!isEnabled())
+ return;
+
// First remove caret
if (_caretVisible)
drawCaret(true);
diff --git a/image/codecs/msvideo1.cpp b/image/codecs/msvideo1.cpp
index 25d7395363..439f219fc5 100644
--- a/image/codecs/msvideo1.cpp
+++ b/image/codecs/msvideo1.cpp
@@ -30,14 +30,15 @@ namespace Image {
#define CHECK_STREAM_PTR(n) \
if ((stream.pos() + n) > stream.size() ) { \
- warning ("MS Video-1: Stream out of bounds (%d >= %d)", stream.pos() + n, stream.size()); \
+ warning ("MS Video-1: Stream out of bounds (%d >= %d) d%d", stream.pos() + n, stream.size(), n); \
return; \
}
MSVideo1Decoder::MSVideo1Decoder(uint16 width, uint16 height, byte bitsPerPixel) : Codec() {
_surface = new Graphics::Surface();
- // TODO: Specify the correct pixel format for 2Bpp mode.
- _surface->create(width, height, (bitsPerPixel == 8) ? Graphics::PixelFormat::createFormatCLUT8() : Graphics::PixelFormat(2, 0, 0, 0, 0, 0, 0, 0, 0));
+ _surface->create(width, height, (bitsPerPixel == 8) ? Graphics::PixelFormat::createFormatCLUT8() :
+ Graphics::PixelFormat(2, 5, 5, 5, 0, 10, 5, 0, 0));
+
_bitsPerPixel = bitsPerPixel;
}
@@ -125,13 +126,98 @@ void MSVideo1Decoder::decode8(Common::SeekableReadStream &stream) {
}
}
+void MSVideo1Decoder::decode16(Common::SeekableReadStream &stream) {
+ /* decoding parameters */
+ uint16 colors[8];
+ uint16 *pixels = (uint16 *)_surface->getPixels();
+ int32 stride = _surface->w;
+
+ int32 skip_blocks = 0;
+ int32 blocks_wide = _surface->w / 4;
+ int32 blocks_high = _surface->h / 4;
+ int32 total_blocks = blocks_wide * blocks_high;
+ int32 block_inc = 4;
+ int32 row_dec = stride + 4;
+
+ for (int32 block_y = blocks_high; block_y > 0; block_y--) {
+ int32 block_ptr = ((block_y * 4) - 1) * stride;
+ for (int32 block_x = blocks_wide; block_x > 0; block_x--) {
+ /* check if this block should be skipped */
+ if (skip_blocks) {
+ block_ptr += block_inc;
+ skip_blocks--;
+ total_blocks--;
+ continue;
+ }
+
+ int32 pixel_ptr = block_ptr;
+
+ /* get the next two bytes in the encoded data stream */
+ CHECK_STREAM_PTR(2);
+ byte byte_a = stream.readByte();
+ byte byte_b = stream.readByte();
+
+ /* check if the decode is finished */
+ if ((byte_a == 0) && (byte_b == 0) && (total_blocks == 0)) {
+ return;
+ } else if ((byte_b & 0xFC) == 0x84) {
+ /* skip code, but don't count the current block */
+ skip_blocks = ((byte_b - 0x84) << 8) + byte_a - 1;
+ } else if (byte_b < 0x80) {
+ /* 2- or 8-color encoding modes */
+ uint16 flags = (byte_b << 8) | byte_a;
+
+ CHECK_STREAM_PTR(4);
+ colors[0] = stream.readUint16LE();
+ colors[1] = stream.readUint16LE();
+
+ if (colors[0] & 0x8000) {
+ /* 8-color encoding */
+ CHECK_STREAM_PTR(12);
+ colors[2] = stream.readUint16LE();
+ colors[3] = stream.readUint16LE();
+ colors[4] = stream.readUint16LE();
+ colors[5] = stream.readUint16LE();
+ colors[6] = stream.readUint16LE();
+ colors[7] = stream.readUint16LE();
+
+ for (int pixel_y = 0; pixel_y < 4; pixel_y++) {
+ for (int pixel_x = 0; pixel_x < 4; pixel_x++, flags >>= 1)
+ pixels[pixel_ptr++] =
+ colors[((pixel_y & 0x2) << 1) +
+ (pixel_x & 0x2) + ((flags & 0x1) ^ 1)];
+ pixel_ptr -= row_dec;
+ }
+ } else {
+ /* 2-color encoding */
+ for (int pixel_y = 0; pixel_y < 4; pixel_y++) {
+ for (int pixel_x = 0; pixel_x < 4; pixel_x++, flags >>= 1)
+ pixels[pixel_ptr++] = colors[(flags & 0x1) ^ 1];
+ pixel_ptr -= row_dec;
+ }
+ }
+ } else {
+ /* otherwise, it's a 1-color block */
+ colors[0] = (byte_b << 8) | byte_a;
+
+ for (int pixel_y = 0; pixel_y < 4; pixel_y++) {
+ for (int pixel_x = 0; pixel_x < 4; pixel_x++)
+ pixels[pixel_ptr++] = colors[0];
+ pixel_ptr -= row_dec;
+ }
+ }
+
+ block_ptr += block_inc;
+ total_blocks--;
+ }
+ }
+}
+
const Graphics::Surface *MSVideo1Decoder::decodeFrame(Common::SeekableReadStream &stream) {
if (_bitsPerPixel == 8)
decode8(stream);
- else {
- // decode16(stream);
- error ("Unhandled MS Video-1 16bpp encoding");
- }
+ else
+ decode16(stream);
return _surface;
}
diff --git a/image/codecs/msvideo1.h b/image/codecs/msvideo1.h
index 2a6dcd0a9a..f52b1f3127 100644
--- a/image/codecs/msvideo1.h
+++ b/image/codecs/msvideo1.h
@@ -38,7 +38,7 @@ public:
~MSVideo1Decoder();
const Graphics::Surface *decodeFrame(Common::SeekableReadStream &stream);
- Graphics::PixelFormat getPixelFormat() const { return Graphics::PixelFormat::createFormatCLUT8(); }
+ Graphics::PixelFormat getPixelFormat() const { return _surface->format; }
private:
byte _bitsPerPixel;
@@ -46,7 +46,7 @@ private:
Graphics::Surface *_surface;
void decode8(Common::SeekableReadStream &stream);
- //void decode16(Common::SeekableReadStream &stream);
+ void decode16(Common::SeekableReadStream &stream);
};
} // End of namespace Image
diff --git a/po/POTFILES b/po/POTFILES
index 6a865060fc..e6afba7ad6 100644
--- a/po/POTFILES
+++ b/po/POTFILES
@@ -2,14 +2,19 @@
gui/about.cpp
gui/browser.cpp
+gui/browser_osx.mm
gui/chooser.cpp
+gui/editrecorddialog.cpp
gui/error.cpp
+gui/filebrowser-dialog.cpp
gui/gui-manager.cpp
gui/KeysDialog.h
gui/KeysDialog.cpp
gui/launcher.cpp
gui/massadd.cpp
+gui/onscreendialog.cpp
gui/options.cpp
+gui/predictivedialog.cpp
gui/recorderdialog.cpp
gui/saveload-dialog.cpp
gui/themebrowser.cpp
@@ -32,7 +37,7 @@ audio/musicplugin.cpp
audio/null.h
audio/null.cpp
audio/mods/paula.cpp
-audio/softsynth/adlib.cpp
+audio/adlib.cpp
audio/softsynth/appleiigs.cpp
audio/softsynth/sid.cpp
audio/softsynth/mt32.cpp
diff --git a/po/be_BY.po b/po/be_BY.po
index 37090afb42..5b22098c1c 100644
--- a/po/be_BY.po
+++ b/po/be_BY.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ScummVM 1.7.0git\n"
"Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n"
-"POT-Creation-Date: 2015-06-30 20:57+0100\n"
+"POT-Creation-Date: 2015-10-11 18:59+0100\n"
"PO-Revision-Date: 2014-07-02 17:22+0300\n"
"Last-Translator: Ivan Lukyanov <greencis@mail.ru>\n"
"Language-Team: Ivan Lukyanov <greencis@mail.ru>\n"
@@ -32,7 +32,7 @@ msgstr "Уключаныя ў білд опцыі:"
msgid "Available engines:"
msgstr "Даступныя рухавічкі:"
-#: gui/browser.cpp:68
+#: gui/browser.cpp:68 gui/browser_osx.mm:104
msgid "Show hidden files"
msgstr "Паказваць схаваныя файлы"
@@ -53,13 +53,14 @@ msgctxt "lowres"
msgid "Go up"
msgstr "Уверх"
-#: gui/browser.cpp:75 gui/chooser.cpp:46 gui/KeysDialog.cpp:43
-#: gui/launcher.cpp:351 gui/massadd.cpp:95 gui/options.cpp:1239
-#: gui/recorderdialog.cpp:70 gui/recorderdialog.cpp:156
-#: gui/saveload-dialog.cpp:216 gui/saveload-dialog.cpp:276
-#: gui/saveload-dialog.cpp:547 gui/saveload-dialog.cpp:931
-#: gui/themebrowser.cpp:55 gui/fluidsynth-dialog.cpp:152
-#: engines/engine.cpp:483 backends/platform/wii/options.cpp:48
+#: gui/browser.cpp:75 gui/chooser.cpp:46 gui/editrecorddialog.cpp:67
+#: gui/KeysDialog.cpp:43 gui/launcher.cpp:351 gui/massadd.cpp:95
+#: gui/options.cpp:1237 gui/predictivedialog.cpp:74 gui/recorderdialog.cpp:70
+#: gui/recorderdialog.cpp:156 gui/saveload-dialog.cpp:216
+#: gui/saveload-dialog.cpp:276 gui/saveload-dialog.cpp:547
+#: gui/saveload-dialog.cpp:931 gui/themebrowser.cpp:55
+#: gui/fluidsynth-dialog.cpp:152 engines/engine.cpp:483
+#: backends/platform/wii/options.cpp:48
#: backends/events/default/default-events.cpp:196
#: backends/events/default/default-events.cpp:218
#: engines/drascula/saveload.cpp:49 engines/parallaction/saveload.cpp:274
@@ -67,10 +68,27 @@ msgstr "Уверх"
msgid "Cancel"
msgstr "Адмена"
-#: gui/browser.cpp:76 gui/chooser.cpp:47 gui/themebrowser.cpp:56
+#: gui/browser.cpp:76 gui/browser_osx.mm:103 gui/chooser.cpp:47
+#: gui/themebrowser.cpp:56
msgid "Choose"
msgstr "Абраць"
+#: gui/editrecorddialog.cpp:58
+msgid "Author:"
+msgstr ""
+
+#: gui/editrecorddialog.cpp:59 gui/launcher.cpp:204
+msgid "Name:"
+msgstr "Назва:"
+
+#: gui/editrecorddialog.cpp:60
+msgid "Notes:"
+msgstr ""
+
+#: gui/editrecorddialog.cpp:68 gui/predictivedialog.cpp:75
+msgid "Ok"
+msgstr ""
+
#: gui/gui-manager.cpp:117 backends/keymapper/remap-dialog.cpp:53
#: engines/scumm/help.cpp:126 engines/scumm/help.cpp:141
#: engines/scumm/help.cpp:166 engines/scumm/help.cpp:192
@@ -103,7 +121,7 @@ msgid "Map"
msgstr "Прызначыць"
#: gui/KeysDialog.cpp:42 gui/launcher.cpp:352 gui/launcher.cpp:1048
-#: gui/launcher.cpp:1052 gui/massadd.cpp:92 gui/options.cpp:1240
+#: gui/launcher.cpp:1052 gui/massadd.cpp:92 gui/options.cpp:1238
#: gui/saveload-dialog.cpp:932 gui/fluidsynth-dialog.cpp:153
#: engines/engine.cpp:402 engines/engine.cpp:413
#: backends/platform/wii/options.cpp:47
@@ -165,10 +183,6 @@ msgctxt "lowres"
msgid "ID:"
msgstr "ID:"
-#: gui/launcher.cpp:204
-msgid "Name:"
-msgstr "Назва:"
-
#: gui/launcher.cpp:204 gui/launcher.cpp:206 gui/launcher.cpp:207
msgid "Full title of the game"
msgstr "Поўная назва гульні"
@@ -191,7 +205,7 @@ msgstr ""
"беларускую"
#: gui/launcher.cpp:212 gui/launcher.cpp:226 gui/options.cpp:87
-#: gui/options.cpp:737 gui/options.cpp:750 gui/options.cpp:1210
+#: gui/options.cpp:735 gui/options.cpp:748 gui/options.cpp:1208
#: audio/null.cpp:41
msgid "<default>"
msgstr "<па змаўчанні>"
@@ -213,11 +227,11 @@ msgstr "Платформа:"
msgid "Engine"
msgstr "Рухавічок"
-#: gui/launcher.cpp:245 gui/options.cpp:1073 gui/options.cpp:1090
+#: gui/launcher.cpp:245 gui/options.cpp:1071 gui/options.cpp:1088
msgid "Graphics"
msgstr "Графіка"
-#: gui/launcher.cpp:245 gui/options.cpp:1073 gui/options.cpp:1090
+#: gui/launcher.cpp:245 gui/options.cpp:1071 gui/options.cpp:1088
msgid "GFX"
msgstr "Грф"
@@ -230,7 +244,7 @@ msgctxt "lowres"
msgid "Override global graphic settings"
msgstr "Перакрыць глабальныя налады графікі"
-#: gui/launcher.cpp:257 gui/options.cpp:1096
+#: gui/launcher.cpp:257 gui/options.cpp:1094
msgid "Audio"
msgstr "Аўдыё"
@@ -243,11 +257,11 @@ msgctxt "lowres"
msgid "Override global audio settings"
msgstr "Перакрыць глабальныя налады аўдыё"
-#: gui/launcher.cpp:271 gui/options.cpp:1101
+#: gui/launcher.cpp:271 gui/options.cpp:1099
msgid "Volume"
msgstr "Гучнасць"
-#: gui/launcher.cpp:273 gui/options.cpp:1103
+#: gui/launcher.cpp:273 gui/options.cpp:1101
msgctxt "lowres"
msgid "Volume"
msgstr "Гучн"
@@ -261,7 +275,7 @@ msgctxt "lowres"
msgid "Override global volume settings"
msgstr "Перакрыць глабальныя налады гучнасці"
-#: gui/launcher.cpp:286 gui/options.cpp:1111
+#: gui/launcher.cpp:286 gui/options.cpp:1109
msgid "MIDI"
msgstr "MIDI"
@@ -274,7 +288,7 @@ msgctxt "lowres"
msgid "Override global MIDI settings"
msgstr "Перакрыць глабальныя налады MIDI"
-#: gui/launcher.cpp:300 gui/options.cpp:1117
+#: gui/launcher.cpp:300 gui/options.cpp:1115
msgid "MT-32"
msgstr "MT-32"
@@ -287,11 +301,11 @@ msgctxt "lowres"
msgid "Override global MT-32 settings"
msgstr "Перакрыць глабальныя налады MT-32"
-#: gui/launcher.cpp:314 gui/options.cpp:1124
+#: gui/launcher.cpp:314 gui/options.cpp:1122
msgid "Paths"
msgstr "Шляхі"
-#: gui/launcher.cpp:316 gui/options.cpp:1126
+#: gui/launcher.cpp:316 gui/options.cpp:1124
msgctxt "lowres"
msgid "Paths"
msgstr "Шляхі"
@@ -305,7 +319,7 @@ msgctxt "lowres"
msgid "Game Path:"
msgstr "Дзе гульня:"
-#: gui/launcher.cpp:330 gui/options.cpp:1150
+#: gui/launcher.cpp:330 gui/options.cpp:1148
msgid "Extra Path:"
msgstr "Дад. шлях:"
@@ -313,42 +327,42 @@ msgstr "Дад. шлях:"
msgid "Specifies path to additional data used by the game"
msgstr "Паказвае шлях да дадатковых файлаў, дадзеных для гульні"
-#: gui/launcher.cpp:332 gui/options.cpp:1152
+#: gui/launcher.cpp:332 gui/options.cpp:1150
msgctxt "lowres"
msgid "Extra Path:"
msgstr "Дад. шлях:"
-#: gui/launcher.cpp:339 gui/options.cpp:1134
+#: gui/launcher.cpp:339 gui/options.cpp:1132
msgid "Save Path:"
msgstr "Захаванні гульняў:"
#: gui/launcher.cpp:339 gui/launcher.cpp:341 gui/launcher.cpp:342
-#: gui/options.cpp:1134 gui/options.cpp:1136 gui/options.cpp:1137
+#: gui/options.cpp:1132 gui/options.cpp:1134 gui/options.cpp:1135
msgid "Specifies where your saved games are put"
msgstr "Паказвае шлях да захаванняў гульні"
-#: gui/launcher.cpp:341 gui/options.cpp:1136
+#: gui/launcher.cpp:341 gui/options.cpp:1134
msgctxt "lowres"
msgid "Save Path:"
msgstr "Шлях зах.:"
#: gui/launcher.cpp:360 gui/launcher.cpp:459 gui/launcher.cpp:517
-#: gui/launcher.cpp:571 gui/options.cpp:1145 gui/options.cpp:1153
-#: gui/options.cpp:1162 gui/options.cpp:1277 gui/options.cpp:1283
-#: gui/options.cpp:1291 gui/options.cpp:1321 gui/options.cpp:1327
-#: gui/options.cpp:1334 gui/options.cpp:1427 gui/options.cpp:1430
-#: gui/options.cpp:1442
+#: gui/launcher.cpp:571 gui/options.cpp:1143 gui/options.cpp:1151
+#: gui/options.cpp:1160 gui/options.cpp:1275 gui/options.cpp:1281
+#: gui/options.cpp:1289 gui/options.cpp:1319 gui/options.cpp:1325
+#: gui/options.cpp:1332 gui/options.cpp:1425 gui/options.cpp:1428
+#: gui/options.cpp:1440
msgctxt "path"
msgid "None"
msgstr "Не зададзены"
#: gui/launcher.cpp:365 gui/launcher.cpp:465 gui/launcher.cpp:575
-#: gui/options.cpp:1271 gui/options.cpp:1315 gui/options.cpp:1433
+#: gui/options.cpp:1269 gui/options.cpp:1313 gui/options.cpp:1431
#: backends/platform/wii/options.cpp:56
msgid "Default"
msgstr "Па змаўчанні"
-#: gui/launcher.cpp:510 gui/options.cpp:1436
+#: gui/launcher.cpp:510 gui/options.cpp:1434
msgid "Select SoundFont"
msgstr "Абярыце SoundFont"
@@ -360,7 +374,7 @@ msgstr "Абярыце дырэкторыю з файламі гульні"
msgid "Select additional game directory"
msgstr "Абярыце дадатковую дырэкторыю гульні"
-#: gui/launcher.cpp:559 gui/options.cpp:1379
+#: gui/launcher.cpp:559 gui/options.cpp:1377
msgid "Select directory for saved games"
msgstr "Абярыце дырэкторыю для захаванняў"
@@ -557,6 +571,24 @@ msgstr "Прагледжана %d дырэкторый..."
msgid "Discovered %d new games, ignored %d previously added games ..."
msgstr "Знойдзена %d новых гульняў, прапушчана %d раней дададзеных гульняў..."
+#: gui/onscreendialog.cpp:101 gui/onscreendialog.cpp:103
+msgid "Stop"
+msgstr ""
+
+#: gui/onscreendialog.cpp:106
+msgid "Edit record description"
+msgstr ""
+
+#: gui/onscreendialog.cpp:108
+#, fuzzy
+msgid "Switch to Game"
+msgstr "Пераключыць"
+
+#: gui/onscreendialog.cpp:110
+#, fuzzy
+msgid "Fast replay"
+msgstr "Хуткі рэжым"
+
#: gui/options.cpp:85
msgid "Never"
msgstr "Ніколі"
@@ -597,8 +629,8 @@ msgstr "44 кГц"
msgid "48 kHz"
msgstr "48 кГц"
-#: gui/options.cpp:255 gui/options.cpp:481 gui/options.cpp:582
-#: gui/options.cpp:651 gui/options.cpp:859
+#: gui/options.cpp:255 gui/options.cpp:479 gui/options.cpp:580
+#: gui/options.cpp:649 gui/options.cpp:857
msgctxt "soundfont"
msgid "None"
msgstr "Не зададзены"
@@ -619,70 +651,70 @@ msgstr "поўнаэкранны рэжым не можа быць зменены"
msgid "the aspect ratio setting could not be changed"
msgstr "рэжым карэктыроўкі суадносін бакоў не можа быць зменены"
-#: gui/options.cpp:734
+#: gui/options.cpp:732
msgid "Graphics mode:"
msgstr "Граф. рэжым:"
-#: gui/options.cpp:748
+#: gui/options.cpp:746
msgid "Render mode:"
msgstr "Рэжым растру:"
-#: gui/options.cpp:748 gui/options.cpp:749
+#: gui/options.cpp:746 gui/options.cpp:747
msgid "Special dithering modes supported by some games"
msgstr "Спецыяльныя рэжымы рэндэрынгу, падтрымоўваныя некаторымі гульнямі"
-#: gui/options.cpp:760
+#: gui/options.cpp:758
#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2298
msgid "Fullscreen mode"
msgstr "Поўнаэкранны рэжым"
-#: gui/options.cpp:763
+#: gui/options.cpp:761
msgid "Aspect ratio correction"
msgstr "Карэкцыя суадносін бакоў"
-#: gui/options.cpp:763
+#: gui/options.cpp:761
msgid "Correct aspect ratio for 320x200 games"
msgstr "Карэктаваць суадносіны бакоў для гульняў з адрозненнем 320x200"
-#: gui/options.cpp:771
+#: gui/options.cpp:769
msgid "Preferred Device:"
msgstr "Упадабаная прылада:"
-#: gui/options.cpp:771
+#: gui/options.cpp:769
msgid "Music Device:"
msgstr "Гукавая прылада:"
-#: gui/options.cpp:771 gui/options.cpp:773
+#: gui/options.cpp:769 gui/options.cpp:771
msgid "Specifies preferred sound device or sound card emulator"
msgstr "Зазначае ўпадабаную гукавую прыладу ці эмулятар гукавой карты"
-#: gui/options.cpp:771 gui/options.cpp:773 gui/options.cpp:774
+#: gui/options.cpp:769 gui/options.cpp:771 gui/options.cpp:772
msgid "Specifies output sound device or sound card emulator"
msgstr "Зазначае выходную гукавую прыладу ці эмулятар гукавой карты"
-#: gui/options.cpp:773
+#: gui/options.cpp:771
msgctxt "lowres"
msgid "Preferred Dev.:"
msgstr "Упадабаная:"
-#: gui/options.cpp:773
+#: gui/options.cpp:771
msgctxt "lowres"
msgid "Music Device:"
msgstr "Гук. прылада:"
-#: gui/options.cpp:800
+#: gui/options.cpp:798
msgid "AdLib emulator:"
msgstr "Эмулятар AdLib:"
-#: gui/options.cpp:800 gui/options.cpp:801
+#: gui/options.cpp:798 gui/options.cpp:799
msgid "AdLib is used for music in many games"
msgstr "Гукавая карта AdLib выкарыстоўваецца многімі гульнямі"
-#: gui/options.cpp:811
+#: gui/options.cpp:809
msgid "Output rate:"
msgstr "Чашчыня гуку:"
-#: gui/options.cpp:811 gui/options.cpp:812
+#: gui/options.cpp:809 gui/options.cpp:810
msgid ""
"Higher value specifies better sound quality but may be not supported by your "
"soundcard"
@@ -690,68 +722,68 @@ msgstr ""
"Большыя значэнні задаюць лепшую якасць гуку, аднак яны могуць не "
"падтрымлівацца вашай гукавой картай"
-#: gui/options.cpp:822
+#: gui/options.cpp:820
msgid "GM Device:"
msgstr "Прылада GM:"
-#: gui/options.cpp:822
+#: gui/options.cpp:820
msgid "Specifies default sound device for General MIDI output"
msgstr "Зазначае выходную гукавую прыладу для MIDI"
-#: gui/options.cpp:833
+#: gui/options.cpp:831
msgid "Don't use General MIDI music"
msgstr "Не выкарыстоўваць музыку для General MIDI"
-#: gui/options.cpp:844 gui/options.cpp:910
+#: gui/options.cpp:842 gui/options.cpp:908
msgid "Use first available device"
msgstr "Выкарыстоўваць першую даступную прыладу"
-#: gui/options.cpp:856
+#: gui/options.cpp:854
msgid "SoundFont:"
msgstr "SoundFont:"
-#: gui/options.cpp:856 gui/options.cpp:858 gui/options.cpp:859
+#: gui/options.cpp:854 gui/options.cpp:856 gui/options.cpp:857
msgid "SoundFont is supported by some audio cards, FluidSynth and Timidity"
msgstr ""
"SoundFont'ы падтрымліваюцца некаторымі гукавымі картамі, FluidSynth ды "
"Timidity"
-#: gui/options.cpp:858
+#: gui/options.cpp:856
msgctxt "lowres"
msgid "SoundFont:"
msgstr "SoundFont:"
-#: gui/options.cpp:864
+#: gui/options.cpp:862
msgid "Mixed AdLib/MIDI mode"
msgstr "Змешаны рэжым AdLib/MIDI"
-#: gui/options.cpp:864
+#: gui/options.cpp:862
msgid "Use both MIDI and AdLib sound generation"
msgstr "Выкарыстоўваць і MIDI, і AdLib для генерацыі гуку"
-#: gui/options.cpp:867
+#: gui/options.cpp:865
msgid "MIDI gain:"
msgstr "Узмацненне MIDI:"
-#: gui/options.cpp:874
+#: gui/options.cpp:872
msgid "FluidSynth Settings"
msgstr "Налады FluidSynth"
-#: gui/options.cpp:881
+#: gui/options.cpp:879
msgid "MT-32 Device:"
msgstr "Нал. MT-32:"
-#: gui/options.cpp:881
+#: gui/options.cpp:879
msgid "Specifies default sound device for Roland MT-32/LAPC1/CM32l/CM64 output"
msgstr ""
"Паказвае гукавую прыладу па змаўчанні для вываду на Roland MT-32/LAPC1/CM32l/"
"CM64"
-#: gui/options.cpp:886
+#: gui/options.cpp:884
msgid "True Roland MT-32 (disable GM emulation)"
msgstr "Сапраўдны Roland MT-32 (забараніць эмуляцыю GM)"
-#: gui/options.cpp:886 gui/options.cpp:888
+#: gui/options.cpp:884 gui/options.cpp:886
msgid ""
"Check if you want to use your real hardware Roland-compatible sound device "
"connected to your computer"
@@ -759,16 +791,16 @@ msgstr ""
"Адзначце, калі ў вас падключана Roland-сумяшчальная гукавая прылада і вы "
"жадаеце яе выкарыстоўваць"
-#: gui/options.cpp:888
+#: gui/options.cpp:886
msgctxt "lowres"
msgid "True Roland MT-32 (no GM emulation)"
msgstr "Сапраўдны Roland MT-32 (без эмуляцыі GM)"
-#: gui/options.cpp:891
+#: gui/options.cpp:889
msgid "Roland GS Device (enable MT-32 mappings)"
msgstr "Рэжым Roland GS (дазволіць мапінг MT-32)"
-#: gui/options.cpp:891
+#: gui/options.cpp:889
msgid ""
"Check if you want to enable patch mappings to emulate an MT-32 on a Roland "
"GS device"
@@ -776,175 +808,175 @@ msgstr ""
"Адзначце, калі жадаеце дазволіць мапінг для эмуляцыі MT-32 на прыладзе "
"Rolans GS"
-#: gui/options.cpp:900
+#: gui/options.cpp:898
msgid "Don't use Roland MT-32 music"
msgstr "Не выкарыстоўваць музыку для MT-32"
-#: gui/options.cpp:927
+#: gui/options.cpp:925
msgid "Text and Speech:"
msgstr "Тэкст і агучка:"
-#: gui/options.cpp:931 gui/options.cpp:941
+#: gui/options.cpp:929 gui/options.cpp:939
msgid "Speech"
msgstr "Агучка"
-#: gui/options.cpp:932 gui/options.cpp:942
+#: gui/options.cpp:930 gui/options.cpp:940
msgid "Subtitles"
msgstr "Субтытры"
-#: gui/options.cpp:933
+#: gui/options.cpp:931
msgid "Both"
msgstr "Абое"
-#: gui/options.cpp:935
+#: gui/options.cpp:933
msgid "Subtitle speed:"
msgstr "Хуткасць тытраў:"
-#: gui/options.cpp:937
+#: gui/options.cpp:935
msgctxt "lowres"
msgid "Text and Speech:"
msgstr "Тэкст і агучка:"
-#: gui/options.cpp:941
+#: gui/options.cpp:939
msgid "Spch"
msgstr "Агуч"
-#: gui/options.cpp:942
+#: gui/options.cpp:940
msgid "Subs"
msgstr "Суб"
-#: gui/options.cpp:943
+#: gui/options.cpp:941
msgctxt "lowres"
msgid "Both"
msgstr "Абое"
-#: gui/options.cpp:943
+#: gui/options.cpp:941
msgid "Show subtitles and play speech"
msgstr "Паказваць субтытры і прайграваць гаворку"
-#: gui/options.cpp:945
+#: gui/options.cpp:943
msgctxt "lowres"
msgid "Subtitle speed:"
msgstr "Хуткасць тытраў:"
-#: gui/options.cpp:961
+#: gui/options.cpp:959
msgid "Music volume:"
msgstr "Гучн. музыкі:"
-#: gui/options.cpp:963
+#: gui/options.cpp:961
msgctxt "lowres"
msgid "Music volume:"
msgstr "Гучн. музыкі:"
-#: gui/options.cpp:970
+#: gui/options.cpp:968
msgid "Mute All"
msgstr "Выкл. усё"
-#: gui/options.cpp:973
+#: gui/options.cpp:971
msgid "SFX volume:"
msgstr "Гучнасць SFX:"
-#: gui/options.cpp:973 gui/options.cpp:975 gui/options.cpp:976
+#: gui/options.cpp:971 gui/options.cpp:973 gui/options.cpp:974
msgid "Special sound effects volume"
msgstr "Гучнасць спецыяльных гукавых эфектаў"
-#: gui/options.cpp:975
+#: gui/options.cpp:973
msgctxt "lowres"
msgid "SFX volume:"
msgstr "Гучн. SFX:"
-#: gui/options.cpp:983
+#: gui/options.cpp:981
msgid "Speech volume:"
msgstr "Гучн. агучкі:"
-#: gui/options.cpp:985
+#: gui/options.cpp:983
msgctxt "lowres"
msgid "Speech volume:"
msgstr "Гучн. агучкі:"
-#: gui/options.cpp:1142
+#: gui/options.cpp:1140
msgid "Theme Path:"
msgstr "Шлях да тэм:"
-#: gui/options.cpp:1144
+#: gui/options.cpp:1142
msgctxt "lowres"
msgid "Theme Path:"
msgstr "Дзе тэмы:"
-#: gui/options.cpp:1150 gui/options.cpp:1152 gui/options.cpp:1153
+#: gui/options.cpp:1148 gui/options.cpp:1150 gui/options.cpp:1151
msgid "Specifies path to additional data used by all games or ScummVM"
msgstr ""
"Паказвае шлях да дадатковых файлаў дадзеных, выкарыстоўваных усімі гульнямі, "
"або ScummVM"
-#: gui/options.cpp:1159
+#: gui/options.cpp:1157
msgid "Plugins Path:"
msgstr "Шлях да плагінаў:"
-#: gui/options.cpp:1161
+#: gui/options.cpp:1159
msgctxt "lowres"
msgid "Plugins Path:"
msgstr "Шлях да плагінаў:"
-#: gui/options.cpp:1170 gui/fluidsynth-dialog.cpp:138
+#: gui/options.cpp:1168 gui/fluidsynth-dialog.cpp:138
msgid "Misc"
msgstr "Рознае"
-#: gui/options.cpp:1172
+#: gui/options.cpp:1170
msgctxt "lowres"
msgid "Misc"
msgstr "Рознае"
-#: gui/options.cpp:1174
+#: gui/options.cpp:1172
msgid "Theme:"
msgstr "Тэма"
-#: gui/options.cpp:1178
+#: gui/options.cpp:1176
msgid "GUI Renderer:"
msgstr "Малявалка GUI:"
-#: gui/options.cpp:1190
+#: gui/options.cpp:1188
msgid "Autosave:"
msgstr "Аўтазахаванне:"
-#: gui/options.cpp:1192
+#: gui/options.cpp:1190
msgctxt "lowres"
msgid "Autosave:"
msgstr "Аўтазах.:"
-#: gui/options.cpp:1200
+#: gui/options.cpp:1198
msgid "Keys"
msgstr "Клавішы"
-#: gui/options.cpp:1207
+#: gui/options.cpp:1205
msgid "GUI Language:"
msgstr "Мова GUI:"
-#: gui/options.cpp:1207
+#: gui/options.cpp:1205
msgid "Language of ScummVM GUI"
msgstr "Мова графічнага інтэрфейсу ScummVM"
-#: gui/options.cpp:1366
+#: gui/options.cpp:1364
msgid "You have to restart ScummVM before your changes will take effect."
msgstr "Вы павінны перазапусціць ScummVM, каб ужыць змены."
-#: gui/options.cpp:1386
+#: gui/options.cpp:1384
msgid "The chosen directory cannot be written to. Please select another one."
msgstr "Не магу пісаць у абраную дырэкторыю. Калі ласка, азначце іншую."
-#: gui/options.cpp:1395
+#: gui/options.cpp:1393
msgid "Select directory for GUI themes"
msgstr "Абярыце дырэкторыю для тэм GUI"
-#: gui/options.cpp:1405
+#: gui/options.cpp:1403
msgid "Select directory for extra files"
msgstr "Абярыце дырэкторыю з дадатковымі файламі"
-#: gui/options.cpp:1416
+#: gui/options.cpp:1414
msgid "Select directory for plugins"
msgstr "Абярыце дырэкторыю з плагінамі"
-#: gui/options.cpp:1469
+#: gui/options.cpp:1467
msgid ""
"The theme you selected does not support your current language. If you want "
"to use this theme you need to switch to another language first."
@@ -952,6 +984,29 @@ msgstr ""
"Тэма, абраная вамі, не падтрымлівае бягучую мову. Калі вы жадаеце "
"выкарыстоўваць гэтую тэму, вам неабходна спачатку пераключыцца на іншую мову."
+#. I18N: You must leave "#" as is, only word 'next' is translatable
+#: gui/predictivedialog.cpp:87
+msgid "# next"
+msgstr ""
+
+#: gui/predictivedialog.cpp:88
+msgid "add"
+msgstr ""
+
+#: gui/predictivedialog.cpp:92
+#, fuzzy
+msgid "Delete char"
+msgstr "Выдаліць"
+
+#: gui/predictivedialog.cpp:96
+msgid "<"
+msgstr ""
+
+#. I18N: Pre means 'Predictive', leave '*' as is
+#: gui/predictivedialog.cpp:98
+msgid "* Pre"
+msgstr ""
+
#: gui/recorderdialog.cpp:64
msgid "Recorder or Playback Gameplay"
msgstr ""
@@ -989,6 +1044,11 @@ msgstr ""
msgid "Do you really want to delete this record?"
msgstr "Вы сапраўды жадаеце выдаліць гэта захаванне?"
+#: gui/recorderdialog.cpp:174
+#, fuzzy
+msgid "Unknown Author"
+msgstr "Невядомая памылка"
+
#: gui/saveload-dialog.cpp:167
msgid "List view"
msgstr "Выгляд спісу"
@@ -1439,14 +1499,18 @@ msgstr ""
msgid "Start anyway"
msgstr "Усё адно запусціць"
-#: audio/fmopl.cpp:50
+#: audio/fmopl.cpp:62
msgid "MAME OPL emulator"
msgstr "Эмулятар MAME OPL"
-#: audio/fmopl.cpp:52
+#: audio/fmopl.cpp:64
msgid "DOSBox OPL emulator"
msgstr "Эмулятар DOSBox OPL"
+#: audio/fmopl.cpp:67
+msgid "ALSA Direct FM"
+msgstr ""
+
#: audio/mididrv.cpp:209
#, c-format
msgid ""
@@ -1496,7 +1560,7 @@ msgstr "Без музыкі"
msgid "Amiga Audio Emulator"
msgstr "Эмулятар гуку Amiga"
-#: audio/softsynth/adlib.cpp:2285
+#: audio/adlib.cpp:2291
msgid "AdLib Emulator"
msgstr "Эмулятар AdLib"
@@ -2128,14 +2192,13 @@ msgstr "Пстрычкі выключаны"
#: engines/agi/detection.cpp:147 engines/drascula/detection.cpp:302
#: engines/dreamweb/detection.cpp:47 engines/neverhood/detection.cpp:160
#: engines/sci/detection.cpp:394 engines/toltecs/detection.cpp:200
-#: engines/zvision/detection.cpp:246
+#: engines/zvision/detection_tables.h:51
msgid "Use original save/load screens"
msgstr "Выкарыстоўваць арыгінальныя экраны запісу/чытанні гульні"
#: engines/agi/detection.cpp:148 engines/drascula/detection.cpp:303
#: engines/dreamweb/detection.cpp:48 engines/neverhood/detection.cpp:161
#: engines/sci/detection.cpp:395 engines/toltecs/detection.cpp:201
-#: engines/zvision/detection.cpp:247
msgid "Use the original save/load screens, instead of the ScummVM ones"
msgstr ""
"Выкарыстоўваць арыгінальныя экраны запісу і захавання гульні замест "
@@ -3276,6 +3339,25 @@ msgstr "Ляцець направа"
msgid "Fly to lower right"
msgstr "Ляцець направа-ўніз"
+#: engines/scumm/input.cpp:572
+#, fuzzy
+msgid "Snap scroll on"
+msgstr "Плыўная прагортка"
+
+#: engines/scumm/input.cpp:574
+msgid "Snap scroll off"
+msgstr ""
+
+#: engines/scumm/input.cpp:587
+#, fuzzy
+msgid "Music volume: "
+msgstr "Гучн. музыкі:"
+
+#: engines/scumm/input.cpp:604
+#, fuzzy
+msgid "Subtitle speed: "
+msgstr "Хуткасць тытраў:"
+
#: engines/scumm/scumm.cpp:1832
#, c-format
msgid ""
@@ -3429,39 +3511,46 @@ msgstr ""
msgid "Show the current number of frames per second in the upper left corner"
msgstr ""
-#: engines/zvision/detection.cpp:256
+#: engines/zvision/detection_tables.h:52
+#, fuzzy
+msgid "Use the original save/load screens instead of the ScummVM interface"
+msgstr ""
+"Выкарыстоўваць арыгінальныя экраны запісу і захавання гульні замест "
+"зробленых у ScummVM"
+
+#: engines/zvision/detection_tables.h:61
msgid "Double FPS"
msgstr ""
-#: engines/zvision/detection.cpp:257
-msgid "Increase game FPS from 30 to 60"
+#: engines/zvision/detection_tables.h:62
+msgid "Increase framerate from 30 to 60 FPS"
msgstr ""
-#: engines/zvision/detection.cpp:266
+#: engines/zvision/detection_tables.h:71
#, fuzzy
msgid "Enable Venus"
msgstr "Уключыць рэжым гелія"
-#: engines/zvision/detection.cpp:267
+#: engines/zvision/detection_tables.h:72
+#, fuzzy
msgid "Enable the Venus help system"
-msgstr ""
+msgstr "Уключыць рэжым гелія"
-#: engines/zvision/detection.cpp:276
+#: engines/zvision/detection_tables.h:81
msgid "Disable animation while turning"
msgstr ""
-#: engines/zvision/detection.cpp:277
-msgid "Disable animation while turning in panoramic mode"
+#: engines/zvision/detection_tables.h:82
+msgid "Disable animation while turning in panorama mode"
msgstr ""
-#: engines/zvision/detection.cpp:286
-msgid "Use the hires MPEG movies"
+#: engines/zvision/detection_tables.h:91
+msgid "Use high resolution MPEG video"
msgstr ""
-#: engines/zvision/detection.cpp:287
+#: engines/zvision/detection_tables.h:92
#, fuzzy
-msgid ""
-"Use the hires MPEG movies of the DVD version, instead of the lowres AVI ones"
+msgid "Use MPEG video from the DVD version, instead of lower resolution AVI"
msgstr ""
"Выкарыстоўваць альтэрнатыўны набор срэбных курсораў замест звычайных залатых"
diff --git a/po/ca_ES.po b/po/ca_ES.po
index bfbc9b8c37..096990848c 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.sf.net\n"
-"POT-Creation-Date: 2015-06-30 20:57+0100\n"
+"POT-Creation-Date: 2015-10-11 18:59+0100\n"
"PO-Revision-Date: 2013-05-05 14:16+0100\n"
"Last-Translator: Jordi Vilalta Prat <jvprat@jvprat.com>\n"
"Language-Team: Catalan <scummvm-devel@lists.sf.net>\n"
@@ -29,7 +29,7 @@ msgstr "Caracterэstiques compilades:"
msgid "Available engines:"
msgstr "Motors disponibles:"
-#: gui/browser.cpp:68
+#: gui/browser.cpp:68 gui/browser_osx.mm:104
msgid "Show hidden files"
msgstr "Mostra els fitxers ocults"
@@ -50,13 +50,14 @@ msgctxt "lowres"
msgid "Go up"
msgstr "Amunt"
-#: gui/browser.cpp:75 gui/chooser.cpp:46 gui/KeysDialog.cpp:43
-#: gui/launcher.cpp:351 gui/massadd.cpp:95 gui/options.cpp:1239
-#: gui/recorderdialog.cpp:70 gui/recorderdialog.cpp:156
-#: gui/saveload-dialog.cpp:216 gui/saveload-dialog.cpp:276
-#: gui/saveload-dialog.cpp:547 gui/saveload-dialog.cpp:931
-#: gui/themebrowser.cpp:55 gui/fluidsynth-dialog.cpp:152
-#: engines/engine.cpp:483 backends/platform/wii/options.cpp:48
+#: gui/browser.cpp:75 gui/chooser.cpp:46 gui/editrecorddialog.cpp:67
+#: gui/KeysDialog.cpp:43 gui/launcher.cpp:351 gui/massadd.cpp:95
+#: gui/options.cpp:1237 gui/predictivedialog.cpp:74 gui/recorderdialog.cpp:70
+#: gui/recorderdialog.cpp:156 gui/saveload-dialog.cpp:216
+#: gui/saveload-dialog.cpp:276 gui/saveload-dialog.cpp:547
+#: gui/saveload-dialog.cpp:931 gui/themebrowser.cpp:55
+#: gui/fluidsynth-dialog.cpp:152 engines/engine.cpp:483
+#: backends/platform/wii/options.cpp:48
#: backends/events/default/default-events.cpp:196
#: backends/events/default/default-events.cpp:218
#: engines/drascula/saveload.cpp:49 engines/parallaction/saveload.cpp:274
@@ -64,10 +65,27 @@ msgstr "Amunt"
msgid "Cancel"
msgstr "CancelЗla"
-#: gui/browser.cpp:76 gui/chooser.cpp:47 gui/themebrowser.cpp:56
+#: gui/browser.cpp:76 gui/browser_osx.mm:103 gui/chooser.cpp:47
+#: gui/themebrowser.cpp:56
msgid "Choose"
msgstr "Escull"
+#: gui/editrecorddialog.cpp:58
+msgid "Author:"
+msgstr ""
+
+#: gui/editrecorddialog.cpp:59 gui/launcher.cpp:204
+msgid "Name:"
+msgstr "Nom:"
+
+#: gui/editrecorddialog.cpp:60
+msgid "Notes:"
+msgstr ""
+
+#: gui/editrecorddialog.cpp:68 gui/predictivedialog.cpp:75
+msgid "Ok"
+msgstr ""
+
#: gui/gui-manager.cpp:117 backends/keymapper/remap-dialog.cpp:53
#: engines/scumm/help.cpp:126 engines/scumm/help.cpp:141
#: engines/scumm/help.cpp:166 engines/scumm/help.cpp:192
@@ -100,7 +118,7 @@ msgid "Map"
msgstr "Assigna"
#: gui/KeysDialog.cpp:42 gui/launcher.cpp:352 gui/launcher.cpp:1048
-#: gui/launcher.cpp:1052 gui/massadd.cpp:92 gui/options.cpp:1240
+#: gui/launcher.cpp:1052 gui/massadd.cpp:92 gui/options.cpp:1238
#: gui/saveload-dialog.cpp:932 gui/fluidsynth-dialog.cpp:153
#: engines/engine.cpp:402 engines/engine.cpp:413
#: backends/platform/wii/options.cpp:47
@@ -162,10 +180,6 @@ msgctxt "lowres"
msgid "ID:"
msgstr "ID:"
-#: gui/launcher.cpp:204
-msgid "Name:"
-msgstr "Nom:"
-
#: gui/launcher.cpp:204 gui/launcher.cpp:206 gui/launcher.cpp:207
msgid "Full title of the game"
msgstr "Tэtol complet del joc"
@@ -188,7 +202,7 @@ msgstr ""
"Anglшs"
#: gui/launcher.cpp:212 gui/launcher.cpp:226 gui/options.cpp:87
-#: gui/options.cpp:737 gui/options.cpp:750 gui/options.cpp:1210
+#: gui/options.cpp:735 gui/options.cpp:748 gui/options.cpp:1208
#: audio/null.cpp:41
msgid "<default>"
msgstr "<per defecte>"
@@ -210,11 +224,11 @@ msgstr "Platafor.:"
msgid "Engine"
msgstr "Motor"
-#: gui/launcher.cpp:245 gui/options.cpp:1073 gui/options.cpp:1090
+#: gui/launcher.cpp:245 gui/options.cpp:1071 gui/options.cpp:1088
msgid "Graphics"
msgstr "Grрfics"
-#: gui/launcher.cpp:245 gui/options.cpp:1073 gui/options.cpp:1090
+#: gui/launcher.cpp:245 gui/options.cpp:1071 gui/options.cpp:1088
msgid "GFX"
msgstr "GFX"
@@ -227,7 +241,7 @@ msgctxt "lowres"
msgid "Override global graphic settings"
msgstr "Canviar les opcions de grрfics"
-#: gui/launcher.cpp:257 gui/options.cpp:1096
+#: gui/launcher.cpp:257 gui/options.cpp:1094
msgid "Audio"
msgstr "Рudio"
@@ -240,11 +254,11 @@ msgctxt "lowres"
msgid "Override global audio settings"
msgstr "Canviar les opcions d'рudio"
-#: gui/launcher.cpp:271 gui/options.cpp:1101
+#: gui/launcher.cpp:271 gui/options.cpp:1099
msgid "Volume"
msgstr "Volum"
-#: gui/launcher.cpp:273 gui/options.cpp:1103
+#: gui/launcher.cpp:273 gui/options.cpp:1101
msgctxt "lowres"
msgid "Volume"
msgstr "Volum"
@@ -258,7 +272,7 @@ msgctxt "lowres"
msgid "Override global volume settings"
msgstr "Canviar les opcions de volum"
-#: gui/launcher.cpp:286 gui/options.cpp:1111
+#: gui/launcher.cpp:286 gui/options.cpp:1109
msgid "MIDI"
msgstr "MIDI"
@@ -271,7 +285,7 @@ msgctxt "lowres"
msgid "Override global MIDI settings"
msgstr "Canviar les opcions de MIDI"
-#: gui/launcher.cpp:300 gui/options.cpp:1117
+#: gui/launcher.cpp:300 gui/options.cpp:1115
msgid "MT-32"
msgstr "MT-32"
@@ -284,11 +298,11 @@ msgctxt "lowres"
msgid "Override global MT-32 settings"
msgstr "Canviar les opcions de MT-32"
-#: gui/launcher.cpp:314 gui/options.cpp:1124
+#: gui/launcher.cpp:314 gui/options.cpp:1122
msgid "Paths"
msgstr "Camins"
-#: gui/launcher.cpp:316 gui/options.cpp:1126
+#: gui/launcher.cpp:316 gui/options.cpp:1124
msgctxt "lowres"
msgid "Paths"
msgstr "Camins"
@@ -302,7 +316,7 @@ msgctxt "lowres"
msgid "Game Path:"
msgstr "Camэ joc:"
-#: gui/launcher.cpp:330 gui/options.cpp:1150
+#: gui/launcher.cpp:330 gui/options.cpp:1148
msgid "Extra Path:"
msgstr "Camэ extra:"
@@ -310,42 +324,42 @@ msgstr "Camэ extra:"
msgid "Specifies path to additional data used by the game"
msgstr "Especifica el camэ de dades addicionals utilitzades pel joc"
-#: gui/launcher.cpp:332 gui/options.cpp:1152
+#: gui/launcher.cpp:332 gui/options.cpp:1150
msgctxt "lowres"
msgid "Extra Path:"
msgstr "Camэ extra:"
-#: gui/launcher.cpp:339 gui/options.cpp:1134
+#: gui/launcher.cpp:339 gui/options.cpp:1132
msgid "Save Path:"
msgstr "Camэ de partides:"
#: gui/launcher.cpp:339 gui/launcher.cpp:341 gui/launcher.cpp:342
-#: gui/options.cpp:1134 gui/options.cpp:1136 gui/options.cpp:1137
+#: gui/options.cpp:1132 gui/options.cpp:1134 gui/options.cpp:1135
msgid "Specifies where your saved games are put"
msgstr "Especifica on es desaran les partides"
-#: gui/launcher.cpp:341 gui/options.cpp:1136
+#: gui/launcher.cpp:341 gui/options.cpp:1134
msgctxt "lowres"
msgid "Save Path:"
msgstr "Partides:"
#: gui/launcher.cpp:360 gui/launcher.cpp:459 gui/launcher.cpp:517
-#: gui/launcher.cpp:571 gui/options.cpp:1145 gui/options.cpp:1153
-#: gui/options.cpp:1162 gui/options.cpp:1277 gui/options.cpp:1283
-#: gui/options.cpp:1291 gui/options.cpp:1321 gui/options.cpp:1327
-#: gui/options.cpp:1334 gui/options.cpp:1427 gui/options.cpp:1430
-#: gui/options.cpp:1442
+#: gui/launcher.cpp:571 gui/options.cpp:1143 gui/options.cpp:1151
+#: gui/options.cpp:1160 gui/options.cpp:1275 gui/options.cpp:1281
+#: gui/options.cpp:1289 gui/options.cpp:1319 gui/options.cpp:1325
+#: gui/options.cpp:1332 gui/options.cpp:1425 gui/options.cpp:1428
+#: gui/options.cpp:1440
msgctxt "path"
msgid "None"
msgstr "Cap"
#: gui/launcher.cpp:365 gui/launcher.cpp:465 gui/launcher.cpp:575
-#: gui/options.cpp:1271 gui/options.cpp:1315 gui/options.cpp:1433
+#: gui/options.cpp:1269 gui/options.cpp:1313 gui/options.cpp:1431
#: backends/platform/wii/options.cpp:56
msgid "Default"
msgstr "Per defecte"
-#: gui/launcher.cpp:510 gui/options.cpp:1436
+#: gui/launcher.cpp:510 gui/options.cpp:1434
msgid "Select SoundFont"
msgstr "Seleccioneu el fitxer SoundFont"
@@ -357,7 +371,7 @@ msgstr "Seleccioneu el directori amb les dades del joc"
msgid "Select additional game directory"
msgstr "Seleccioneu el directori addicional del joc"
-#: gui/launcher.cpp:559 gui/options.cpp:1379
+#: gui/launcher.cpp:559 gui/options.cpp:1377
msgid "Select directory for saved games"
msgstr "Seleccioneu el directori de les partides desades"
@@ -560,6 +574,24 @@ msgid "Discovered %d new games, ignored %d previously added games ..."
msgstr ""
"S'han trobat %d jocs nous, s'han ignorat %d jocs afegits anteriorment ..."
+#: gui/onscreendialog.cpp:101 gui/onscreendialog.cpp:103
+msgid "Stop"
+msgstr ""
+
+#: gui/onscreendialog.cpp:106
+msgid "Edit record description"
+msgstr ""
+
+#: gui/onscreendialog.cpp:108
+#, fuzzy
+msgid "Switch to Game"
+msgstr "Commuta"
+
+#: gui/onscreendialog.cpp:110
+#, fuzzy
+msgid "Fast replay"
+msgstr "Mode rрpid"
+
#: gui/options.cpp:85
msgid "Never"
msgstr "Mai"
@@ -600,8 +632,8 @@ msgstr "44 kHz"
msgid "48 kHz"
msgstr "48 kHz"
-#: gui/options.cpp:255 gui/options.cpp:481 gui/options.cpp:582
-#: gui/options.cpp:651 gui/options.cpp:859
+#: gui/options.cpp:255 gui/options.cpp:479 gui/options.cpp:580
+#: gui/options.cpp:649 gui/options.cpp:857
msgctxt "soundfont"
msgid "None"
msgstr "Cap"
@@ -622,70 +654,70 @@ msgstr "no s'ha pogut canviar l'ajust de pantalla completa"
msgid "the aspect ratio setting could not be changed"
msgstr "no s'ha pogut canviar l'ajust de la correcciѓ d'aspecte"
-#: gui/options.cpp:734
+#: gui/options.cpp:732
msgid "Graphics mode:"
msgstr "Mode grрfic:"
-#: gui/options.cpp:748
+#: gui/options.cpp:746
msgid "Render mode:"
msgstr "Mode de pintat:"
-#: gui/options.cpp:748 gui/options.cpp:749
+#: gui/options.cpp:746 gui/options.cpp:747
msgid "Special dithering modes supported by some games"
msgstr "Modes de tramat especials suportats per alguns jocs"
-#: gui/options.cpp:760
+#: gui/options.cpp:758
#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2298
msgid "Fullscreen mode"
msgstr "Mode pantalla completa"
-#: gui/options.cpp:763
+#: gui/options.cpp:761
msgid "Aspect ratio correction"
msgstr "Correcciѓ de la relaciѓ d'aspecte"
-#: gui/options.cpp:763
+#: gui/options.cpp:761
msgid "Correct aspect ratio for 320x200 games"
msgstr "Corregeix la relaciѓ d'aspecte per jocs de 320x200"
-#: gui/options.cpp:771
+#: gui/options.cpp:769
msgid "Preferred Device:"
msgstr "Disp. preferit:"
-#: gui/options.cpp:771
+#: gui/options.cpp:769
msgid "Music Device:"
msgstr "Disp. de mњsica:"
-#: gui/options.cpp:771 gui/options.cpp:773
+#: gui/options.cpp:769 gui/options.cpp:771
msgid "Specifies preferred sound device or sound card emulator"
msgstr "Especifica el dispositiu de so o l'emulador de tarja de so preferit"
-#: gui/options.cpp:771 gui/options.cpp:773 gui/options.cpp:774
+#: gui/options.cpp:769 gui/options.cpp:771 gui/options.cpp:772
msgid "Specifies output sound device or sound card emulator"
msgstr "Especifica el dispositiu de so o l'emulador de tarja de so de sortida"
-#: gui/options.cpp:773
+#: gui/options.cpp:771
msgctxt "lowres"
msgid "Preferred Dev.:"
msgstr "Disp. preferit:"
-#: gui/options.cpp:773
+#: gui/options.cpp:771
msgctxt "lowres"
msgid "Music Device:"
msgstr "Disp. de mњsica:"
-#: gui/options.cpp:800
+#: gui/options.cpp:798
msgid "AdLib emulator:"
msgstr "Emulador AdLib:"
-#: gui/options.cpp:800 gui/options.cpp:801
+#: gui/options.cpp:798 gui/options.cpp:799
msgid "AdLib is used for music in many games"
msgstr "AdLib s'utilitza per la mњsica de molts jocs"
-#: gui/options.cpp:811
+#: gui/options.cpp:809
msgid "Output rate:"
msgstr "Freq. sortida:"
-#: gui/options.cpp:811 gui/options.cpp:812
+#: gui/options.cpp:809 gui/options.cpp:810
msgid ""
"Higher value specifies better sound quality but may be not supported by your "
"soundcard"
@@ -693,67 +725,67 @@ msgstr ""
"Valors mщs alts especifiquen millor qualitat de so perђ pot ser que la "
"vostra tarja de so no ho suporti"
-#: gui/options.cpp:822
+#: gui/options.cpp:820
msgid "GM Device:"
msgstr "Dispositiu GM:"
-#: gui/options.cpp:822
+#: gui/options.cpp:820
msgid "Specifies default sound device for General MIDI output"
msgstr ""
"Especifica el dispositiu de so per defecte per a la sortida General MIDI"
-#: gui/options.cpp:833
+#: gui/options.cpp:831
msgid "Don't use General MIDI music"
msgstr "No utilitzis mњsica General MIDI"
-#: gui/options.cpp:844 gui/options.cpp:910
+#: gui/options.cpp:842 gui/options.cpp:908
msgid "Use first available device"
msgstr "Utilitza el primer dispositiu disponible"
-#: gui/options.cpp:856
+#: gui/options.cpp:854
msgid "SoundFont:"
msgstr "Fitxer SoundFont:"
-#: gui/options.cpp:856 gui/options.cpp:858 gui/options.cpp:859
+#: gui/options.cpp:854 gui/options.cpp:856 gui/options.cpp:857
msgid "SoundFont is supported by some audio cards, FluidSynth and Timidity"
msgstr "Algunes targes de so, FluidSynth i Timidity suporten SoundFont"
-#: gui/options.cpp:858
+#: gui/options.cpp:856
msgctxt "lowres"
msgid "SoundFont:"
msgstr "SoundFont:"
-#: gui/options.cpp:864
+#: gui/options.cpp:862
msgid "Mixed AdLib/MIDI mode"
msgstr "Mode combinat AdLib/MIDI"
-#: gui/options.cpp:864
+#: gui/options.cpp:862
msgid "Use both MIDI and AdLib sound generation"
msgstr "Utilitza MIDI i la generaciѓ de so AdLib alhora"
-#: gui/options.cpp:867
+#: gui/options.cpp:865
msgid "MIDI gain:"
msgstr "Guany MIDI:"
-#: gui/options.cpp:874
+#: gui/options.cpp:872
msgid "FluidSynth Settings"
msgstr "Configuraciѓ de FluidSynth"
-#: gui/options.cpp:881
+#: gui/options.cpp:879
msgid "MT-32 Device:"
msgstr "Disposit. MT-32:"
-#: gui/options.cpp:881
+#: gui/options.cpp:879
msgid "Specifies default sound device for Roland MT-32/LAPC1/CM32l/CM64 output"
msgstr ""
"Especifica el dispositiu de so per defecte per a la sortida de Roland MT-32/"
"LAPC1/CM32l/CM64"
-#: gui/options.cpp:886
+#: gui/options.cpp:884
msgid "True Roland MT-32 (disable GM emulation)"
msgstr "Roland MT-32 real (desactiva l'emulaciѓ GM)"
-#: gui/options.cpp:886 gui/options.cpp:888
+#: gui/options.cpp:884 gui/options.cpp:886
msgid ""
"Check if you want to use your real hardware Roland-compatible sound device "
"connected to your computer"
@@ -761,193 +793,193 @@ msgstr ""
"Marqueu si voleu utilitzar el vostre dispositiu hardware real de so "
"compatible amb Roland connectat al vostre ordinador"
-#: gui/options.cpp:888
+#: gui/options.cpp:886
msgctxt "lowres"
msgid "True Roland MT-32 (no GM emulation)"
msgstr "Roland MT-32 real (sense emulaciѓ GM)"
-#: gui/options.cpp:891
+#: gui/options.cpp:889
#, fuzzy
msgid "Roland GS Device (enable MT-32 mappings)"
msgstr "Mode Roland GS (desactiva el mapeig GM)"
-#: gui/options.cpp:891
+#: gui/options.cpp:889
msgid ""
"Check if you want to enable patch mappings to emulate an MT-32 on a Roland "
"GS device"
msgstr ""
-#: gui/options.cpp:900
+#: gui/options.cpp:898
msgid "Don't use Roland MT-32 music"
msgstr "No utilitzis mњsica de Roland MT-32"
-#: gui/options.cpp:927
+#: gui/options.cpp:925
msgid "Text and Speech:"
msgstr "Text i Veus:"
-#: gui/options.cpp:931 gui/options.cpp:941
+#: gui/options.cpp:929 gui/options.cpp:939
msgid "Speech"
msgstr "Veus"
-#: gui/options.cpp:932 gui/options.cpp:942
+#: gui/options.cpp:930 gui/options.cpp:940
msgid "Subtitles"
msgstr "Subtэtols"
-#: gui/options.cpp:933
+#: gui/options.cpp:931
msgid "Both"
msgstr "Ambdѓs"
-#: gui/options.cpp:935
+#: gui/options.cpp:933
msgid "Subtitle speed:"
msgstr "Velocitat de subt.:"
-#: gui/options.cpp:937
+#: gui/options.cpp:935
msgctxt "lowres"
msgid "Text and Speech:"
msgstr "Text i Veus:"
-#: gui/options.cpp:941
+#: gui/options.cpp:939
msgid "Spch"
msgstr "Veus"
-#: gui/options.cpp:942
+#: gui/options.cpp:940
msgid "Subs"
msgstr "Subt"
-#: gui/options.cpp:943
+#: gui/options.cpp:941
msgctxt "lowres"
msgid "Both"
msgstr "Ambdѓs"
-#: gui/options.cpp:943
+#: gui/options.cpp:941
msgid "Show subtitles and play speech"
msgstr "Mostra els subtэtols i reprodueix la veu"
-#: gui/options.cpp:945
+#: gui/options.cpp:943
msgctxt "lowres"
msgid "Subtitle speed:"
msgstr "Veloc. de subt.:"
-#: gui/options.cpp:961
+#: gui/options.cpp:959
msgid "Music volume:"
msgstr "Volum de mњsica:"
-#: gui/options.cpp:963
+#: gui/options.cpp:961
msgctxt "lowres"
msgid "Music volume:"
msgstr "Volum de mњsica:"
-#: gui/options.cpp:970
+#: gui/options.cpp:968
msgid "Mute All"
msgstr "Silenciar tot"
-#: gui/options.cpp:973
+#: gui/options.cpp:971
msgid "SFX volume:"
msgstr "Volum d'efectes:"
-#: gui/options.cpp:973 gui/options.cpp:975 gui/options.cpp:976
+#: gui/options.cpp:971 gui/options.cpp:973 gui/options.cpp:974
msgid "Special sound effects volume"
msgstr "Volum dels sons d'efectes especials"
-#: gui/options.cpp:975
+#: gui/options.cpp:973
msgctxt "lowres"
msgid "SFX volume:"
msgstr "Volum d'efectes:"
-#: gui/options.cpp:983
+#: gui/options.cpp:981
msgid "Speech volume:"
msgstr "Volum de veus:"
-#: gui/options.cpp:985
+#: gui/options.cpp:983
msgctxt "lowres"
msgid "Speech volume:"
msgstr "Volum de veus:"
-#: gui/options.cpp:1142
+#: gui/options.cpp:1140
msgid "Theme Path:"
msgstr "Camэ dels temes:"
-#: gui/options.cpp:1144
+#: gui/options.cpp:1142
msgctxt "lowres"
msgid "Theme Path:"
msgstr "Camэ temes:"
-#: gui/options.cpp:1150 gui/options.cpp:1152 gui/options.cpp:1153
+#: gui/options.cpp:1148 gui/options.cpp:1150 gui/options.cpp:1151
msgid "Specifies path to additional data used by all games or ScummVM"
msgstr ""
"Especifica el camэ de les dades addicionals utilitzades per tots els jocs o "
"pel ScummVM"
-#: gui/options.cpp:1159
+#: gui/options.cpp:1157
msgid "Plugins Path:"
msgstr "Camэ dels connectors:"
-#: gui/options.cpp:1161
+#: gui/options.cpp:1159
msgctxt "lowres"
msgid "Plugins Path:"
msgstr "Camэ de connectors:"
-#: gui/options.cpp:1170 gui/fluidsynth-dialog.cpp:138
+#: gui/options.cpp:1168 gui/fluidsynth-dialog.cpp:138
msgid "Misc"
msgstr "Misc"
-#: gui/options.cpp:1172
+#: gui/options.cpp:1170
msgctxt "lowres"
msgid "Misc"
msgstr "Misc"
-#: gui/options.cpp:1174
+#: gui/options.cpp:1172
msgid "Theme:"
msgstr "Tema:"
-#: gui/options.cpp:1178
+#: gui/options.cpp:1176
msgid "GUI Renderer:"
msgstr "Pintat GUI:"
-#: gui/options.cpp:1190
+#: gui/options.cpp:1188
msgid "Autosave:"
msgstr "Desat automрtic:"
-#: gui/options.cpp:1192
+#: gui/options.cpp:1190
msgctxt "lowres"
msgid "Autosave:"
msgstr "Auto-desat:"
-#: gui/options.cpp:1200
+#: gui/options.cpp:1198
msgid "Keys"
msgstr "Tecles"
-#: gui/options.cpp:1207
+#: gui/options.cpp:1205
msgid "GUI Language:"
msgstr "Idioma GUI:"
-#: gui/options.cpp:1207
+#: gui/options.cpp:1205
msgid "Language of ScummVM GUI"
msgstr "Idioma de la interfэcie d'usuari de ScummVM"
-#: gui/options.cpp:1366
+#: gui/options.cpp:1364
msgid "You have to restart ScummVM before your changes will take effect."
msgstr "Heu de reiniciar ScummVM perquш tots els canvis tinguin efecte."
-#: gui/options.cpp:1386
+#: gui/options.cpp:1384
msgid "The chosen directory cannot be written to. Please select another one."
msgstr ""
"No es pot escriure al directori seleccionat. Si us plau, escolliu-ne un "
"altre."
-#: gui/options.cpp:1395
+#: gui/options.cpp:1393
msgid "Select directory for GUI themes"
msgstr "Seleccioneu el directori dels temes"
-#: gui/options.cpp:1405
+#: gui/options.cpp:1403
msgid "Select directory for extra files"
msgstr "Seleccioneu el directori dels fitxers extra"
-#: gui/options.cpp:1416
+#: gui/options.cpp:1414
msgid "Select directory for plugins"
msgstr "Seleccioneu el directori dels connectors"
-#: gui/options.cpp:1469
+#: gui/options.cpp:1467
msgid ""
"The theme you selected does not support your current language. If you want "
"to use this theme you need to switch to another language first."
@@ -955,6 +987,29 @@ msgstr ""
"El tema que heu seleccionat no suporta l'idioma actual. Si voleu utilitzar "
"aquest tema primer haureu de canviar a un altre idioma."
+#. I18N: You must leave "#" as is, only word 'next' is translatable
+#: gui/predictivedialog.cpp:87
+msgid "# next"
+msgstr ""
+
+#: gui/predictivedialog.cpp:88
+msgid "add"
+msgstr ""
+
+#: gui/predictivedialog.cpp:92
+#, fuzzy
+msgid "Delete char"
+msgstr "Suprimeix"
+
+#: gui/predictivedialog.cpp:96
+msgid "<"
+msgstr ""
+
+#. I18N: Pre means 'Predictive', leave '*' as is
+#: gui/predictivedialog.cpp:98
+msgid "* Pre"
+msgstr ""
+
#: gui/recorderdialog.cpp:64
msgid "Recorder or Playback Gameplay"
msgstr ""
@@ -992,6 +1047,11 @@ msgstr ""
msgid "Do you really want to delete this record?"
msgstr "Realment voleu suprimir aquesta partida?"
+#: gui/recorderdialog.cpp:174
+#, fuzzy
+msgid "Unknown Author"
+msgstr "Error desconegut"
+
#: gui/saveload-dialog.cpp:167
msgid "List view"
msgstr "Vista de llistat"
@@ -1443,14 +1503,18 @@ msgstr ""
msgid "Start anyway"
msgstr "Inicia de totes maneres"
-#: audio/fmopl.cpp:50
+#: audio/fmopl.cpp:62
msgid "MAME OPL emulator"
msgstr "Emulador OPL de MAME"
-#: audio/fmopl.cpp:52
+#: audio/fmopl.cpp:64
msgid "DOSBox OPL emulator"
msgstr "Emulador OPL de DOSBox"
+#: audio/fmopl.cpp:67
+msgid "ALSA Direct FM"
+msgstr ""
+
#: audio/mididrv.cpp:209
#, c-format
msgid ""
@@ -1500,7 +1564,7 @@ msgstr "Sense mњsica"
msgid "Amiga Audio Emulator"
msgstr "Emulador d'рudio Amiga"
-#: audio/softsynth/adlib.cpp:2285
+#: audio/adlib.cpp:2291
msgid "AdLib Emulator"
msgstr "Emulador d'AdLib"
@@ -2133,14 +2197,13 @@ msgstr "Clicat desactivat"
#: engines/agi/detection.cpp:147 engines/drascula/detection.cpp:302
#: engines/dreamweb/detection.cpp:47 engines/neverhood/detection.cpp:160
#: engines/sci/detection.cpp:394 engines/toltecs/detection.cpp:200
-#: engines/zvision/detection.cpp:246
+#: engines/zvision/detection_tables.h:51
msgid "Use original save/load screens"
msgstr "Utilitza les pantalles originals de desat/cрrrega"
#: engines/agi/detection.cpp:148 engines/drascula/detection.cpp:303
#: engines/dreamweb/detection.cpp:48 engines/neverhood/detection.cpp:161
#: engines/sci/detection.cpp:395 engines/toltecs/detection.cpp:201
-#: engines/zvision/detection.cpp:247
msgid "Use the original save/load screens, instead of the ScummVM ones"
msgstr ""
"Utilitza les pantalles originals de desat/cрrrega, en lloc de les de ScummVM"
@@ -3281,6 +3344,25 @@ msgstr "Vola a la dreta"
msgid "Fly to lower right"
msgstr "Vola avall i a la dreta"
+#: engines/scumm/input.cpp:572
+#, fuzzy
+msgid "Snap scroll on"
+msgstr "Desplaчament suau"
+
+#: engines/scumm/input.cpp:574
+msgid "Snap scroll off"
+msgstr ""
+
+#: engines/scumm/input.cpp:587
+#, fuzzy
+msgid "Music volume: "
+msgstr "Volum de mњsica:"
+
+#: engines/scumm/input.cpp:604
+#, fuzzy
+msgid "Subtitle speed: "
+msgstr "Velocitat de subt.:"
+
#: engines/scumm/scumm.cpp:1832
#, c-format
msgid ""
@@ -3437,39 +3519,45 @@ msgstr ""
msgid "Show the current number of frames per second in the upper left corner"
msgstr ""
-#: engines/zvision/detection.cpp:256
+#: engines/zvision/detection_tables.h:52
+#, fuzzy
+msgid "Use the original save/load screens instead of the ScummVM interface"
+msgstr ""
+"Utilitza les pantalles originals de desat/cрrrega, en lloc de les de ScummVM"
+
+#: engines/zvision/detection_tables.h:61
msgid "Double FPS"
msgstr ""
-#: engines/zvision/detection.cpp:257
-msgid "Increase game FPS from 30 to 60"
+#: engines/zvision/detection_tables.h:62
+msgid "Increase framerate from 30 to 60 FPS"
msgstr ""
-#: engines/zvision/detection.cpp:266
+#: engines/zvision/detection_tables.h:71
#, fuzzy
msgid "Enable Venus"
msgstr "Activa el mode heli"
-#: engines/zvision/detection.cpp:267
+#: engines/zvision/detection_tables.h:72
+#, fuzzy
msgid "Enable the Venus help system"
-msgstr ""
+msgstr "Activa el mode heli"
-#: engines/zvision/detection.cpp:276
+#: engines/zvision/detection_tables.h:81
msgid "Disable animation while turning"
msgstr ""
-#: engines/zvision/detection.cpp:277
-msgid "Disable animation while turning in panoramic mode"
+#: engines/zvision/detection_tables.h:82
+msgid "Disable animation while turning in panorama mode"
msgstr ""
-#: engines/zvision/detection.cpp:286
-msgid "Use the hires MPEG movies"
+#: engines/zvision/detection_tables.h:91
+msgid "Use high resolution MPEG video"
msgstr ""
-#: engines/zvision/detection.cpp:287
+#: engines/zvision/detection_tables.h:92
#, fuzzy
-msgid ""
-"Use the hires MPEG movies of the DVD version, instead of the lowres AVI ones"
+msgid "Use MPEG video from the DVD version, instead of lower resolution AVI"
msgstr ""
"Utilitza el conjunt alternatiu de cursors platejats, en lloc dels normals "
"daurats"
diff --git a/po/cs_CZ.po b/po/cs_CZ.po
index 1e5ebc3b42..aa3fc856b8 100644
--- a/po/cs_CZ.po
+++ b/po/cs_CZ.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ScummVM 1.7.0git\n"
"Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n"
-"POT-Creation-Date: 2015-07-26 18:48+0200\n"
+"POT-Creation-Date: 2015-10-11 18:59+0100\n"
"PO-Revision-Date: 2015-07-26 18:51+0200\n"
"Last-Translator: Zbynьk Schwarz <zbynek.schwarz@gmail.com>\n"
"Language-Team: \n"
@@ -33,7 +33,7 @@ msgstr "Zakompilovanщ funkce:"
msgid "Available engines:"
msgstr "Dostupnс jсdra:"
-#: gui/browser.cpp:68
+#: gui/browser.cpp:68 gui/browser_osx.mm:104
msgid "Show hidden files"
msgstr "Zobrazit skrytщ soubory"
@@ -54,12 +54,13 @@ msgctxt "lowres"
msgid "Go up"
msgstr "Jэt nahoru"
-#: gui/browser.cpp:75 gui/chooser.cpp:46 gui/KeysDialog.cpp:43
-#: gui/launcher.cpp:351 gui/massadd.cpp:95 gui/options.cpp:1239
-#: gui/recorderdialog.cpp:70 gui/recorderdialog.cpp:156
-#: gui/saveload-dialog.cpp:216 gui/saveload-dialog.cpp:276
-#: gui/saveload-dialog.cpp:547 gui/saveload-dialog.cpp:931
-#: gui/themebrowser.cpp:55 gui/fluidsynth-dialog.cpp:152 engines/engine.cpp:483
+#: gui/browser.cpp:75 gui/chooser.cpp:46 gui/editrecorddialog.cpp:67
+#: gui/KeysDialog.cpp:43 gui/launcher.cpp:351 gui/massadd.cpp:95
+#: gui/options.cpp:1237 gui/predictivedialog.cpp:74 gui/recorderdialog.cpp:70
+#: gui/recorderdialog.cpp:156 gui/saveload-dialog.cpp:216
+#: gui/saveload-dialog.cpp:276 gui/saveload-dialog.cpp:547
+#: gui/saveload-dialog.cpp:931 gui/themebrowser.cpp:55
+#: gui/fluidsynth-dialog.cpp:152 engines/engine.cpp:483
#: backends/platform/wii/options.cpp:48
#: backends/events/default/default-events.cpp:196
#: backends/events/default/default-events.cpp:218
@@ -68,10 +69,29 @@ msgstr "Jэt nahoru"
msgid "Cancel"
msgstr "ZruЙit"
-#: gui/browser.cpp:76 gui/chooser.cpp:47 gui/themebrowser.cpp:56
+#: gui/browser.cpp:76 gui/browser_osx.mm:103 gui/chooser.cpp:47
+#: gui/themebrowser.cpp:56
msgid "Choose"
msgstr "Zvolit"
+#: gui/editrecorddialog.cpp:58
+#, fuzzy
+msgid "Author:"
+msgstr "Autor:"
+
+#: gui/editrecorddialog.cpp:59 gui/launcher.cpp:204
+msgid "Name:"
+msgstr "Jmщno"
+
+#: gui/editrecorddialog.cpp:60
+#, fuzzy
+msgid "Notes:"
+msgstr "Poznсmky:"
+
+#: gui/editrecorddialog.cpp:68 gui/predictivedialog.cpp:75
+msgid "Ok"
+msgstr ""
+
#: gui/gui-manager.cpp:117 backends/keymapper/remap-dialog.cpp:53
#: engines/scumm/help.cpp:126 engines/scumm/help.cpp:141
#: engines/scumm/help.cpp:166 engines/scumm/help.cpp:192
@@ -104,7 +124,7 @@ msgid "Map"
msgstr "Mapovat"
#: gui/KeysDialog.cpp:42 gui/launcher.cpp:352 gui/launcher.cpp:1048
-#: gui/launcher.cpp:1052 gui/massadd.cpp:92 gui/options.cpp:1240
+#: gui/launcher.cpp:1052 gui/massadd.cpp:92 gui/options.cpp:1238
#: gui/saveload-dialog.cpp:932 gui/fluidsynth-dialog.cpp:153
#: engines/engine.cpp:402 engines/engine.cpp:413
#: backends/platform/wii/options.cpp:47
@@ -166,10 +186,6 @@ msgctxt "lowres"
msgid "ID:"
msgstr "ID:"
-#: gui/launcher.cpp:204
-msgid "Name:"
-msgstr "Jmщno"
-
#: gui/launcher.cpp:204 gui/launcher.cpp:206 gui/launcher.cpp:207
msgid "Full title of the game"
msgstr "кpln§ nсzev hry"
@@ -190,7 +206,7 @@ msgid ""
msgstr "Jazyk hry. Toto z vaЙэ Љpanьlskщ verze neudьlс Anglickou"
#: gui/launcher.cpp:212 gui/launcher.cpp:226 gui/options.cpp:87
-#: gui/options.cpp:737 gui/options.cpp:750 gui/options.cpp:1210
+#: gui/options.cpp:735 gui/options.cpp:748 gui/options.cpp:1208
#: audio/null.cpp:41
msgid "<default>"
msgstr "<v§chozэ>"
@@ -212,11 +228,11 @@ msgstr "Platforma:"
msgid "Engine"
msgstr "Jсdro"
-#: gui/launcher.cpp:245 gui/options.cpp:1073 gui/options.cpp:1090
+#: gui/launcher.cpp:245 gui/options.cpp:1071 gui/options.cpp:1088
msgid "Graphics"
msgstr "Obraz"
-#: gui/launcher.cpp:245 gui/options.cpp:1073 gui/options.cpp:1090
+#: gui/launcher.cpp:245 gui/options.cpp:1071 gui/options.cpp:1088
msgid "GFX"
msgstr "GFX"
@@ -229,7 +245,7 @@ msgctxt "lowres"
msgid "Override global graphic settings"
msgstr "Potlaшit globсlnэ nastavenэ obrazu"
-#: gui/launcher.cpp:257 gui/options.cpp:1096
+#: gui/launcher.cpp:257 gui/options.cpp:1094
msgid "Audio"
msgstr "Zvuk"
@@ -242,11 +258,11 @@ msgctxt "lowres"
msgid "Override global audio settings"
msgstr "Potlaшit globсlnэ nastavenэ zvuku"
-#: gui/launcher.cpp:271 gui/options.cpp:1101
+#: gui/launcher.cpp:271 gui/options.cpp:1099
msgid "Volume"
msgstr "Hlasitost"
-#: gui/launcher.cpp:273 gui/options.cpp:1103
+#: gui/launcher.cpp:273 gui/options.cpp:1101
msgctxt "lowres"
msgid "Volume"
msgstr "Hlasitost"
@@ -260,7 +276,7 @@ msgctxt "lowres"
msgid "Override global volume settings"
msgstr "Potlaшit globсlnэ nastavenэ hlasitosti"
-#: gui/launcher.cpp:286 gui/options.cpp:1111
+#: gui/launcher.cpp:286 gui/options.cpp:1109
msgid "MIDI"
msgstr "MIDI"
@@ -273,7 +289,7 @@ msgctxt "lowres"
msgid "Override global MIDI settings"
msgstr "Potlaшit globсlnэ nastavenэ MIDI"
-#: gui/launcher.cpp:300 gui/options.cpp:1117
+#: gui/launcher.cpp:300 gui/options.cpp:1115
msgid "MT-32"
msgstr "MT-32"
@@ -286,11 +302,11 @@ msgctxt "lowres"
msgid "Override global MT-32 settings"
msgstr "Potlaшit globсlnэ nastavenэ MT-32"
-#: gui/launcher.cpp:314 gui/options.cpp:1124
+#: gui/launcher.cpp:314 gui/options.cpp:1122
msgid "Paths"
msgstr "Cesty"
-#: gui/launcher.cpp:316 gui/options.cpp:1126
+#: gui/launcher.cpp:316 gui/options.cpp:1124
msgctxt "lowres"
msgid "Paths"
msgstr "Cesty"
@@ -304,7 +320,7 @@ msgctxt "lowres"
msgid "Game Path:"
msgstr "Cesta Hry:"
-#: gui/launcher.cpp:330 gui/options.cpp:1150
+#: gui/launcher.cpp:330 gui/options.cpp:1148
msgid "Extra Path:"
msgstr "Dodateшnс Cesta:"
@@ -312,42 +328,42 @@ msgstr "Dodateшnс Cesta:"
msgid "Specifies path to additional data used by the game"
msgstr "Stanovэ cestu pro dodateшnс data pouОitс ve hјe"
-#: gui/launcher.cpp:332 gui/options.cpp:1152
+#: gui/launcher.cpp:332 gui/options.cpp:1150
msgctxt "lowres"
msgid "Extra Path:"
msgstr "Dodateшnс Cesta:"
-#: gui/launcher.cpp:339 gui/options.cpp:1134
+#: gui/launcher.cpp:339 gui/options.cpp:1132
msgid "Save Path:"
msgstr "Cesta pro uloОenэ:"
#: gui/launcher.cpp:339 gui/launcher.cpp:341 gui/launcher.cpp:342
-#: gui/options.cpp:1134 gui/options.cpp:1136 gui/options.cpp:1137
+#: gui/options.cpp:1132 gui/options.cpp:1134 gui/options.cpp:1135
msgid "Specifies where your saved games are put"
msgstr "Stanovuje, kam jsou umэstьny vaЙe uloОenщ hry"
-#: gui/launcher.cpp:341 gui/options.cpp:1136
+#: gui/launcher.cpp:341 gui/options.cpp:1134
msgctxt "lowres"
msgid "Save Path:"
msgstr "Cesta pro uloОenэ:"
#: gui/launcher.cpp:360 gui/launcher.cpp:459 gui/launcher.cpp:517
-#: gui/launcher.cpp:571 gui/options.cpp:1145 gui/options.cpp:1153
-#: gui/options.cpp:1162 gui/options.cpp:1277 gui/options.cpp:1283
-#: gui/options.cpp:1291 gui/options.cpp:1321 gui/options.cpp:1327
-#: gui/options.cpp:1334 gui/options.cpp:1427 gui/options.cpp:1430
-#: gui/options.cpp:1442
+#: gui/launcher.cpp:571 gui/options.cpp:1143 gui/options.cpp:1151
+#: gui/options.cpp:1160 gui/options.cpp:1275 gui/options.cpp:1281
+#: gui/options.cpp:1289 gui/options.cpp:1319 gui/options.cpp:1325
+#: gui/options.cpp:1332 gui/options.cpp:1425 gui/options.cpp:1428
+#: gui/options.cpp:1440
msgctxt "path"
msgid "None"
msgstr "Ўсdnщ"
#: gui/launcher.cpp:365 gui/launcher.cpp:465 gui/launcher.cpp:575
-#: gui/options.cpp:1271 gui/options.cpp:1315 gui/options.cpp:1433
+#: gui/options.cpp:1269 gui/options.cpp:1313 gui/options.cpp:1431
#: backends/platform/wii/options.cpp:56
msgid "Default"
msgstr "V§chozэ"
-#: gui/launcher.cpp:510 gui/options.cpp:1436
+#: gui/launcher.cpp:510 gui/options.cpp:1434
msgid "Select SoundFont"
msgstr "Vybrat SoundFont"
@@ -359,7 +375,7 @@ msgstr "Vyberte adresсј s daty hry"
msgid "Select additional game directory"
msgstr "Vyberte dodateшn§ adresсј hry"
-#: gui/launcher.cpp:559 gui/options.cpp:1379
+#: gui/launcher.cpp:559 gui/options.cpp:1377
msgid "Select directory for saved games"
msgstr "Vyberte adresсј pro uloОenщ hry"
@@ -556,6 +572,24 @@ msgstr "Prohledсno %d adresсјљ..."
msgid "Discovered %d new games, ignored %d previously added games ..."
msgstr "Objeveno %d nov§ch her, ignorovсno %d dјэve pјidan§ch her ..."
+#: gui/onscreendialog.cpp:101 gui/onscreendialog.cpp:103
+msgid "Stop"
+msgstr ""
+
+#: gui/onscreendialog.cpp:106
+msgid "Edit record description"
+msgstr ""
+
+#: gui/onscreendialog.cpp:108
+#, fuzzy
+msgid "Switch to Game"
+msgstr "Pјepnout"
+
+#: gui/onscreendialog.cpp:110
+#, fuzzy
+msgid "Fast replay"
+msgstr "Rychl§ reОim"
+
#: gui/options.cpp:85
msgid "Never"
msgstr "Nikdy"
@@ -596,8 +630,8 @@ msgstr "44 kHz"
msgid "48 kHz"
msgstr "48 kHz"
-#: gui/options.cpp:255 gui/options.cpp:481 gui/options.cpp:582
-#: gui/options.cpp:651 gui/options.cpp:859
+#: gui/options.cpp:255 gui/options.cpp:479 gui/options.cpp:580
+#: gui/options.cpp:649 gui/options.cpp:857
msgctxt "soundfont"
msgid "None"
msgstr "Ўсdnщ"
@@ -618,70 +652,70 @@ msgstr "nastavenэ celщ obrazovky nemohlo b§t zmьnьno"
msgid "the aspect ratio setting could not be changed"
msgstr "nastavenэ pomьru stran nemohlo b§t zmьnьno"
-#: gui/options.cpp:734
+#: gui/options.cpp:732
msgid "Graphics mode:"
msgstr "ReОim obrazu:"
-#: gui/options.cpp:748
+#: gui/options.cpp:746
msgid "Render mode:"
msgstr "ReОim vykreslenэ:"
-#: gui/options.cpp:748 gui/options.cpp:749
+#: gui/options.cpp:746 gui/options.cpp:747
msgid "Special dithering modes supported by some games"
msgstr "Speciсlnэ reОimy chvьnэ podporovanщ nьkter§mi hrami"
-#: gui/options.cpp:760
+#: gui/options.cpp:758
#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2298
msgid "Fullscreen mode"
msgstr "ReОim celщ obrazovky"
-#: gui/options.cpp:763
+#: gui/options.cpp:761
msgid "Aspect ratio correction"
msgstr "Korekce pomьru stran"
-#: gui/options.cpp:763
+#: gui/options.cpp:761
msgid "Correct aspect ratio for 320x200 games"
msgstr "Korigovat pomьr stran pro hry 320x200"
-#: gui/options.cpp:771
+#: gui/options.cpp:769
msgid "Preferred Device:"
msgstr "Prioritnэ Zaјэzenэ:"
-#: gui/options.cpp:771
+#: gui/options.cpp:769
msgid "Music Device:"
msgstr "Hudebnэ zaјэzenэ"
-#: gui/options.cpp:771 gui/options.cpp:773
+#: gui/options.cpp:769 gui/options.cpp:771
msgid "Specifies preferred sound device or sound card emulator"
msgstr "Stanovэ prioritnэ zvukovщ zaјэzenэ nebo emulсtor zvukovщ karty"
-#: gui/options.cpp:771 gui/options.cpp:773 gui/options.cpp:774
+#: gui/options.cpp:769 gui/options.cpp:771 gui/options.cpp:772
msgid "Specifies output sound device or sound card emulator"
msgstr "Stanovэ v§stupnэ zvukovщ zaјэzenэ nebo emulсtor zvukovщ karty"
-#: gui/options.cpp:773
+#: gui/options.cpp:771
msgctxt "lowres"
msgid "Preferred Dev.:"
msgstr "Prioritnэ Zaј.:"
-#: gui/options.cpp:773
+#: gui/options.cpp:771
msgctxt "lowres"
msgid "Music Device:"
msgstr "Hudebnэ zaјэzenэ"
-#: gui/options.cpp:800
+#: gui/options.cpp:798
msgid "AdLib emulator:"
msgstr "AdLib emulсtor"
-#: gui/options.cpp:800 gui/options.cpp:801
+#: gui/options.cpp:798 gui/options.cpp:799
msgid "AdLib is used for music in many games"
msgstr "AdLib se pouОэvс pro hudbu v mnoha hrсch"
-#: gui/options.cpp:811
+#: gui/options.cpp:809
msgid "Output rate:"
msgstr "V§stup. frekvence:"
-#: gui/options.cpp:811 gui/options.cpp:812
+#: gui/options.cpp:809 gui/options.cpp:810
msgid ""
"Higher value specifies better sound quality but may be not supported by your "
"soundcard"
@@ -689,66 +723,66 @@ msgstr ""
"VyЙЙэ hodnota zpљsobэ lepЙэ kvalitu zvuku, ale nemusэ b§t podporovсna VaЙi "
"zvukovou kartou"
-#: gui/options.cpp:822
+#: gui/options.cpp:820
msgid "GM Device:"
msgstr "GM Zaјэzenэ:"
-#: gui/options.cpp:822
+#: gui/options.cpp:820
msgid "Specifies default sound device for General MIDI output"
msgstr "Stanovэ v§chozэ zvukovщ zaјэzenэ pro v§stup General MIDI"
-#: gui/options.cpp:833
+#: gui/options.cpp:831
msgid "Don't use General MIDI music"
msgstr "NepouОэvat hudbu General MIDI"
-#: gui/options.cpp:844 gui/options.cpp:910
+#: gui/options.cpp:842 gui/options.cpp:908
msgid "Use first available device"
msgstr "PouОэt prvnэ dostupnщ zaјэzenэ"
-#: gui/options.cpp:856
+#: gui/options.cpp:854
msgid "SoundFont:"
msgstr "SoundFont:"
-#: gui/options.cpp:856 gui/options.cpp:858 gui/options.cpp:859
+#: gui/options.cpp:854 gui/options.cpp:856 gui/options.cpp:857
msgid "SoundFont is supported by some audio cards, FluidSynth and Timidity"
msgstr ""
"SoundFont je podporovсn nьkter§mi zvukov§mi kartami, FluidSynth a Timidity"
-#: gui/options.cpp:858
+#: gui/options.cpp:856
msgctxt "lowres"
msgid "SoundFont:"
msgstr "SoundFont:"
-#: gui/options.cpp:864
+#: gui/options.cpp:862
msgid "Mixed AdLib/MIDI mode"
msgstr "SmэЙen§ reОim AdLib/MIDI"
-#: gui/options.cpp:864
+#: gui/options.cpp:862
msgid "Use both MIDI and AdLib sound generation"
msgstr "PouОэt obь zvukovщ generace MIDI a AdLib"
-#: gui/options.cpp:867
+#: gui/options.cpp:865
msgid "MIDI gain:"
msgstr "Zesэlenэ MIDI:"
-#: gui/options.cpp:874
+#: gui/options.cpp:872
msgid "FluidSynth Settings"
msgstr "Nastavenэ FluidSynth"
-#: gui/options.cpp:881
+#: gui/options.cpp:879
msgid "MT-32 Device:"
msgstr "Zaјэzenэ MT-32:"
-#: gui/options.cpp:881
+#: gui/options.cpp:879
msgid "Specifies default sound device for Roland MT-32/LAPC1/CM32l/CM64 output"
msgstr ""
"Stanovэ v§chozэ zvukovщ v§stupnэ zaјэzenэ pro Roland MT-32/LAPC1/CM32l/CM64"
-#: gui/options.cpp:886
+#: gui/options.cpp:884
msgid "True Roland MT-32 (disable GM emulation)"
msgstr "Opravdov§ Roland MT-32 (vypne GM emulaci)"
-#: gui/options.cpp:886 gui/options.cpp:888
+#: gui/options.cpp:884 gui/options.cpp:886
msgid ""
"Check if you want to use your real hardware Roland-compatible sound device "
"connected to your computer"
@@ -756,16 +790,16 @@ msgstr ""
"ZaЙkrtnьte, pokud chcete pouОэt pravщ hardwarovщ zaјэzenэ kompatibilnэ s "
"Roland, pјipojenщ k vaЙemu poшэtaшi"
-#: gui/options.cpp:888
+#: gui/options.cpp:886
msgctxt "lowres"
msgid "True Roland MT-32 (no GM emulation)"
msgstr "Opravdov§ Roland MT-32 (Осdnс GM emulace)"
-#: gui/options.cpp:891
+#: gui/options.cpp:889
msgid "Roland GS Device (enable MT-32 mappings)"
msgstr "Zaјэzenэ Roland GS (zapne mapovсnэ MT-32)"
-#: gui/options.cpp:891
+#: gui/options.cpp:889
msgid ""
"Check if you want to enable patch mappings to emulate an MT-32 on a Roland "
"GS device"
@@ -773,173 +807,173 @@ msgstr ""
"ZaЙkrtnьte, pokud chcete povolit zсplaty mapovсnэ umoОђujэcэ emulovat MT-32 "
"na zaјэzenэ Roland GS"
-#: gui/options.cpp:900
+#: gui/options.cpp:898
msgid "Don't use Roland MT-32 music"
msgstr "NepouОэvat hudbu Roland MT-32"
-#: gui/options.cpp:927
+#: gui/options.cpp:925
msgid "Text and Speech:"
msgstr "Text a иeш"
-#: gui/options.cpp:931 gui/options.cpp:941
+#: gui/options.cpp:929 gui/options.cpp:939
msgid "Speech"
msgstr "иeш"
-#: gui/options.cpp:932 gui/options.cpp:942
+#: gui/options.cpp:930 gui/options.cpp:940
msgid "Subtitles"
msgstr "Titulky"
-#: gui/options.cpp:933
+#: gui/options.cpp:931
msgid "Both"
msgstr "Oba"
-#: gui/options.cpp:935
+#: gui/options.cpp:933
msgid "Subtitle speed:"
msgstr "Rychlost titulkљ:"
-#: gui/options.cpp:937
+#: gui/options.cpp:935
msgctxt "lowres"
msgid "Text and Speech:"
msgstr "Text a иeш:"
-#: gui/options.cpp:941
+#: gui/options.cpp:939
msgid "Spch"
msgstr "иeш"
-#: gui/options.cpp:942
+#: gui/options.cpp:940
msgid "Subs"
msgstr "Titl"
-#: gui/options.cpp:943
+#: gui/options.cpp:941
msgctxt "lowres"
msgid "Both"
msgstr "Oba"
-#: gui/options.cpp:943
+#: gui/options.cpp:941
msgid "Show subtitles and play speech"
msgstr "Zobrazit titulky a pјehrсvat јeш"
-#: gui/options.cpp:945
+#: gui/options.cpp:943
msgctxt "lowres"
msgid "Subtitle speed:"
msgstr "Rychlost titulkљ"
-#: gui/options.cpp:961
+#: gui/options.cpp:959
msgid "Music volume:"
msgstr "Hlasitost hudby"
-#: gui/options.cpp:963
+#: gui/options.cpp:961
msgctxt "lowres"
msgid "Music volume:"
msgstr "Hlasitost hudby"
-#: gui/options.cpp:970
+#: gui/options.cpp:968
msgid "Mute All"
msgstr "Ztlumit VЙe"
-#: gui/options.cpp:973
+#: gui/options.cpp:971
msgid "SFX volume:"
msgstr "Hlasitost zvukљ"
-#: gui/options.cpp:973 gui/options.cpp:975 gui/options.cpp:976
+#: gui/options.cpp:971 gui/options.cpp:973 gui/options.cpp:974
msgid "Special sound effects volume"
msgstr "Hlasitost speciсlnэch zvukov§ch efektљ"
-#: gui/options.cpp:975
+#: gui/options.cpp:973
msgctxt "lowres"
msgid "SFX volume:"
msgstr "Hlasitost zvukљ"
-#: gui/options.cpp:983
+#: gui/options.cpp:981
msgid "Speech volume:"
msgstr "Hlasitost јeшi"
-#: gui/options.cpp:985
+#: gui/options.cpp:983
msgctxt "lowres"
msgid "Speech volume:"
msgstr "Hlasitost јeшi"
-#: gui/options.cpp:1142
+#: gui/options.cpp:1140
msgid "Theme Path:"
msgstr "Cesta ke Vzhledu:"
-#: gui/options.cpp:1144
+#: gui/options.cpp:1142
msgctxt "lowres"
msgid "Theme Path:"
msgstr "Cesta ke Vzhledu:"
-#: gui/options.cpp:1150 gui/options.cpp:1152 gui/options.cpp:1153
+#: gui/options.cpp:1148 gui/options.cpp:1150 gui/options.cpp:1151
msgid "Specifies path to additional data used by all games or ScummVM"
msgstr "Stanovэ cestu k dodateшn§m datљm pouОэvanс vЙemi hrami nebo ScummVM"
-#: gui/options.cpp:1159
+#: gui/options.cpp:1157
msgid "Plugins Path:"
msgstr "Cesta k Pluginљm:"
-#: gui/options.cpp:1161
+#: gui/options.cpp:1159
msgctxt "lowres"
msgid "Plugins Path:"
msgstr "Cesta k Pluginљm:"
-#: gui/options.cpp:1170 gui/fluidsynth-dialog.cpp:138
+#: gui/options.cpp:1168 gui/fluidsynth-dialog.cpp:138
msgid "Misc"
msgstr "Rљznщ"
-#: gui/options.cpp:1172
+#: gui/options.cpp:1170
msgctxt "lowres"
msgid "Misc"
msgstr "Rљznщ"
-#: gui/options.cpp:1174
+#: gui/options.cpp:1172
msgid "Theme:"
msgstr "Vzhled:"
-#: gui/options.cpp:1178
+#: gui/options.cpp:1176
msgid "GUI Renderer:"
msgstr "GUI Vykreslovaш:"
-#: gui/options.cpp:1190
+#: gui/options.cpp:1188
msgid "Autosave:"
msgstr "Autouklсdсnэ:"
-#: gui/options.cpp:1192
+#: gui/options.cpp:1190
msgctxt "lowres"
msgid "Autosave:"
msgstr "Autouklсdсnэ:"
-#: gui/options.cpp:1200
+#: gui/options.cpp:1198
msgid "Keys"
msgstr "Klсvesy"
-#: gui/options.cpp:1207
+#: gui/options.cpp:1205
msgid "GUI Language:"
msgstr "Jazyk GUI"
-#: gui/options.cpp:1207
+#: gui/options.cpp:1205
msgid "Language of ScummVM GUI"
msgstr "Jazyk GUI ScummVM"
-#: gui/options.cpp:1366
+#: gui/options.cpp:1364
msgid "You have to restart ScummVM before your changes will take effect."
msgstr "Pro pouОitэ tьchto nastavenэ musэte restartovat ScummVM."
-#: gui/options.cpp:1386
+#: gui/options.cpp:1384
msgid "The chosen directory cannot be written to. Please select another one."
msgstr "Do zvolenщho adresсјe nelze zapisovat. Vyberte, prosэm, jin§."
-#: gui/options.cpp:1395
+#: gui/options.cpp:1393
msgid "Select directory for GUI themes"
msgstr "Vyberte adresсј pro vhledy GUI"
-#: gui/options.cpp:1405
+#: gui/options.cpp:1403
msgid "Select directory for extra files"
msgstr "Vyberte adresсј pro dodateшnщ soubory"
-#: gui/options.cpp:1416
+#: gui/options.cpp:1414
msgid "Select directory for plugins"
msgstr "Vyberte adresсј pro zсsuvnщ moduly"
-#: gui/options.cpp:1469
+#: gui/options.cpp:1467
msgid ""
"The theme you selected does not support your current language. If you want "
"to use this theme you need to switch to another language first."
@@ -947,6 +981,29 @@ msgstr ""
"Vzhled, kter§ jste zvolili, nepodporuje VсЙ souшasn§ jazyk. Pokud chcete "
"tento vzhled pouОэt, musэte nejdјэve pјepnout na jin§ jazyk."
+#. I18N: You must leave "#" as is, only word 'next' is translatable
+#: gui/predictivedialog.cpp:87
+msgid "# next"
+msgstr ""
+
+#: gui/predictivedialog.cpp:88
+msgid "add"
+msgstr ""
+
+#: gui/predictivedialog.cpp:92
+#, fuzzy
+msgid "Delete char"
+msgstr "Smazat"
+
+#: gui/predictivedialog.cpp:96
+msgid "<"
+msgstr ""
+
+#. I18N: Pre means 'Predictive', leave '*' as is
+#: gui/predictivedialog.cpp:98
+msgid "* Pre"
+msgstr ""
+
#: gui/recorderdialog.cpp:64
msgid "Recorder or Playback Gameplay"
msgstr "Nahrсvat nebo pјehrсt hru"
@@ -982,6 +1039,11 @@ msgstr "Poznсmky:"
msgid "Do you really want to delete this record?"
msgstr "Opravdu chcete tento zсznam smazat?"
+#: gui/recorderdialog.cpp:174
+#, fuzzy
+msgid "Unknown Author"
+msgstr "Neznсmс chyba"
+
#: gui/saveload-dialog.cpp:167
msgid "List view"
msgstr "Seznam"
@@ -1430,14 +1492,18 @@ msgstr ""
msgid "Start anyway"
msgstr "Pјesto spustit"
-#: audio/fmopl.cpp:50
+#: audio/fmopl.cpp:62
msgid "MAME OPL emulator"
msgstr "MAME OPL Emulсtor"
-#: audio/fmopl.cpp:52
+#: audio/fmopl.cpp:64
msgid "DOSBox OPL emulator"
msgstr "DOSBox OPL Emulсtor"
+#: audio/fmopl.cpp:67
+msgid "ALSA Direct FM"
+msgstr ""
+
#: audio/mididrv.cpp:209
#, c-format
msgid ""
@@ -1487,7 +1553,7 @@ msgstr "Bez hudby"
msgid "Amiga Audio Emulator"
msgstr "Emulсtor zvuku Amiga"
-#: audio/softsynth/adlib.cpp:2285
+#: audio/adlib.cpp:2291
msgid "AdLib Emulator"
msgstr "AdLib Emulсtor"
@@ -1759,8 +1825,9 @@ msgstr "Rychl§ reОim"
#: backends/platform/symbian/src/SymbianActions.cpp:52
#: backends/platform/wince/CEActionsPocket.cpp:44
#: backends/platform/wince/CEActionsSmartphone.cpp:52
-#: backends/events/default/default-events.cpp:218 engines/scumm/dialogs.cpp:192
-#: engines/scumm/help.cpp:83 engines/scumm/help.cpp:85
+#: backends/events/default/default-events.cpp:218
+#: engines/scumm/dialogs.cpp:192 engines/scumm/help.cpp:83
+#: engines/scumm/help.cpp:85
msgid "Quit"
msgstr "Ukonшit"
@@ -2120,14 +2187,13 @@ msgstr "Kliknutэ Zakсzсno"
#: engines/agi/detection.cpp:147 engines/drascula/detection.cpp:302
#: engines/dreamweb/detection.cpp:47 engines/neverhood/detection.cpp:160
#: engines/sci/detection.cpp:394 engines/toltecs/detection.cpp:200
-#: engines/zvision/detection.cpp:246
+#: engines/zvision/detection_tables.h:51
msgid "Use original save/load screens"
msgstr "PouОэt pљvodnэ obrazovky naшtenэ/uloОenэ"
#: engines/agi/detection.cpp:148 engines/drascula/detection.cpp:303
#: engines/dreamweb/detection.cpp:48 engines/neverhood/detection.cpp:161
#: engines/sci/detection.cpp:395 engines/toltecs/detection.cpp:201
-#: engines/zvision/detection.cpp:247
msgid "Use the original save/load screens, instead of the ScummVM ones"
msgstr "PouОэt pљvodnэ obrazovky naшtenэ/uloОenэ mэsto ze ScummVM"
@@ -3272,6 +3338,25 @@ msgstr "Letьt doprava"
msgid "Fly to lower right"
msgstr "Letьt doprava dolљ"
+#: engines/scumm/input.cpp:572
+#, fuzzy
+msgid "Snap scroll on"
+msgstr "Plynulщ posunovсnэ"
+
+#: engines/scumm/input.cpp:574
+msgid "Snap scroll off"
+msgstr ""
+
+#: engines/scumm/input.cpp:587
+#, fuzzy
+msgid "Music volume: "
+msgstr "Hlasitost hudby"
+
+#: engines/scumm/input.cpp:604
+#, fuzzy
+msgid "Subtitle speed: "
+msgstr "Rychlost titulkљ:"
+
#: engines/scumm/scumm.cpp:1832
#, c-format
msgid ""
@@ -3423,37 +3508,45 @@ msgstr "Zobrazit poшэtadlo FPS"
msgid "Show the current number of frames per second in the upper left corner"
msgstr "Zobrazit souшasn§ poшet snэmkљ za sekundu v hornэm levщm rohu"
-#: engines/zvision/detection.cpp:256
+#: engines/zvision/detection_tables.h:52
+#, fuzzy
+msgid "Use the original save/load screens instead of the ScummVM interface"
+msgstr "PouОэt pљvodnэ obrazovky naшtenэ/uloОenэ mэsto ze ScummVM"
+
+#: engines/zvision/detection_tables.h:61
msgid "Double FPS"
msgstr "Dvojitщ snэmky za sekundu"
-#: engines/zvision/detection.cpp:257
-msgid "Increase game FPS from 30 to 60"
+#: engines/zvision/detection_tables.h:62
+#, fuzzy
+msgid "Increase framerate from 30 to 60 FPS"
msgstr "Zv§Йit hernэ snэmky za sekundu z 30 na 60"
-#: engines/zvision/detection.cpp:266
+#: engines/zvision/detection_tables.h:71
msgid "Enable Venus"
msgstr "Povolit Venus"
-#: engines/zvision/detection.cpp:267
+#: engines/zvision/detection_tables.h:72
msgid "Enable the Venus help system"
msgstr "Povolit systщm nсpovьdy Venus"
-#: engines/zvision/detection.cpp:276
+#: engines/zvision/detection_tables.h:81
msgid "Disable animation while turning"
msgstr "Zakсzat animaci pјi otсшenэ"
-#: engines/zvision/detection.cpp:277
-msgid "Disable animation while turning in panoramic mode"
+#: engines/zvision/detection_tables.h:82
+#, fuzzy
+msgid "Disable animation while turning in panorama mode"
msgstr "Zakсzat animaci pјi otсшenэ v panoramatickщm reОimu"
-#: engines/zvision/detection.cpp:286
-msgid "Use the hires MPEG movies"
+#: engines/zvision/detection_tables.h:91
+#, fuzzy
+msgid "Use high resolution MPEG video"
msgstr "PouОэt videa MPEG ve vysokщm rozliЙenэ"
-#: engines/zvision/detection.cpp:287
-msgid ""
-"Use the hires MPEG movies of the DVD version, instead of the lowres AVI ones"
+#: engines/zvision/detection_tables.h:92
+#, fuzzy
+msgid "Use MPEG video from the DVD version, instead of lower resolution AVI"
msgstr ""
"PouОэt videa MPEG ve vysokщm rozliЙenэ pochсzejэcэ z DVD verze, namэsto "
"videэ AVI v nэzkщm rozliЙenэ."
diff --git a/po/da_DA.po b/po/da_DA.po
index 82760de5d8..0da2db01f3 100644
--- a/po/da_DA.po
+++ b/po/da_DA.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ScummVM 1.3.0svn\n"
"Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n"
-"POT-Creation-Date: 2015-06-30 20:57+0100\n"
+"POT-Creation-Date: 2015-10-11 18:59+0100\n"
"PO-Revision-Date: 2014-07-09 17:34+0100\n"
"Last-Translator: Steffen Nyeland <steffen@nyeland.dk>\n"
"Language-Team: Steffen Nyeland <steffen@nyeland.dk>\n"
@@ -31,7 +31,7 @@ msgstr "Funktioner kompileret ind:"
msgid "Available engines:"
msgstr "Tilgцngelige \"motorer\":"
-#: gui/browser.cpp:68
+#: gui/browser.cpp:68 gui/browser_osx.mm:104
msgid "Show hidden files"
msgstr "Vis skjulte filer"
@@ -52,13 +52,14 @@ msgctxt "lowres"
msgid "Go up"
msgstr "Gх op"
-#: gui/browser.cpp:75 gui/chooser.cpp:46 gui/KeysDialog.cpp:43
-#: gui/launcher.cpp:351 gui/massadd.cpp:95 gui/options.cpp:1239
-#: gui/recorderdialog.cpp:70 gui/recorderdialog.cpp:156
-#: gui/saveload-dialog.cpp:216 gui/saveload-dialog.cpp:276
-#: gui/saveload-dialog.cpp:547 gui/saveload-dialog.cpp:931
-#: gui/themebrowser.cpp:55 gui/fluidsynth-dialog.cpp:152
-#: engines/engine.cpp:483 backends/platform/wii/options.cpp:48
+#: gui/browser.cpp:75 gui/chooser.cpp:46 gui/editrecorddialog.cpp:67
+#: gui/KeysDialog.cpp:43 gui/launcher.cpp:351 gui/massadd.cpp:95
+#: gui/options.cpp:1237 gui/predictivedialog.cpp:74 gui/recorderdialog.cpp:70
+#: gui/recorderdialog.cpp:156 gui/saveload-dialog.cpp:216
+#: gui/saveload-dialog.cpp:276 gui/saveload-dialog.cpp:547
+#: gui/saveload-dialog.cpp:931 gui/themebrowser.cpp:55
+#: gui/fluidsynth-dialog.cpp:152 engines/engine.cpp:483
+#: backends/platform/wii/options.cpp:48
#: backends/events/default/default-events.cpp:196
#: backends/events/default/default-events.cpp:218
#: engines/drascula/saveload.cpp:49 engines/parallaction/saveload.cpp:274
@@ -66,10 +67,27 @@ msgstr "Gх op"
msgid "Cancel"
msgstr "Fortryd"
-#: gui/browser.cpp:76 gui/chooser.cpp:47 gui/themebrowser.cpp:56
+#: gui/browser.cpp:76 gui/browser_osx.mm:103 gui/chooser.cpp:47
+#: gui/themebrowser.cpp:56
msgid "Choose"
msgstr "Vцlg"
+#: gui/editrecorddialog.cpp:58
+msgid "Author:"
+msgstr ""
+
+#: gui/editrecorddialog.cpp:59 gui/launcher.cpp:204
+msgid "Name:"
+msgstr "Navn:"
+
+#: gui/editrecorddialog.cpp:60
+msgid "Notes:"
+msgstr ""
+
+#: gui/editrecorddialog.cpp:68 gui/predictivedialog.cpp:75
+msgid "Ok"
+msgstr ""
+
#: gui/gui-manager.cpp:117 backends/keymapper/remap-dialog.cpp:53
#: engines/scumm/help.cpp:126 engines/scumm/help.cpp:141
#: engines/scumm/help.cpp:166 engines/scumm/help.cpp:192
@@ -102,7 +120,7 @@ msgid "Map"
msgstr "Kortlцg"
#: gui/KeysDialog.cpp:42 gui/launcher.cpp:352 gui/launcher.cpp:1048
-#: gui/launcher.cpp:1052 gui/massadd.cpp:92 gui/options.cpp:1240
+#: gui/launcher.cpp:1052 gui/massadd.cpp:92 gui/options.cpp:1238
#: gui/saveload-dialog.cpp:932 gui/fluidsynth-dialog.cpp:153
#: engines/engine.cpp:402 engines/engine.cpp:413
#: backends/platform/wii/options.cpp:47
@@ -164,10 +182,6 @@ msgctxt "lowres"
msgid "ID:"
msgstr "ID:"
-#: gui/launcher.cpp:204
-msgid "Name:"
-msgstr "Navn:"
-
#: gui/launcher.cpp:204 gui/launcher.cpp:206 gui/launcher.cpp:207
msgid "Full title of the game"
msgstr "Fuld titel pх spillet"
@@ -190,7 +204,7 @@ msgstr ""
"engelsk"
#: gui/launcher.cpp:212 gui/launcher.cpp:226 gui/options.cpp:87
-#: gui/options.cpp:737 gui/options.cpp:750 gui/options.cpp:1210
+#: gui/options.cpp:735 gui/options.cpp:748 gui/options.cpp:1208
#: audio/null.cpp:41
msgid "<default>"
msgstr "<standard>"
@@ -212,11 +226,11 @@ msgstr "Platform:"
msgid "Engine"
msgstr "Motor"
-#: gui/launcher.cpp:245 gui/options.cpp:1073 gui/options.cpp:1090
+#: gui/launcher.cpp:245 gui/options.cpp:1071 gui/options.cpp:1088
msgid "Graphics"
msgstr "Grafik"
-#: gui/launcher.cpp:245 gui/options.cpp:1073 gui/options.cpp:1090
+#: gui/launcher.cpp:245 gui/options.cpp:1071 gui/options.cpp:1088
msgid "GFX"
msgstr "GFX"
@@ -229,7 +243,7 @@ msgctxt "lowres"
msgid "Override global graphic settings"
msgstr "Overstyr globale grafik indstillinger"
-#: gui/launcher.cpp:257 gui/options.cpp:1096
+#: gui/launcher.cpp:257 gui/options.cpp:1094
msgid "Audio"
msgstr "Lyd"
@@ -242,11 +256,11 @@ msgctxt "lowres"
msgid "Override global audio settings"
msgstr "Overstyr globale lyd indstillinger"
-#: gui/launcher.cpp:271 gui/options.cpp:1101
+#: gui/launcher.cpp:271 gui/options.cpp:1099
msgid "Volume"
msgstr "Lydstyrke"
-#: gui/launcher.cpp:273 gui/options.cpp:1103
+#: gui/launcher.cpp:273 gui/options.cpp:1101
msgctxt "lowres"
msgid "Volume"
msgstr "Lydstyrke"
@@ -260,7 +274,7 @@ msgctxt "lowres"
msgid "Override global volume settings"
msgstr "Overstyr globale lydstyrke indstillinger"
-#: gui/launcher.cpp:286 gui/options.cpp:1111
+#: gui/launcher.cpp:286 gui/options.cpp:1109
msgid "MIDI"
msgstr "MIDI"
@@ -273,7 +287,7 @@ msgctxt "lowres"
msgid "Override global MIDI settings"
msgstr "Overstyr globale MIDI indstillinger"
-#: gui/launcher.cpp:300 gui/options.cpp:1117
+#: gui/launcher.cpp:300 gui/options.cpp:1115
msgid "MT-32"
msgstr "MT-32"
@@ -286,11 +300,11 @@ msgctxt "lowres"
msgid "Override global MT-32 settings"
msgstr "Overstyr globale MT-32 indstillinger"
-#: gui/launcher.cpp:314 gui/options.cpp:1124
+#: gui/launcher.cpp:314 gui/options.cpp:1122
msgid "Paths"
msgstr "Stier"
-#: gui/launcher.cpp:316 gui/options.cpp:1126
+#: gui/launcher.cpp:316 gui/options.cpp:1124
msgctxt "lowres"
msgid "Paths"
msgstr "Stier"
@@ -304,7 +318,7 @@ msgctxt "lowres"
msgid "Game Path:"
msgstr "Spil sti:"
-#: gui/launcher.cpp:330 gui/options.cpp:1150
+#: gui/launcher.cpp:330 gui/options.cpp:1148
msgid "Extra Path:"
msgstr "Ekstra sti:"
@@ -312,42 +326,42 @@ msgstr "Ekstra sti:"
msgid "Specifies path to additional data used by the game"
msgstr "Angiver sti til ekstra data der bruges i spillet"
-#: gui/launcher.cpp:332 gui/options.cpp:1152
+#: gui/launcher.cpp:332 gui/options.cpp:1150
msgctxt "lowres"
msgid "Extra Path:"
msgstr "Ekstra sti:"
-#: gui/launcher.cpp:339 gui/options.cpp:1134
+#: gui/launcher.cpp:339 gui/options.cpp:1132
msgid "Save Path:"
msgstr "Gemme sti:"
#: gui/launcher.cpp:339 gui/launcher.cpp:341 gui/launcher.cpp:342
-#: gui/options.cpp:1134 gui/options.cpp:1136 gui/options.cpp:1137
+#: gui/options.cpp:1132 gui/options.cpp:1134 gui/options.cpp:1135
msgid "Specifies where your saved games are put"
msgstr "Angiver hvor dine gemmer bliver lagt"
-#: gui/launcher.cpp:341 gui/options.cpp:1136
+#: gui/launcher.cpp:341 gui/options.cpp:1134
msgctxt "lowres"
msgid "Save Path:"
msgstr "Gemme sti:"
#: gui/launcher.cpp:360 gui/launcher.cpp:459 gui/launcher.cpp:517
-#: gui/launcher.cpp:571 gui/options.cpp:1145 gui/options.cpp:1153
-#: gui/options.cpp:1162 gui/options.cpp:1277 gui/options.cpp:1283
-#: gui/options.cpp:1291 gui/options.cpp:1321 gui/options.cpp:1327
-#: gui/options.cpp:1334 gui/options.cpp:1427 gui/options.cpp:1430
-#: gui/options.cpp:1442
+#: gui/launcher.cpp:571 gui/options.cpp:1143 gui/options.cpp:1151
+#: gui/options.cpp:1160 gui/options.cpp:1275 gui/options.cpp:1281
+#: gui/options.cpp:1289 gui/options.cpp:1319 gui/options.cpp:1325
+#: gui/options.cpp:1332 gui/options.cpp:1425 gui/options.cpp:1428
+#: gui/options.cpp:1440
msgctxt "path"
msgid "None"
msgstr "Ingen"
#: gui/launcher.cpp:365 gui/launcher.cpp:465 gui/launcher.cpp:575
-#: gui/options.cpp:1271 gui/options.cpp:1315 gui/options.cpp:1433
+#: gui/options.cpp:1269 gui/options.cpp:1313 gui/options.cpp:1431
#: backends/platform/wii/options.cpp:56
msgid "Default"
msgstr "Standard"
-#: gui/launcher.cpp:510 gui/options.cpp:1436
+#: gui/launcher.cpp:510 gui/options.cpp:1434
msgid "Select SoundFont"
msgstr "Vцlg SoundFont"
@@ -359,7 +373,7 @@ msgstr "Vцlg bibliotek med spil data"
msgid "Select additional game directory"
msgstr "Vцlg ekstra spil bibliotek"
-#: gui/launcher.cpp:559 gui/options.cpp:1379
+#: gui/launcher.cpp:559 gui/options.cpp:1377
msgid "Select directory for saved games"
msgstr "Vцlg bibliotek til spil gemmer"
@@ -557,6 +571,24 @@ msgstr "Gennemset %d biblioteker ..."
msgid "Discovered %d new games, ignored %d previously added games ..."
msgstr "Fundet %d nye spil, ignorer %d tidligere tilfјjede spil ..."
+#: gui/onscreendialog.cpp:101 gui/onscreendialog.cpp:103
+msgid "Stop"
+msgstr ""
+
+#: gui/onscreendialog.cpp:106
+msgid "Edit record description"
+msgstr ""
+
+#: gui/onscreendialog.cpp:108
+#, fuzzy
+msgid "Switch to Game"
+msgstr "Skift"
+
+#: gui/onscreendialog.cpp:110
+#, fuzzy
+msgid "Fast replay"
+msgstr "Hurtig tilstand"
+
#: gui/options.cpp:85
msgid "Never"
msgstr "Aldrig"
@@ -597,8 +629,8 @@ msgstr "44 kHz"
msgid "48 kHz"
msgstr "48 kHz"
-#: gui/options.cpp:255 gui/options.cpp:481 gui/options.cpp:582
-#: gui/options.cpp:651 gui/options.cpp:859
+#: gui/options.cpp:255 gui/options.cpp:479 gui/options.cpp:580
+#: gui/options.cpp:649 gui/options.cpp:857
msgctxt "soundfont"
msgid "None"
msgstr "Ingen"
@@ -619,70 +651,70 @@ msgstr "fuld skцrm indstillingen kunne ikke цndres"
msgid "the aspect ratio setting could not be changed"
msgstr "billedformat indstillingen ikke kunne цndres"
-#: gui/options.cpp:734
+#: gui/options.cpp:732
msgid "Graphics mode:"
msgstr "Grafik tilstand:"
-#: gui/options.cpp:748
+#: gui/options.cpp:746
msgid "Render mode:"
msgstr "Rendere tilstand:"
-#: gui/options.cpp:748 gui/options.cpp:749
+#: gui/options.cpp:746 gui/options.cpp:747
msgid "Special dithering modes supported by some games"
msgstr "Speciel farvereduceringstilstand understјttet a nogle spil"
-#: gui/options.cpp:760
+#: gui/options.cpp:758
#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2298
msgid "Fullscreen mode"
msgstr "Fuldskцrms tilstand"
-#: gui/options.cpp:763
+#: gui/options.cpp:761
msgid "Aspect ratio correction"
msgstr "Billedformat korrektion"
-#: gui/options.cpp:763
+#: gui/options.cpp:761
msgid "Correct aspect ratio for 320x200 games"
msgstr "Korrekt billedformat til 320x200 spil"
-#: gui/options.cpp:771
+#: gui/options.cpp:769
msgid "Preferred Device:"
msgstr "Foretruk. enhed:"
-#: gui/options.cpp:771
+#: gui/options.cpp:769
msgid "Music Device:"
msgstr "Musik enhed:"
-#: gui/options.cpp:771 gui/options.cpp:773
+#: gui/options.cpp:769 gui/options.cpp:771
msgid "Specifies preferred sound device or sound card emulator"
msgstr "Angiver foretukket lyd enhed eller lydkort emulator"
-#: gui/options.cpp:771 gui/options.cpp:773 gui/options.cpp:774
+#: gui/options.cpp:769 gui/options.cpp:771 gui/options.cpp:772
msgid "Specifies output sound device or sound card emulator"
msgstr "Angiver lyd udgangsenhed eller lydkorts emulator"
-#: gui/options.cpp:773
+#: gui/options.cpp:771
msgctxt "lowres"
msgid "Preferred Dev.:"
msgstr "Foretruk. enh.:"
-#: gui/options.cpp:773
+#: gui/options.cpp:771
msgctxt "lowres"
msgid "Music Device:"
msgstr "Musik enhed:"
-#: gui/options.cpp:800
+#: gui/options.cpp:798
msgid "AdLib emulator:"
msgstr "AdLib emulator:"
-#: gui/options.cpp:800 gui/options.cpp:801
+#: gui/options.cpp:798 gui/options.cpp:799
msgid "AdLib is used for music in many games"
msgstr "AdLib bliver brugt til musik i mange spil"
-#: gui/options.cpp:811
+#: gui/options.cpp:809
msgid "Output rate:"
msgstr "Udgangsfrekvens:"
-#: gui/options.cpp:811 gui/options.cpp:812
+#: gui/options.cpp:809 gui/options.cpp:810
msgid ""
"Higher value specifies better sound quality but may be not supported by your "
"soundcard"
@@ -690,64 +722,64 @@ msgstr ""
"Hјjere vцrdi angiver bedre lyd kvalitet, men understјttes mхske ikke af dit "
"lydkort"
-#: gui/options.cpp:822
+#: gui/options.cpp:820
msgid "GM Device:"
msgstr "GM enhed:"
-#: gui/options.cpp:822
+#: gui/options.cpp:820
msgid "Specifies default sound device for General MIDI output"
msgstr "Angiver standard lyd enhed for Generel MIDI-udgang"
-#: gui/options.cpp:833
+#: gui/options.cpp:831
msgid "Don't use General MIDI music"
msgstr "Brug ikke Generel MIDI musik"
-#: gui/options.cpp:844 gui/options.cpp:910
+#: gui/options.cpp:842 gui/options.cpp:908
msgid "Use first available device"
msgstr "Brug fјrste tilgцngelig enhed"
-#: gui/options.cpp:856
+#: gui/options.cpp:854
msgid "SoundFont:"
msgstr "SoundFont:"
-#: gui/options.cpp:856 gui/options.cpp:858 gui/options.cpp:859
+#: gui/options.cpp:854 gui/options.cpp:856 gui/options.cpp:857
msgid "SoundFont is supported by some audio cards, FluidSynth and Timidity"
msgstr "SoundFont er understјttet af nogle lydkort, FluidSynth og Timidity"
-#: gui/options.cpp:858
+#: gui/options.cpp:856
msgctxt "lowres"
msgid "SoundFont:"
msgstr "SoundFont:"
-#: gui/options.cpp:864
+#: gui/options.cpp:862
msgid "Mixed AdLib/MIDI mode"
msgstr "Blandet AdLib/MIDI tilstand"
-#: gui/options.cpp:864
+#: gui/options.cpp:862
msgid "Use both MIDI and AdLib sound generation"
msgstr "Brug bхde MIDI og AdLib lyd generering"
-#: gui/options.cpp:867
+#: gui/options.cpp:865
msgid "MIDI gain:"
msgstr "MIDI lydstyrke:"
-#: gui/options.cpp:874
+#: gui/options.cpp:872
msgid "FluidSynth Settings"
msgstr "FluidSynth indstillinger"
-#: gui/options.cpp:881
+#: gui/options.cpp:879
msgid "MT-32 Device:"
msgstr "MT-32 enhed:"
-#: gui/options.cpp:881
+#: gui/options.cpp:879
msgid "Specifies default sound device for Roland MT-32/LAPC1/CM32l/CM64 output"
msgstr "Angiver standard lyd enhed for Roland MT-32/LAPC1/CM32I/CM64 udgang"
-#: gui/options.cpp:886
+#: gui/options.cpp:884
msgid "True Roland MT-32 (disable GM emulation)"
msgstr "Цgte Roland MT-32 (undlad GM emulering)"
-#: gui/options.cpp:886 gui/options.cpp:888
+#: gui/options.cpp:884 gui/options.cpp:886
msgid ""
"Check if you want to use your real hardware Roland-compatible sound device "
"connected to your computer"
@@ -755,16 +787,16 @@ msgstr ""
"Kryds af hvis du vil bruge din rigtige hardware Roland-kompatible lyd enhed "
"tilsluttet til din computer"
-#: gui/options.cpp:888
+#: gui/options.cpp:886
msgctxt "lowres"
msgid "True Roland MT-32 (no GM emulation)"
msgstr "Цgte Roland MT-32 (ingen GM emulering)"
-#: gui/options.cpp:891
+#: gui/options.cpp:889
msgid "Roland GS Device (enable MT-32 mappings)"
msgstr "Roland GS enhed (aktivщr MT-32 tilknytninger)"
-#: gui/options.cpp:891
+#: gui/options.cpp:889
msgid ""
"Check if you want to enable patch mappings to emulate an MT-32 on a Roland "
"GS device"
@@ -772,173 +804,173 @@ msgstr ""
"Kryds af hvis du vil aktivere patch tilknytninger, for at emulere en MT-32 "
"pх en Roland GS enhed"
-#: gui/options.cpp:900
+#: gui/options.cpp:898
msgid "Don't use Roland MT-32 music"
msgstr "Brug ikke Roland MT-32 musik"
-#: gui/options.cpp:927
+#: gui/options.cpp:925
msgid "Text and Speech:"
msgstr "Tekst og tale:"
-#: gui/options.cpp:931 gui/options.cpp:941
+#: gui/options.cpp:929 gui/options.cpp:939
msgid "Speech"
msgstr "Tale"
-#: gui/options.cpp:932 gui/options.cpp:942
+#: gui/options.cpp:930 gui/options.cpp:940
msgid "Subtitles"
msgstr "Undertekster"
-#: gui/options.cpp:933
+#: gui/options.cpp:931
msgid "Both"
msgstr "Begge"
-#: gui/options.cpp:935
+#: gui/options.cpp:933
msgid "Subtitle speed:"
msgstr "Tekst hastighed:"
-#: gui/options.cpp:937
+#: gui/options.cpp:935
msgctxt "lowres"
msgid "Text and Speech:"
msgstr "Tekst og tale:"
-#: gui/options.cpp:941
+#: gui/options.cpp:939
msgid "Spch"
msgstr "Tale"
-#: gui/options.cpp:942
+#: gui/options.cpp:940
msgid "Subs"
msgstr "Tekst"
-#: gui/options.cpp:943
+#: gui/options.cpp:941
msgctxt "lowres"
msgid "Both"
msgstr "Begge"
-#: gui/options.cpp:943
+#: gui/options.cpp:941
msgid "Show subtitles and play speech"
msgstr "Vis undertekster og afspil tale"
-#: gui/options.cpp:945
+#: gui/options.cpp:943
msgctxt "lowres"
msgid "Subtitle speed:"
msgstr "Tekst hastighed:"
-#: gui/options.cpp:961
+#: gui/options.cpp:959
msgid "Music volume:"
msgstr "Musik lydstyrke:"
-#: gui/options.cpp:963
+#: gui/options.cpp:961
msgctxt "lowres"
msgid "Music volume:"
msgstr "Musik lydstyrke:"
-#: gui/options.cpp:970
+#: gui/options.cpp:968
msgid "Mute All"
msgstr "Mute alle"
-#: gui/options.cpp:973
+#: gui/options.cpp:971
msgid "SFX volume:"
msgstr "SFX lydstyrke:"
-#: gui/options.cpp:973 gui/options.cpp:975 gui/options.cpp:976
+#: gui/options.cpp:971 gui/options.cpp:973 gui/options.cpp:974
msgid "Special sound effects volume"
msgstr "Lydstyrke for specielle lydeffekter"
-#: gui/options.cpp:975
+#: gui/options.cpp:973
msgctxt "lowres"
msgid "SFX volume:"
msgstr "SFX lydstyrke:"
-#: gui/options.cpp:983
+#: gui/options.cpp:981
msgid "Speech volume:"
msgstr "Tale lydstyrke:"
-#: gui/options.cpp:985
+#: gui/options.cpp:983
msgctxt "lowres"
msgid "Speech volume:"
msgstr "Tale lydstyrke:"
-#: gui/options.cpp:1142
+#: gui/options.cpp:1140
msgid "Theme Path:"
msgstr "Tema sti:"
-#: gui/options.cpp:1144
+#: gui/options.cpp:1142
msgctxt "lowres"
msgid "Theme Path:"
msgstr "Tema sti:"
-#: gui/options.cpp:1150 gui/options.cpp:1152 gui/options.cpp:1153
+#: gui/options.cpp:1148 gui/options.cpp:1150 gui/options.cpp:1151
msgid "Specifies path to additional data used by all games or ScummVM"
msgstr "Angiver sti til ekstra data brugt af alle spil eller ScummVM"
-#: gui/options.cpp:1159
+#: gui/options.cpp:1157
msgid "Plugins Path:"
msgstr "Plugin sti:"
-#: gui/options.cpp:1161
+#: gui/options.cpp:1159
msgctxt "lowres"
msgid "Plugins Path:"
msgstr "Plugin sti:"
-#: gui/options.cpp:1170 gui/fluidsynth-dialog.cpp:138
+#: gui/options.cpp:1168 gui/fluidsynth-dialog.cpp:138
msgid "Misc"
msgstr "Andet"
-#: gui/options.cpp:1172
+#: gui/options.cpp:1170
msgctxt "lowres"
msgid "Misc"
msgstr "Andet"
-#: gui/options.cpp:1174
+#: gui/options.cpp:1172
msgid "Theme:"
msgstr "Tema:"
-#: gui/options.cpp:1178
+#: gui/options.cpp:1176
msgid "GUI Renderer:"
msgstr "GUI renderer:"
-#: gui/options.cpp:1190
+#: gui/options.cpp:1188
msgid "Autosave:"
msgstr "Auto gemme:"
-#: gui/options.cpp:1192
+#: gui/options.cpp:1190
msgctxt "lowres"
msgid "Autosave:"
msgstr "Auto gemme:"
-#: gui/options.cpp:1200
+#: gui/options.cpp:1198
msgid "Keys"
msgstr "Taster"
-#: gui/options.cpp:1207
+#: gui/options.cpp:1205
msgid "GUI Language:"
msgstr "Sprog:"
-#: gui/options.cpp:1207
+#: gui/options.cpp:1205
msgid "Language of ScummVM GUI"
msgstr "Sprog for brugerfladen i ScummVM"
-#: gui/options.cpp:1366
+#: gui/options.cpp:1364
msgid "You have to restart ScummVM before your changes will take effect."
msgstr "Du skal genstarte ScummVM fјr dine цndringer har effekt."
-#: gui/options.cpp:1386
+#: gui/options.cpp:1384
msgid "The chosen directory cannot be written to. Please select another one."
msgstr "Der kan ikke skrives til det valgte bibliotek. Vцlg venligst et andet."
-#: gui/options.cpp:1395
+#: gui/options.cpp:1393
msgid "Select directory for GUI themes"
msgstr "Vцlg bibliotek for GUI temaer"
-#: gui/options.cpp:1405
+#: gui/options.cpp:1403
msgid "Select directory for extra files"
msgstr "Vцlg bibliotek for ekstra filer"
-#: gui/options.cpp:1416
+#: gui/options.cpp:1414
msgid "Select directory for plugins"
msgstr "Vцlg bibliotek for plugins"
-#: gui/options.cpp:1469
+#: gui/options.cpp:1467
msgid ""
"The theme you selected does not support your current language. If you want "
"to use this theme you need to switch to another language first."
@@ -946,6 +978,29 @@ msgstr ""
"Temaet du valgte understјtter ikke dit aktuelle sprog. Hvis du јnsker at "
"bruge dette tema, skal du skifte til et andet sprog fјrst."
+#. I18N: You must leave "#" as is, only word 'next' is translatable
+#: gui/predictivedialog.cpp:87
+msgid "# next"
+msgstr ""
+
+#: gui/predictivedialog.cpp:88
+msgid "add"
+msgstr ""
+
+#: gui/predictivedialog.cpp:92
+#, fuzzy
+msgid "Delete char"
+msgstr "Slet"
+
+#: gui/predictivedialog.cpp:96
+msgid "<"
+msgstr ""
+
+#. I18N: Pre means 'Predictive', leave '*' as is
+#: gui/predictivedialog.cpp:98
+msgid "* Pre"
+msgstr ""
+
#: gui/recorderdialog.cpp:64
msgid "Recorder or Playback Gameplay"
msgstr ""
@@ -983,6 +1038,11 @@ msgstr ""
msgid "Do you really want to delete this record?"
msgstr "Vil du virkelig slette denne gemmer?"
+#: gui/recorderdialog.cpp:174
+#, fuzzy
+msgid "Unknown Author"
+msgstr "Ukendt fejl"
+
#: gui/saveload-dialog.cpp:167
msgid "List view"
msgstr "Liste visning"
@@ -1433,14 +1493,18 @@ msgstr ""
msgid "Start anyway"
msgstr "Start alligevel"
-#: audio/fmopl.cpp:50
+#: audio/fmopl.cpp:62
msgid "MAME OPL emulator"
msgstr "MAME OPL emulator"
-#: audio/fmopl.cpp:52
+#: audio/fmopl.cpp:64
msgid "DOSBox OPL emulator"
msgstr "DOSBox OPL emulator"
+#: audio/fmopl.cpp:67
+msgid "ALSA Direct FM"
+msgstr ""
+
#: audio/mididrv.cpp:209
#, c-format
msgid ""
@@ -1489,7 +1553,7 @@ msgstr "Ingen musik"
msgid "Amiga Audio Emulator"
msgstr "Amiga lyd emulator"
-#: audio/softsynth/adlib.cpp:2285
+#: audio/adlib.cpp:2291
msgid "AdLib Emulator"
msgstr "AdLib emulator"
@@ -2122,14 +2186,13 @@ msgstr "Klik deaktiveret"
#: engines/agi/detection.cpp:147 engines/drascula/detection.cpp:302
#: engines/dreamweb/detection.cpp:47 engines/neverhood/detection.cpp:160
#: engines/sci/detection.cpp:394 engines/toltecs/detection.cpp:200
-#: engines/zvision/detection.cpp:246
+#: engines/zvision/detection_tables.h:51
msgid "Use original save/load screens"
msgstr "Brug original gem/indlцs skцrme"
#: engines/agi/detection.cpp:148 engines/drascula/detection.cpp:303
#: engines/dreamweb/detection.cpp:48 engines/neverhood/detection.cpp:161
#: engines/sci/detection.cpp:395 engines/toltecs/detection.cpp:201
-#: engines/zvision/detection.cpp:247
msgid "Use the original save/load screens, instead of the ScummVM ones"
msgstr "Brug de originale gem/indlцs skцrme, istedet for dem fra ScummVM"
@@ -3266,6 +3329,25 @@ msgstr "Flyv til hјjre"
msgid "Fly to lower right"
msgstr "Flyv nederst til hјjre"
+#: engines/scumm/input.cpp:572
+#, fuzzy
+msgid "Snap scroll on"
+msgstr "Jцvn bevцgelse"
+
+#: engines/scumm/input.cpp:574
+msgid "Snap scroll off"
+msgstr ""
+
+#: engines/scumm/input.cpp:587
+#, fuzzy
+msgid "Music volume: "
+msgstr "Musik lydstyrke:"
+
+#: engines/scumm/input.cpp:604
+#, fuzzy
+msgid "Subtitle speed: "
+msgstr "Tekst hastighed:"
+
#: engines/scumm/scumm.cpp:1832
#, c-format
msgid ""
@@ -3417,39 +3499,44 @@ msgstr ""
msgid "Show the current number of frames per second in the upper left corner"
msgstr ""
-#: engines/zvision/detection.cpp:256
+#: engines/zvision/detection_tables.h:52
+#, fuzzy
+msgid "Use the original save/load screens instead of the ScummVM interface"
+msgstr "Brug de originale gem/indlцs skцrme, istedet for dem fra ScummVM"
+
+#: engines/zvision/detection_tables.h:61
msgid "Double FPS"
msgstr ""
-#: engines/zvision/detection.cpp:257
-msgid "Increase game FPS from 30 to 60"
+#: engines/zvision/detection_tables.h:62
+msgid "Increase framerate from 30 to 60 FPS"
msgstr ""
-#: engines/zvision/detection.cpp:266
+#: engines/zvision/detection_tables.h:71
#, fuzzy
msgid "Enable Venus"
msgstr "Aktivщr helium tilstand"
-#: engines/zvision/detection.cpp:267
+#: engines/zvision/detection_tables.h:72
+#, fuzzy
msgid "Enable the Venus help system"
-msgstr ""
+msgstr "Aktivщr helium tilstand"
-#: engines/zvision/detection.cpp:276
+#: engines/zvision/detection_tables.h:81
msgid "Disable animation while turning"
msgstr ""
-#: engines/zvision/detection.cpp:277
-msgid "Disable animation while turning in panoramic mode"
+#: engines/zvision/detection_tables.h:82
+msgid "Disable animation while turning in panorama mode"
msgstr ""
-#: engines/zvision/detection.cpp:286
-msgid "Use the hires MPEG movies"
+#: engines/zvision/detection_tables.h:91
+msgid "Use high resolution MPEG video"
msgstr ""
-#: engines/zvision/detection.cpp:287
+#: engines/zvision/detection_tables.h:92
#, fuzzy
-msgid ""
-"Use the hires MPEG movies of the DVD version, instead of the lowres AVI ones"
+msgid "Use MPEG video from the DVD version, instead of lower resolution AVI"
msgstr ""
"Brug det alternative sцt af sјlv markјrer, i stedet for de normale gyldne"
diff --git a/po/de_DE.po b/po/de_DE.po
index 0e7e5d901c..60fd903be9 100644
--- a/po/de_DE.po
+++ b/po/de_DE.po
@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ScummVM 1.8.0git\n"
"Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n"
-"POT-Creation-Date: 2015-06-30 20:57+0100\n"
-"PO-Revision-Date: 2015-07-04 12:06+0200\n"
+"POT-Creation-Date: 2015-10-11 18:59+0100\n"
+"PO-Revision-Date: 2015-10-16 11:00+0200\n"
"Last-Translator: Lothar Serra Mari <scummvm@rootfather.de>\n"
"Language-Team: Simon Sawatzki <SimSaw@gmx.de>, Lothar Serra Mari "
"<scummvm@rootfather.de>\n"
@@ -17,7 +17,7 @@ msgstr ""
"Content-Type: text/plain; charset=iso-8859-1\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Poedit 1.8.2\n"
+"X-Generator: Poedit 1.8.5\n"
#: gui/about.cpp:94
#, c-format
@@ -32,7 +32,7 @@ msgstr "Verwendete Funktionen:"
msgid "Available engines:"
msgstr "Verfќgbare Spiele-Engines:"
-#: gui/browser.cpp:68
+#: gui/browser.cpp:68 gui/browser_osx.mm:104
msgid "Show hidden files"
msgstr "Versteckte Dateien anzeigen"
@@ -54,13 +54,14 @@ msgctxt "lowres"
msgid "Go up"
msgstr "Pfad hoch"
-#: gui/browser.cpp:75 gui/chooser.cpp:46 gui/KeysDialog.cpp:43
-#: gui/launcher.cpp:351 gui/massadd.cpp:95 gui/options.cpp:1239
-#: gui/recorderdialog.cpp:70 gui/recorderdialog.cpp:156
-#: gui/saveload-dialog.cpp:216 gui/saveload-dialog.cpp:276
-#: gui/saveload-dialog.cpp:547 gui/saveload-dialog.cpp:931
-#: gui/themebrowser.cpp:55 gui/fluidsynth-dialog.cpp:152
-#: engines/engine.cpp:483 backends/platform/wii/options.cpp:48
+#: gui/browser.cpp:75 gui/chooser.cpp:46 gui/editrecorddialog.cpp:67
+#: gui/KeysDialog.cpp:43 gui/launcher.cpp:351 gui/massadd.cpp:95
+#: gui/options.cpp:1237 gui/predictivedialog.cpp:74 gui/recorderdialog.cpp:70
+#: gui/recorderdialog.cpp:156 gui/saveload-dialog.cpp:216
+#: gui/saveload-dialog.cpp:276 gui/saveload-dialog.cpp:547
+#: gui/saveload-dialog.cpp:931 gui/themebrowser.cpp:55
+#: gui/fluidsynth-dialog.cpp:152 engines/engine.cpp:483
+#: backends/platform/wii/options.cpp:48
#: backends/events/default/default-events.cpp:196
#: backends/events/default/default-events.cpp:218
#: engines/drascula/saveload.cpp:49 engines/parallaction/saveload.cpp:274
@@ -68,10 +69,27 @@ msgstr "Pfad hoch"
msgid "Cancel"
msgstr "Abbrechen"
-#: gui/browser.cpp:76 gui/chooser.cpp:47 gui/themebrowser.cpp:56
+#: gui/browser.cpp:76 gui/browser_osx.mm:103 gui/chooser.cpp:47
+#: gui/themebrowser.cpp:56
msgid "Choose"
msgstr "Auswфhlen"
+#: gui/editrecorddialog.cpp:58
+msgid "Author:"
+msgstr "Autor:"
+
+#: gui/editrecorddialog.cpp:59 gui/launcher.cpp:204
+msgid "Name:"
+msgstr "Name:"
+
+#: gui/editrecorddialog.cpp:60
+msgid "Notes:"
+msgstr "Notizen:"
+
+#: gui/editrecorddialog.cpp:68 gui/predictivedialog.cpp:75
+msgid "Ok"
+msgstr "OK"
+
#: gui/gui-manager.cpp:117 backends/keymapper/remap-dialog.cpp:53
#: engines/scumm/help.cpp:126 engines/scumm/help.cpp:141
#: engines/scumm/help.cpp:166 engines/scumm/help.cpp:192
@@ -104,7 +122,7 @@ msgid "Map"
msgstr "Zuweisen"
#: gui/KeysDialog.cpp:42 gui/launcher.cpp:352 gui/launcher.cpp:1048
-#: gui/launcher.cpp:1052 gui/massadd.cpp:92 gui/options.cpp:1240
+#: gui/launcher.cpp:1052 gui/massadd.cpp:92 gui/options.cpp:1238
#: gui/saveload-dialog.cpp:932 gui/fluidsynth-dialog.cpp:153
#: engines/engine.cpp:402 engines/engine.cpp:413
#: backends/platform/wii/options.cpp:47
@@ -166,10 +184,6 @@ msgctxt "lowres"
msgid "ID:"
msgstr "ID:"
-#: gui/launcher.cpp:204
-msgid "Name:"
-msgstr "Name:"
-
#: gui/launcher.cpp:204 gui/launcher.cpp:206 gui/launcher.cpp:207
msgid "Full title of the game"
msgstr "Voller Name des Spiels"
@@ -192,7 +206,7 @@ msgstr ""
"Spiels in eine deutsche verwandeln."
#: gui/launcher.cpp:212 gui/launcher.cpp:226 gui/options.cpp:87
-#: gui/options.cpp:737 gui/options.cpp:750 gui/options.cpp:1210
+#: gui/options.cpp:735 gui/options.cpp:748 gui/options.cpp:1208
#: audio/null.cpp:41
msgid "<default>"
msgstr "<Standard>"
@@ -214,11 +228,11 @@ msgstr "Plattform:"
msgid "Engine"
msgstr "Engine"
-#: gui/launcher.cpp:245 gui/options.cpp:1073 gui/options.cpp:1090
+#: gui/launcher.cpp:245 gui/options.cpp:1071 gui/options.cpp:1088
msgid "Graphics"
msgstr "Grafik"
-#: gui/launcher.cpp:245 gui/options.cpp:1073 gui/options.cpp:1090
+#: gui/launcher.cpp:245 gui/options.cpp:1071 gui/options.cpp:1088
msgid "GFX"
msgstr "GFX"
@@ -231,7 +245,7 @@ msgctxt "lowres"
msgid "Override global graphic settings"
msgstr "Globale Grafik-Einstellungen ќbergehen"
-#: gui/launcher.cpp:257 gui/options.cpp:1096
+#: gui/launcher.cpp:257 gui/options.cpp:1094
msgid "Audio"
msgstr "Audio"
@@ -244,11 +258,11 @@ msgctxt "lowres"
msgid "Override global audio settings"
msgstr "Globale Audio-Einstellungen ќbergehen"
-#: gui/launcher.cpp:271 gui/options.cpp:1101
+#: gui/launcher.cpp:271 gui/options.cpp:1099
msgid "Volume"
msgstr "Lautstфrke"
-#: gui/launcher.cpp:273 gui/options.cpp:1103
+#: gui/launcher.cpp:273 gui/options.cpp:1101
msgctxt "lowres"
msgid "Volume"
msgstr "Lautst."
@@ -262,7 +276,7 @@ msgctxt "lowres"
msgid "Override global volume settings"
msgstr "Globale Lautstфrke-Einstellungen ќbergehen"
-#: gui/launcher.cpp:286 gui/options.cpp:1111
+#: gui/launcher.cpp:286 gui/options.cpp:1109
msgid "MIDI"
msgstr "MIDI"
@@ -275,7 +289,7 @@ msgctxt "lowres"
msgid "Override global MIDI settings"
msgstr "Globale MIDI-Einstellungen ќbergehen"
-#: gui/launcher.cpp:300 gui/options.cpp:1117
+#: gui/launcher.cpp:300 gui/options.cpp:1115
msgid "MT-32"
msgstr "MT-32"
@@ -288,11 +302,11 @@ msgctxt "lowres"
msgid "Override global MT-32 settings"
msgstr "Globale MT-32-Einstellungen ќbergehen"
-#: gui/launcher.cpp:314 gui/options.cpp:1124
+#: gui/launcher.cpp:314 gui/options.cpp:1122
msgid "Paths"
msgstr "Pfade"
-#: gui/launcher.cpp:316 gui/options.cpp:1126
+#: gui/launcher.cpp:316 gui/options.cpp:1124
msgctxt "lowres"
msgid "Paths"
msgstr "Pfade"
@@ -306,7 +320,7 @@ msgctxt "lowres"
msgid "Game Path:"
msgstr "Spielpfad:"
-#: gui/launcher.cpp:330 gui/options.cpp:1150
+#: gui/launcher.cpp:330 gui/options.cpp:1148
msgid "Extra Path:"
msgstr "Extras:"
@@ -314,42 +328,42 @@ msgstr "Extras:"
msgid "Specifies path to additional data used by the game"
msgstr "Legt das Verzeichnis fќr zusфtzliche Spieldateien fest."
-#: gui/launcher.cpp:332 gui/options.cpp:1152
+#: gui/launcher.cpp:332 gui/options.cpp:1150
msgctxt "lowres"
msgid "Extra Path:"
msgstr "Extras:"
-#: gui/launcher.cpp:339 gui/options.cpp:1134
+#: gui/launcher.cpp:339 gui/options.cpp:1132
msgid "Save Path:"
msgstr "Spielstфnde:"
#: gui/launcher.cpp:339 gui/launcher.cpp:341 gui/launcher.cpp:342
-#: gui/options.cpp:1134 gui/options.cpp:1136 gui/options.cpp:1137
+#: gui/options.cpp:1132 gui/options.cpp:1134 gui/options.cpp:1135
msgid "Specifies where your saved games are put"
msgstr "Legt fest, wo die Spielstфnde gespeichert werden."
-#: gui/launcher.cpp:341 gui/options.cpp:1136
+#: gui/launcher.cpp:341 gui/options.cpp:1134
msgctxt "lowres"
msgid "Save Path:"
msgstr "Spielstфnde:"
#: gui/launcher.cpp:360 gui/launcher.cpp:459 gui/launcher.cpp:517
-#: gui/launcher.cpp:571 gui/options.cpp:1145 gui/options.cpp:1153
-#: gui/options.cpp:1162 gui/options.cpp:1277 gui/options.cpp:1283
-#: gui/options.cpp:1291 gui/options.cpp:1321 gui/options.cpp:1327
-#: gui/options.cpp:1334 gui/options.cpp:1427 gui/options.cpp:1430
-#: gui/options.cpp:1442
+#: gui/launcher.cpp:571 gui/options.cpp:1143 gui/options.cpp:1151
+#: gui/options.cpp:1160 gui/options.cpp:1275 gui/options.cpp:1281
+#: gui/options.cpp:1289 gui/options.cpp:1319 gui/options.cpp:1325
+#: gui/options.cpp:1332 gui/options.cpp:1425 gui/options.cpp:1428
+#: gui/options.cpp:1440
msgctxt "path"
msgid "None"
msgstr "Keiner"
#: gui/launcher.cpp:365 gui/launcher.cpp:465 gui/launcher.cpp:575
-#: gui/options.cpp:1271 gui/options.cpp:1315 gui/options.cpp:1433
+#: gui/options.cpp:1269 gui/options.cpp:1313 gui/options.cpp:1431
#: backends/platform/wii/options.cpp:56
msgid "Default"
msgstr "Standard"
-#: gui/launcher.cpp:510 gui/options.cpp:1436
+#: gui/launcher.cpp:510 gui/options.cpp:1434
msgid "Select SoundFont"
msgstr "SoundFont auswфhlen"
@@ -361,7 +375,7 @@ msgstr "Verzeichnis mit Spieldateien auswфhlen"
msgid "Select additional game directory"
msgstr "Verzeichnis mit zusфtzlichen Dateien auswфhlen"
-#: gui/launcher.cpp:559 gui/options.cpp:1379
+#: gui/launcher.cpp:559 gui/options.cpp:1377
msgid "Select directory for saved games"
msgstr "Verzeichnis fќr Spielstфnde auswфhlen"
@@ -561,6 +575,22 @@ msgstr "%d Ordner durchsucht..."
msgid "Discovered %d new games, ignored %d previously added games ..."
msgstr "%d neue Spiele gefunden, %d bereits hinzugefќgte Spiele ignoriert..."
+#: gui/onscreendialog.cpp:101 gui/onscreendialog.cpp:103
+msgid "Stop"
+msgstr "Anhalten"
+
+#: gui/onscreendialog.cpp:106
+msgid "Edit record description"
+msgstr "Aufnahme-Beschreibung фndern"
+
+#: gui/onscreendialog.cpp:108
+msgid "Switch to Game"
+msgstr "Wechsle"
+
+#: gui/onscreendialog.cpp:110
+msgid "Fast replay"
+msgstr "Schneller Modus"
+
#: gui/options.cpp:85
msgid "Never"
msgstr "Niemals"
@@ -601,8 +631,8 @@ msgstr "44 kHz"
msgid "48 kHz"
msgstr "48 kHz"
-#: gui/options.cpp:255 gui/options.cpp:481 gui/options.cpp:582
-#: gui/options.cpp:651 gui/options.cpp:859
+#: gui/options.cpp:255 gui/options.cpp:479 gui/options.cpp:580
+#: gui/options.cpp:649 gui/options.cpp:857
msgctxt "soundfont"
msgid "None"
msgstr "Kein SoundFont"
@@ -624,72 +654,72 @@ msgid "the aspect ratio setting could not be changed"
msgstr ""
"Einstellung fќr Seitenverhфltniskorrektur konnte nicht geфndert werden."
-#: gui/options.cpp:734
+#: gui/options.cpp:732
msgid "Graphics mode:"
msgstr "Grafikmodus:"
-#: gui/options.cpp:748
+#: gui/options.cpp:746
msgid "Render mode:"
msgstr "Render-Modus:"
-#: gui/options.cpp:748 gui/options.cpp:749
+#: gui/options.cpp:746 gui/options.cpp:747
msgid "Special dithering modes supported by some games"
msgstr ""
"Spezielle Farbmischungsmethoden werden von manchen Spielen unterstќtzt."
-#: gui/options.cpp:760
+#: gui/options.cpp:758
#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2298
msgid "Fullscreen mode"
msgstr "Vollbildmodus"
-#: gui/options.cpp:763
+#: gui/options.cpp:761
msgid "Aspect ratio correction"
msgstr "Seitenverhфltnis korrigieren"
-#: gui/options.cpp:763
+#: gui/options.cpp:761
msgid "Correct aspect ratio for 320x200 games"
msgstr "Seitenverhфltnis fќr Spiele mit der Auflіsung 320x200 korrigieren"
-#: gui/options.cpp:771
+#: gui/options.cpp:769
msgid "Preferred Device:"
msgstr "Bevorzugtes Gerфt:"
-#: gui/options.cpp:771
+#: gui/options.cpp:769
msgid "Music Device:"
msgstr "Musikgerфt:"
-#: gui/options.cpp:771 gui/options.cpp:773
+#: gui/options.cpp:769 gui/options.cpp:771
msgid "Specifies preferred sound device or sound card emulator"
msgstr ""
"Legt das bevorzugte Tonwiedergabe-Gerфt oder den Soundkarten-Emulator fest."
-#: gui/options.cpp:771 gui/options.cpp:773 gui/options.cpp:774
+#: gui/options.cpp:769 gui/options.cpp:771 gui/options.cpp:772
msgid "Specifies output sound device or sound card emulator"
msgstr "Legt das Musikwiedergabe-Gerфt oder den Soundkarten-Emulator fest."
-#: gui/options.cpp:773
+#: gui/options.cpp:771
msgctxt "lowres"
msgid "Preferred Dev.:"
msgstr "Standard-Gerфt:"
-#: gui/options.cpp:773
+#: gui/options.cpp:771
msgctxt "lowres"
msgid "Music Device:"
msgstr "Musikgerфt:"
-#: gui/options.cpp:800
+#: gui/options.cpp:798
msgid "AdLib emulator:"
msgstr "AdLib-Emulator"
-#: gui/options.cpp:800 gui/options.cpp:801
+#: gui/options.cpp:798 gui/options.cpp:799
msgid "AdLib is used for music in many games"
msgstr "AdLib wird fќr die Musik in vielen Spielen verwendet."
-#: gui/options.cpp:811
+#: gui/options.cpp:809
msgid "Output rate:"
msgstr "Ausgabefrequenz:"
-#: gui/options.cpp:811 gui/options.cpp:812
+#: gui/options.cpp:809 gui/options.cpp:810
msgid ""
"Higher value specifies better sound quality but may be not supported by your "
"soundcard"
@@ -697,68 +727,68 @@ msgstr ""
"Hіhere Werte bewirken eine bessere Soundqualitфt, werden aber mіglicherweise "
"nicht von jeder Soundkarte unterstќtzt."
-#: gui/options.cpp:822
+#: gui/options.cpp:820
msgid "GM Device:"
msgstr "GM-Gerфt:"
-#: gui/options.cpp:822
+#: gui/options.cpp:820
msgid "Specifies default sound device for General MIDI output"
msgstr ""
"Legt das standardmфпige Musikwiedergabe-Gerфt fќr General-MIDI-Ausgabe fest."
-#: gui/options.cpp:833
+#: gui/options.cpp:831
msgid "Don't use General MIDI music"
msgstr "Keine General-MIDI-Musik"
-#: gui/options.cpp:844 gui/options.cpp:910
+#: gui/options.cpp:842 gui/options.cpp:908
msgid "Use first available device"
msgstr "Erstes verfќgbares Gerфt"
-#: gui/options.cpp:856
+#: gui/options.cpp:854
msgid "SoundFont:"
msgstr "SoundFont:"
-#: gui/options.cpp:856 gui/options.cpp:858 gui/options.cpp:859
+#: gui/options.cpp:854 gui/options.cpp:856 gui/options.cpp:857
msgid "SoundFont is supported by some audio cards, FluidSynth and Timidity"
msgstr ""
"SoundFont wird von einigen Soundkarten, FluidSynth und Timidity unterstќtzt."
-#: gui/options.cpp:858
+#: gui/options.cpp:856
msgctxt "lowres"
msgid "SoundFont:"
msgstr "SoundFont:"
-#: gui/options.cpp:864
+#: gui/options.cpp:862
msgid "Mixed AdLib/MIDI mode"
msgstr "Gemischter AdLib/MIDI-Modus"
-#: gui/options.cpp:864
+#: gui/options.cpp:862
msgid "Use both MIDI and AdLib sound generation"
msgstr "Kombiniert MIDI-Musik mit AdLib-Soundeffekten"
-#: gui/options.cpp:867
+#: gui/options.cpp:865
msgid "MIDI gain:"
msgstr "MIDI-Lautstфrke:"
-#: gui/options.cpp:874
+#: gui/options.cpp:872
msgid "FluidSynth Settings"
msgstr "FluidSynth-Einstellungen"
-#: gui/options.cpp:881
+#: gui/options.cpp:879
msgid "MT-32 Device:"
msgstr "MT-32-Gerфt:"
-#: gui/options.cpp:881
+#: gui/options.cpp:879
msgid "Specifies default sound device for Roland MT-32/LAPC1/CM32l/CM64 output"
msgstr ""
"Legt das standardmфпige Tonwiedergabe-Gerфt fќr die Ausgabe von Roland MT-32/"
"LAPC1/CM32l/CM64 fest."
-#: gui/options.cpp:886
+#: gui/options.cpp:884
msgid "True Roland MT-32 (disable GM emulation)"
msgstr "Echte Roland MT-32 (GM-Emulation deaktiviert)"
-#: gui/options.cpp:886 gui/options.cpp:888
+#: gui/options.cpp:884 gui/options.cpp:886
msgid ""
"Check if you want to use your real hardware Roland-compatible sound device "
"connected to your computer"
@@ -766,16 +796,16 @@ msgstr ""
"Wфhlen Sie dies aus, wenn Sie ein echtes Roland-kompatibles Soundgerфt "
"verwenden"
-#: gui/options.cpp:888
+#: gui/options.cpp:886
msgctxt "lowres"
msgid "True Roland MT-32 (no GM emulation)"
msgstr "Echte Roland MT-32 (keine GM-Emulation)"
-#: gui/options.cpp:891
+#: gui/options.cpp:889
msgid "Roland GS Device (enable MT-32 mappings)"
msgstr "Roland-GS-Gerфt (MT-32-Zuweisungen aktivieren)"
-#: gui/options.cpp:891
+#: gui/options.cpp:889
msgid ""
"Check if you want to enable patch mappings to emulate an MT-32 on a Roland "
"GS device"
@@ -783,178 +813,178 @@ msgstr ""
"Wфhlen Sie dies aus, wenn Sie ausbessernde Instrumentzuweisungen aktivieren "
"mіchten, um MT-32 auf einem Roland-GS-Gerфt zu emulieren."
-#: gui/options.cpp:900
+#: gui/options.cpp:898
msgid "Don't use Roland MT-32 music"
msgstr "Keine Roland-MT-32-Musik"
-#: gui/options.cpp:927
+#: gui/options.cpp:925
msgid "Text and Speech:"
msgstr "Sprache und Text:"
-#: gui/options.cpp:931 gui/options.cpp:941
+#: gui/options.cpp:929 gui/options.cpp:939
msgid "Speech"
msgstr "Sprache"
-#: gui/options.cpp:932 gui/options.cpp:942
+#: gui/options.cpp:930 gui/options.cpp:940
msgid "Subtitles"
msgstr "Untertitel"
-#: gui/options.cpp:933
+#: gui/options.cpp:931
msgid "Both"
msgstr "Beides"
-#: gui/options.cpp:935
+#: gui/options.cpp:933
msgid "Subtitle speed:"
msgstr "Untertitel-Tempo:"
-#: gui/options.cpp:937
+#: gui/options.cpp:935
msgctxt "lowres"
msgid "Text and Speech:"
msgstr "Text u. Sprache:"
-#: gui/options.cpp:941
+#: gui/options.cpp:939
msgid "Spch"
msgstr "Spr."
-#: gui/options.cpp:942
+#: gui/options.cpp:940
msgid "Subs"
msgstr "Text"
-#: gui/options.cpp:943
+#: gui/options.cpp:941
msgctxt "lowres"
msgid "Both"
msgstr "S+T"
-#: gui/options.cpp:943
+#: gui/options.cpp:941
msgid "Show subtitles and play speech"
msgstr "Untertitel anzeigen und Sprachausgabe aktivieren"
-#: gui/options.cpp:945
+#: gui/options.cpp:943
msgctxt "lowres"
msgid "Subtitle speed:"
msgstr "Text-Tempo:"
-#: gui/options.cpp:961
+#: gui/options.cpp:959
msgid "Music volume:"
msgstr "Musiklautstфrke:"
-#: gui/options.cpp:963
+#: gui/options.cpp:961
msgctxt "lowres"
msgid "Music volume:"
msgstr "Musiklautstфrke:"
-#: gui/options.cpp:970
+#: gui/options.cpp:968
msgid "Mute All"
-msgstr "Alles stumm"
+msgstr "Alles aus"
-#: gui/options.cpp:973
+#: gui/options.cpp:971
msgid "SFX volume:"
msgstr "Effektlautstфrke:"
-#: gui/options.cpp:973 gui/options.cpp:975 gui/options.cpp:976
+#: gui/options.cpp:971 gui/options.cpp:973 gui/options.cpp:974
msgid "Special sound effects volume"
msgstr "Lautstфrke spezieller Gerфusch-Effekte"
-#: gui/options.cpp:975
+#: gui/options.cpp:973
msgctxt "lowres"
msgid "SFX volume:"
msgstr "Effektlautst.:"
-#: gui/options.cpp:983
+#: gui/options.cpp:981
msgid "Speech volume:"
msgstr "Sprachlautstфrke:"
-#: gui/options.cpp:985
+#: gui/options.cpp:983
msgctxt "lowres"
msgid "Speech volume:"
msgstr "Sprachlautst.:"
-#: gui/options.cpp:1142
+#: gui/options.cpp:1140
msgid "Theme Path:"
msgstr "Themen:"
-#: gui/options.cpp:1144
+#: gui/options.cpp:1142
msgctxt "lowres"
msgid "Theme Path:"
msgstr "Themen:"
-#: gui/options.cpp:1150 gui/options.cpp:1152 gui/options.cpp:1153
+#: gui/options.cpp:1148 gui/options.cpp:1150 gui/options.cpp:1151
msgid "Specifies path to additional data used by all games or ScummVM"
msgstr ""
"Legt das Verzeichnis fќr zusфtzliche Spieldateien fќr alle Spiele in ScummVM "
"fest."
-#: gui/options.cpp:1159
+#: gui/options.cpp:1157
msgid "Plugins Path:"
msgstr "Plugins:"
-#: gui/options.cpp:1161
+#: gui/options.cpp:1159
msgctxt "lowres"
msgid "Plugins Path:"
msgstr "Plugins:"
-#: gui/options.cpp:1170 gui/fluidsynth-dialog.cpp:138
+#: gui/options.cpp:1168 gui/fluidsynth-dialog.cpp:138
msgid "Misc"
msgstr "Sonstiges"
-#: gui/options.cpp:1172
+#: gui/options.cpp:1170
msgctxt "lowres"
msgid "Misc"
msgstr "Andere"
-#: gui/options.cpp:1174
+#: gui/options.cpp:1172
msgid "Theme:"
msgstr "Thema:"
-#: gui/options.cpp:1178
+#: gui/options.cpp:1176
msgid "GUI Renderer:"
msgstr "GUI-Renderer:"
-#: gui/options.cpp:1190
+#: gui/options.cpp:1188
msgid "Autosave:"
msgstr "Autom. Speichern:"
-#: gui/options.cpp:1192
+#: gui/options.cpp:1190
msgctxt "lowres"
msgid "Autosave:"
msgstr "Autospeichern:"
-#: gui/options.cpp:1200
+#: gui/options.cpp:1198
msgid "Keys"
msgstr "Tasten"
-#: gui/options.cpp:1207
+#: gui/options.cpp:1205
msgid "GUI Language:"
msgstr "Sprache:"
-#: gui/options.cpp:1207
+#: gui/options.cpp:1205
msgid "Language of ScummVM GUI"
msgstr "Sprache der ScummVM-Oberflфche"
-#: gui/options.cpp:1366
+#: gui/options.cpp:1364
msgid "You have to restart ScummVM before your changes will take effect."
msgstr "Sie mќssen ScummVM neu starten, damit die Фnderungen wirksam werden."
-#: gui/options.cpp:1386
+#: gui/options.cpp:1384
msgid "The chosen directory cannot be written to. Please select another one."
msgstr ""
"In das gewфhlte Verzeichnis kann nicht geschrieben werden. Bitte ein anderes "
"auswфhlen."
-#: gui/options.cpp:1395
+#: gui/options.cpp:1393
msgid "Select directory for GUI themes"
msgstr "Verzeichnis fќr Oberflфchen-Themen"
-#: gui/options.cpp:1405
+#: gui/options.cpp:1403
msgid "Select directory for extra files"
msgstr "Verzeichnis fќr zusфtzliche Dateien auswфhlen"
-#: gui/options.cpp:1416
+#: gui/options.cpp:1414
msgid "Select directory for plugins"
msgstr "Verzeichnis fќr Erweiterungen auswфhlen"
# Nicht ќbersetzen, da diese Nachricht nur fќr nicht-lateinische Sprachen relevant ist.
-#: gui/options.cpp:1469
+#: gui/options.cpp:1467
msgid ""
"The theme you selected does not support your current language. If you want "
"to use this theme you need to switch to another language first."
@@ -963,9 +993,31 @@ msgstr ""
"dieses Thema benutzen wollen, mќssen Sie erst zu einer anderen Sprache "
"wechseln."
+#. I18N: You must leave "#" as is, only word 'next' is translatable
+#: gui/predictivedialog.cpp:87
+msgid "# next"
+msgstr "# nфchste"
+
+#: gui/predictivedialog.cpp:88
+msgid "add"
+msgstr "hinzufќgen"
+
+#: gui/predictivedialog.cpp:92
+msgid "Delete char"
+msgstr "Lіschen"
+
+#: gui/predictivedialog.cpp:96
+msgid "<"
+msgstr "<"
+
+#. I18N: Pre means 'Predictive', leave '*' as is
+#: gui/predictivedialog.cpp:98
+msgid "* Pre"
+msgstr "* Vorschau"
+
#: gui/recorderdialog.cpp:64
msgid "Recorder or Playback Gameplay"
-msgstr "Spiel aufzeichnen oder wiedergeben"
+msgstr "Spiel aufzeichnen/wiedergeben"
#: gui/recorderdialog.cpp:69 gui/recorderdialog.cpp:156
#: gui/saveload-dialog.cpp:220 gui/saveload-dialog.cpp:276
@@ -998,6 +1050,10 @@ msgstr "Notizen:"
msgid "Do you really want to delete this record?"
msgstr "Mіchten Sie diese Aufnahme wirklich lіschen?"
+#: gui/recorderdialog.cpp:174
+msgid "Unknown Author"
+msgstr "Unbekannter Autor"
+
#: gui/saveload-dialog.cpp:167
msgid "List view"
msgstr "Listenansicht"
@@ -1453,14 +1509,18 @@ msgstr ""
msgid "Start anyway"
msgstr "Trotzdem starten"
-#: audio/fmopl.cpp:50
+#: audio/fmopl.cpp:62
msgid "MAME OPL emulator"
msgstr "MAME-OPL-Emulator"
-#: audio/fmopl.cpp:52
+#: audio/fmopl.cpp:64
msgid "DOSBox OPL emulator"
msgstr "DOSBox-OPL-Emulator"
+#: audio/fmopl.cpp:67
+msgid "ALSA Direct FM"
+msgstr "ALSA Direct FM"
+
#: audio/mididrv.cpp:209
#, c-format
msgid ""
@@ -1510,7 +1570,7 @@ msgstr "Keine Musik"
msgid "Amiga Audio Emulator"
msgstr "Amiga-Audio-Emulator"
-#: audio/softsynth/adlib.cpp:2285
+#: audio/adlib.cpp:2291
msgid "AdLib Emulator"
msgstr "AdLib-Emulator"
@@ -1782,9 +1842,8 @@ msgstr "Schneller Modus"
#: backends/platform/symbian/src/SymbianActions.cpp:52
#: backends/platform/wince/CEActionsPocket.cpp:44
#: backends/platform/wince/CEActionsSmartphone.cpp:52
-#: backends/events/default/default-events.cpp:218
-#: engines/scumm/dialogs.cpp:192 engines/scumm/help.cpp:83
-#: engines/scumm/help.cpp:85
+#: backends/events/default/default-events.cpp:218 engines/scumm/dialogs.cpp:192
+#: engines/scumm/help.cpp:83 engines/scumm/help.cpp:85
msgid "Quit"
msgstr "Beenden"
@@ -2144,14 +2203,13 @@ msgstr "Klicken deaktiviert"
#: engines/agi/detection.cpp:147 engines/drascula/detection.cpp:302
#: engines/dreamweb/detection.cpp:47 engines/neverhood/detection.cpp:160
#: engines/sci/detection.cpp:394 engines/toltecs/detection.cpp:200
-#: engines/zvision/detection.cpp:246
+#: engines/zvision/detection_tables.h:51
msgid "Use original save/load screens"
msgstr "Originale Spielstand-Menќs"
#: engines/agi/detection.cpp:148 engines/drascula/detection.cpp:303
#: engines/dreamweb/detection.cpp:48 engines/neverhood/detection.cpp:161
#: engines/sci/detection.cpp:395 engines/toltecs/detection.cpp:201
-#: engines/zvision/detection.cpp:247
msgid "Use the original save/load screens, instead of the ScummVM ones"
msgstr ""
"Verwendet die originalen Menќs zum Speichern und Laden statt der von ScummVM."
@@ -3312,6 +3370,22 @@ msgstr "Nach rechts fliegen"
msgid "Fly to lower right"
msgstr "Nach unten rechts fliegen"
+#: engines/scumm/input.cpp:572
+msgid "Snap scroll on"
+msgstr "Blфttern einschalten"
+
+#: engines/scumm/input.cpp:574
+msgid "Snap scroll off"
+msgstr "Blфttern ausschalten"
+
+#: engines/scumm/input.cpp:587
+msgid "Music volume: "
+msgstr "Musiklautstфrke:"
+
+#: engines/scumm/input.cpp:604
+msgid "Subtitle speed: "
+msgstr "Untertitel-Tempo:"
+
#: engines/scumm/scumm.cpp:1832
#, c-format
msgid ""
@@ -3478,37 +3552,41 @@ msgid "Show the current number of frames per second in the upper left corner"
msgstr ""
"Zeige die aktuelle Anzahl von Bildern pro Sekunde in der oberen linken Ecke"
-#: engines/zvision/detection.cpp:256
+#: engines/zvision/detection_tables.h:52
+msgid "Use the original save/load screens instead of the ScummVM interface"
+msgstr ""
+"Verwendet die originalen Menќs zum Speichern und Laden statt der von ScummVM."
+
+#: engines/zvision/detection_tables.h:61
msgid "Double FPS"
msgstr "FPS verdoppeln"
-#: engines/zvision/detection.cpp:257
-msgid "Increase game FPS from 30 to 60"
+#: engines/zvision/detection_tables.h:62
+msgid "Increase framerate from 30 to 60 FPS"
msgstr "Bilder pro Sekunde im Spiel von 30 auf 60 erhіhen"
-#: engines/zvision/detection.cpp:266
+#: engines/zvision/detection_tables.h:71
msgid "Enable Venus"
msgstr "Venus aktivieren"
-#: engines/zvision/detection.cpp:267
+#: engines/zvision/detection_tables.h:72
msgid "Enable the Venus help system"
msgstr "Aktiviere das Venus-Hilfesystem"
-#: engines/zvision/detection.cpp:276
+#: engines/zvision/detection_tables.h:81
msgid "Disable animation while turning"
msgstr "Animation wфhrend Drehen ausschalten"
-#: engines/zvision/detection.cpp:277
-msgid "Disable animation while turning in panoramic mode"
+#: engines/zvision/detection_tables.h:82
+msgid "Disable animation while turning in panorama mode"
msgstr "Animation wфhrend Drehen im Panorama-Modus ausschalten"
-#: engines/zvision/detection.cpp:286
-msgid "Use the hires MPEG movies"
+#: engines/zvision/detection_tables.h:91
+msgid "Use high resolution MPEG video"
msgstr "Nutze hochauflіsende MPEG-Filme"
-#: engines/zvision/detection.cpp:287
-msgid ""
-"Use the hires MPEG movies of the DVD version, instead of the lowres AVI ones"
+#: engines/zvision/detection_tables.h:92
+msgid "Use MPEG video from the DVD version, instead of lower resolution AVI"
msgstr ""
"Verwende hochauflіsende MPEG-Filme der DVD-Version anstelle der AVI-Filme"
diff --git a/po/es_ES.po b/po/es_ES.po
index 32f3aba74e..9d2e236d46 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.sf.net\n"
-"POT-Creation-Date: 2015-06-30 20:57+0100\n"
+"POT-Creation-Date: 2015-10-11 18:59+0100\n"
"PO-Revision-Date: 2014-07-06 20:39+0100\n"
"Last-Translator: \n"
"Language-Team: \n"
@@ -30,7 +30,7 @@ msgstr "Caracterэsticas incluidas:"
msgid "Available engines:"
msgstr "Motores disponibles:"
-#: gui/browser.cpp:68
+#: gui/browser.cpp:68 gui/browser_osx.mm:104
msgid "Show hidden files"
msgstr "Mostrar archivos ocultos"
@@ -51,13 +51,14 @@ msgctxt "lowres"
msgid "Go up"
msgstr "Arriba"
-#: gui/browser.cpp:75 gui/chooser.cpp:46 gui/KeysDialog.cpp:43
-#: gui/launcher.cpp:351 gui/massadd.cpp:95 gui/options.cpp:1239
-#: gui/recorderdialog.cpp:70 gui/recorderdialog.cpp:156
-#: gui/saveload-dialog.cpp:216 gui/saveload-dialog.cpp:276
-#: gui/saveload-dialog.cpp:547 gui/saveload-dialog.cpp:931
-#: gui/themebrowser.cpp:55 gui/fluidsynth-dialog.cpp:152
-#: engines/engine.cpp:483 backends/platform/wii/options.cpp:48
+#: gui/browser.cpp:75 gui/chooser.cpp:46 gui/editrecorddialog.cpp:67
+#: gui/KeysDialog.cpp:43 gui/launcher.cpp:351 gui/massadd.cpp:95
+#: gui/options.cpp:1237 gui/predictivedialog.cpp:74 gui/recorderdialog.cpp:70
+#: gui/recorderdialog.cpp:156 gui/saveload-dialog.cpp:216
+#: gui/saveload-dialog.cpp:276 gui/saveload-dialog.cpp:547
+#: gui/saveload-dialog.cpp:931 gui/themebrowser.cpp:55
+#: gui/fluidsynth-dialog.cpp:152 engines/engine.cpp:483
+#: backends/platform/wii/options.cpp:48
#: backends/events/default/default-events.cpp:196
#: backends/events/default/default-events.cpp:218
#: engines/drascula/saveload.cpp:49 engines/parallaction/saveload.cpp:274
@@ -65,10 +66,27 @@ msgstr "Arriba"
msgid "Cancel"
msgstr "Cancelar"
-#: gui/browser.cpp:76 gui/chooser.cpp:47 gui/themebrowser.cpp:56
+#: gui/browser.cpp:76 gui/browser_osx.mm:103 gui/chooser.cpp:47
+#: gui/themebrowser.cpp:56
msgid "Choose"
msgstr "Aceptar"
+#: gui/editrecorddialog.cpp:58
+msgid "Author:"
+msgstr ""
+
+#: gui/editrecorddialog.cpp:59 gui/launcher.cpp:204
+msgid "Name:"
+msgstr "Nombre:"
+
+#: gui/editrecorddialog.cpp:60
+msgid "Notes:"
+msgstr ""
+
+#: gui/editrecorddialog.cpp:68 gui/predictivedialog.cpp:75
+msgid "Ok"
+msgstr ""
+
#: gui/gui-manager.cpp:117 backends/keymapper/remap-dialog.cpp:53
#: engines/scumm/help.cpp:126 engines/scumm/help.cpp:141
#: engines/scumm/help.cpp:166 engines/scumm/help.cpp:192
@@ -101,7 +119,7 @@ msgid "Map"
msgstr "Asignar"
#: gui/KeysDialog.cpp:42 gui/launcher.cpp:352 gui/launcher.cpp:1048
-#: gui/launcher.cpp:1052 gui/massadd.cpp:92 gui/options.cpp:1240
+#: gui/launcher.cpp:1052 gui/massadd.cpp:92 gui/options.cpp:1238
#: gui/saveload-dialog.cpp:932 gui/fluidsynth-dialog.cpp:153
#: engines/engine.cpp:402 engines/engine.cpp:413
#: backends/platform/wii/options.cpp:47
@@ -163,10 +181,6 @@ msgctxt "lowres"
msgid "ID:"
msgstr "ID:"
-#: gui/launcher.cpp:204
-msgid "Name:"
-msgstr "Nombre:"
-
#: gui/launcher.cpp:204 gui/launcher.cpp:206 gui/launcher.cpp:207
msgid "Full title of the game"
msgstr "Tэtulo completo del juego"
@@ -189,7 +203,7 @@ msgstr ""
"juego"
#: gui/launcher.cpp:212 gui/launcher.cpp:226 gui/options.cpp:87
-#: gui/options.cpp:737 gui/options.cpp:750 gui/options.cpp:1210
+#: gui/options.cpp:735 gui/options.cpp:748 gui/options.cpp:1208
#: audio/null.cpp:41
msgid "<default>"
msgstr "<por defecto>"
@@ -211,11 +225,11 @@ msgstr "Plat.:"
msgid "Engine"
msgstr "Motor"
-#: gui/launcher.cpp:245 gui/options.cpp:1073 gui/options.cpp:1090
+#: gui/launcher.cpp:245 gui/options.cpp:1071 gui/options.cpp:1088
msgid "Graphics"
msgstr "Grсficos"
-#: gui/launcher.cpp:245 gui/options.cpp:1073 gui/options.cpp:1090
+#: gui/launcher.cpp:245 gui/options.cpp:1071 gui/options.cpp:1088
msgid "GFX"
msgstr "Grсf."
@@ -228,7 +242,7 @@ msgctxt "lowres"
msgid "Override global graphic settings"
msgstr "Opciones grсficas especэficas"
-#: gui/launcher.cpp:257 gui/options.cpp:1096
+#: gui/launcher.cpp:257 gui/options.cpp:1094
msgid "Audio"
msgstr "Sonido"
@@ -241,11 +255,11 @@ msgctxt "lowres"
msgid "Override global audio settings"
msgstr "Opciones de sonido especэficas"
-#: gui/launcher.cpp:271 gui/options.cpp:1101
+#: gui/launcher.cpp:271 gui/options.cpp:1099
msgid "Volume"
msgstr "Volumen"
-#: gui/launcher.cpp:273 gui/options.cpp:1103
+#: gui/launcher.cpp:273 gui/options.cpp:1101
msgctxt "lowres"
msgid "Volume"
msgstr "Volumen"
@@ -259,7 +273,7 @@ msgctxt "lowres"
msgid "Override global volume settings"
msgstr "Opciones de volumen especэficas"
-#: gui/launcher.cpp:286 gui/options.cpp:1111
+#: gui/launcher.cpp:286 gui/options.cpp:1109
msgid "MIDI"
msgstr "MIDI"
@@ -272,7 +286,7 @@ msgctxt "lowres"
msgid "Override global MIDI settings"
msgstr "Opciones de MIDI especэficas"
-#: gui/launcher.cpp:300 gui/options.cpp:1117
+#: gui/launcher.cpp:300 gui/options.cpp:1115
msgid "MT-32"
msgstr "MT-32"
@@ -285,11 +299,11 @@ msgctxt "lowres"
msgid "Override global MT-32 settings"
msgstr "Opciones de MT-32 especэficas"
-#: gui/launcher.cpp:314 gui/options.cpp:1124
+#: gui/launcher.cpp:314 gui/options.cpp:1122
msgid "Paths"
msgstr "Rutas"
-#: gui/launcher.cpp:316 gui/options.cpp:1126
+#: gui/launcher.cpp:316 gui/options.cpp:1124
msgctxt "lowres"
msgid "Paths"
msgstr "Rutas"
@@ -303,7 +317,7 @@ msgctxt "lowres"
msgid "Game Path:"
msgstr "Juego:"
-#: gui/launcher.cpp:330 gui/options.cpp:1150
+#: gui/launcher.cpp:330 gui/options.cpp:1148
msgid "Extra Path:"
msgstr "Adicional:"
@@ -311,42 +325,42 @@ msgstr "Adicional:"
msgid "Specifies path to additional data used by the game"
msgstr "Especifica un directorio para datos adicionales del juego"
-#: gui/launcher.cpp:332 gui/options.cpp:1152
+#: gui/launcher.cpp:332 gui/options.cpp:1150
msgctxt "lowres"
msgid "Extra Path:"
msgstr "Adicional:"
-#: gui/launcher.cpp:339 gui/options.cpp:1134
+#: gui/launcher.cpp:339 gui/options.cpp:1132
msgid "Save Path:"
msgstr "Partidas:"
#: gui/launcher.cpp:339 gui/launcher.cpp:341 gui/launcher.cpp:342
-#: gui/options.cpp:1134 gui/options.cpp:1136 gui/options.cpp:1137
+#: gui/options.cpp:1132 gui/options.cpp:1134 gui/options.cpp:1135
msgid "Specifies where your saved games are put"
msgstr "Especifica dѓnde guardar tus partidas"
-#: gui/launcher.cpp:341 gui/options.cpp:1136
+#: gui/launcher.cpp:341 gui/options.cpp:1134
msgctxt "lowres"
msgid "Save Path:"
msgstr "Partidas:"
#: gui/launcher.cpp:360 gui/launcher.cpp:459 gui/launcher.cpp:517
-#: gui/launcher.cpp:571 gui/options.cpp:1145 gui/options.cpp:1153
-#: gui/options.cpp:1162 gui/options.cpp:1277 gui/options.cpp:1283
-#: gui/options.cpp:1291 gui/options.cpp:1321 gui/options.cpp:1327
-#: gui/options.cpp:1334 gui/options.cpp:1427 gui/options.cpp:1430
-#: gui/options.cpp:1442
+#: gui/launcher.cpp:571 gui/options.cpp:1143 gui/options.cpp:1151
+#: gui/options.cpp:1160 gui/options.cpp:1275 gui/options.cpp:1281
+#: gui/options.cpp:1289 gui/options.cpp:1319 gui/options.cpp:1325
+#: gui/options.cpp:1332 gui/options.cpp:1425 gui/options.cpp:1428
+#: gui/options.cpp:1440
msgctxt "path"
msgid "None"
msgstr "Ninguna"
#: gui/launcher.cpp:365 gui/launcher.cpp:465 gui/launcher.cpp:575
-#: gui/options.cpp:1271 gui/options.cpp:1315 gui/options.cpp:1433
+#: gui/options.cpp:1269 gui/options.cpp:1313 gui/options.cpp:1431
#: backends/platform/wii/options.cpp:56
msgid "Default"
msgstr "Por defecto"
-#: gui/launcher.cpp:510 gui/options.cpp:1436
+#: gui/launcher.cpp:510 gui/options.cpp:1434
msgid "Select SoundFont"
msgstr "Selecciona un SoundFont"
@@ -358,7 +372,7 @@ msgstr "Selecciona el directorio del juego"
msgid "Select additional game directory"
msgstr "Selecciona el directorio adicional"
-#: gui/launcher.cpp:559 gui/options.cpp:1379
+#: gui/launcher.cpp:559 gui/options.cpp:1377
msgid "Select directory for saved games"
msgstr "Selecciona el directorio para partidas guardadas"
@@ -556,6 +570,24 @@ msgstr "Se ha buscado en %d directorios..."
msgid "Discovered %d new games, ignored %d previously added games ..."
msgstr "%d juegos nuevos encontrados. %d juegos ignorados (ya aёadidos)..."
+#: gui/onscreendialog.cpp:101 gui/onscreendialog.cpp:103
+msgid "Stop"
+msgstr ""
+
+#: gui/onscreendialog.cpp:106
+msgid "Edit record description"
+msgstr ""
+
+#: gui/onscreendialog.cpp:108
+#, fuzzy
+msgid "Switch to Game"
+msgstr "Cambiar"
+
+#: gui/onscreendialog.cpp:110
+#, fuzzy
+msgid "Fast replay"
+msgstr "Modo rсpido"
+
#: gui/options.cpp:85
msgid "Never"
msgstr "Nunca"
@@ -596,8 +628,8 @@ msgstr "44 kHz"
msgid "48 kHz"
msgstr "48 kHz"
-#: gui/options.cpp:255 gui/options.cpp:481 gui/options.cpp:582
-#: gui/options.cpp:651 gui/options.cpp:859
+#: gui/options.cpp:255 gui/options.cpp:479 gui/options.cpp:580
+#: gui/options.cpp:649 gui/options.cpp:857
msgctxt "soundfont"
msgid "None"
msgstr "Ninguno"
@@ -618,73 +650,73 @@ msgstr "no se ha podido cambiar el ajuste de pantalla completa"
msgid "the aspect ratio setting could not be changed"
msgstr "no se ha podido cambiar el ajuste de correcciѓn de aspecto"
-#: gui/options.cpp:734
+#: gui/options.cpp:732
msgid "Graphics mode:"
msgstr "Modo grсfico:"
-#: gui/options.cpp:748
+#: gui/options.cpp:746
msgid "Render mode:"
msgstr "Renderizado:"
-#: gui/options.cpp:748 gui/options.cpp:749
+#: gui/options.cpp:746 gui/options.cpp:747
msgid "Special dithering modes supported by some games"
msgstr "Modos especiales de expansiѓn compatibles con algunos juegos"
-#: gui/options.cpp:760
+#: gui/options.cpp:758
#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2298
msgid "Fullscreen mode"
msgstr "Pantalla completa"
-#: gui/options.cpp:763
+#: gui/options.cpp:761
msgid "Aspect ratio correction"
msgstr "Correcciѓn de aspecto"
-#: gui/options.cpp:763
+#: gui/options.cpp:761
msgid "Correct aspect ratio for 320x200 games"
msgstr "Corregir relaciѓn de aspecto en juegos 320x200"
-#: gui/options.cpp:771
+#: gui/options.cpp:769
msgid "Preferred Device:"
msgstr "Disp. preferido:"
-#: gui/options.cpp:771
+#: gui/options.cpp:769
msgid "Music Device:"
msgstr "Disp. de mњsica:"
-#: gui/options.cpp:771 gui/options.cpp:773
+#: gui/options.cpp:769 gui/options.cpp:771
msgid "Specifies preferred sound device or sound card emulator"
msgstr ""
"Especifica quщ dispositivo de sonido o emulador de tarjeta de sonido "
"prefieres"
-#: gui/options.cpp:771 gui/options.cpp:773 gui/options.cpp:774
+#: gui/options.cpp:769 gui/options.cpp:771 gui/options.cpp:772
msgid "Specifies output sound device or sound card emulator"
msgstr ""
"Especifica el dispositivo de sonido o emulador de tarjeta de sonido de salida"
-#: gui/options.cpp:773
+#: gui/options.cpp:771
msgctxt "lowres"
msgid "Preferred Dev.:"
msgstr "Disp. preferido:"
-#: gui/options.cpp:773
+#: gui/options.cpp:771
msgctxt "lowres"
msgid "Music Device:"
msgstr "Disp. de mњsica:"
-#: gui/options.cpp:800
+#: gui/options.cpp:798
msgid "AdLib emulator:"
msgstr "Emul. de AdLib:"
-#: gui/options.cpp:800 gui/options.cpp:801
+#: gui/options.cpp:798 gui/options.cpp:799
msgid "AdLib is used for music in many games"
msgstr "AdLib se usa para la mњsica en muchos juegos"
-#: gui/options.cpp:811
+#: gui/options.cpp:809
msgid "Output rate:"
msgstr "Frec. de salida:"
-#: gui/options.cpp:811 gui/options.cpp:812
+#: gui/options.cpp:809 gui/options.cpp:810
msgid ""
"Higher value specifies better sound quality but may be not supported by your "
"soundcard"
@@ -692,68 +724,68 @@ msgstr ""
"Los valores mсs altos ofrecen mayor calidad, pero puede que tu tarjeta de "
"sonido no sea compatible"
-#: gui/options.cpp:822
+#: gui/options.cpp:820
msgid "GM Device:"
msgstr "Dispositivo GM:"
-#: gui/options.cpp:822
+#: gui/options.cpp:820
msgid "Specifies default sound device for General MIDI output"
msgstr "Especifica el dispositivo de salida General MIDI por defecto"
-#: gui/options.cpp:833
+#: gui/options.cpp:831
msgid "Don't use General MIDI music"
msgstr "No usar mњsica General MIDI"
-#: gui/options.cpp:844 gui/options.cpp:910
+#: gui/options.cpp:842 gui/options.cpp:908
msgid "Use first available device"
msgstr "Utilizar el primer dispositivo disponible"
-#: gui/options.cpp:856
+#: gui/options.cpp:854
msgid "SoundFont:"
msgstr "SoundFont:"
-#: gui/options.cpp:856 gui/options.cpp:858 gui/options.cpp:859
+#: gui/options.cpp:854 gui/options.cpp:856 gui/options.cpp:857
msgid "SoundFont is supported by some audio cards, FluidSynth and Timidity"
msgstr ""
"SoundFont es compatible con algunas tarjetas de sonido, con FluidSynth y con "
"Timidity"
-#: gui/options.cpp:858
+#: gui/options.cpp:856
msgctxt "lowres"
msgid "SoundFont:"
msgstr "SoundFont:"
-#: gui/options.cpp:864
+#: gui/options.cpp:862
msgid "Mixed AdLib/MIDI mode"
msgstr "Modo AdLib/MIDI"
-#: gui/options.cpp:864
+#: gui/options.cpp:862
msgid "Use both MIDI and AdLib sound generation"
msgstr "Usar tanto MIDI como AdLib en la generaciѓn de sonido"
-#: gui/options.cpp:867
+#: gui/options.cpp:865
msgid "MIDI gain:"
msgstr "Ganancia MIDI:"
-#: gui/options.cpp:874
+#: gui/options.cpp:872
msgid "FluidSynth Settings"
msgstr "Opciones de FluidSynth"
-#: gui/options.cpp:881
+#: gui/options.cpp:879
msgid "MT-32 Device:"
msgstr "Disp. MT-32:"
-#: gui/options.cpp:881
+#: gui/options.cpp:879
msgid "Specifies default sound device for Roland MT-32/LAPC1/CM32l/CM64 output"
msgstr ""
"Especifica el dispositivo de sonido para la salida Roland MT-32/LAPC1/CM32l/"
"CM64 por defecto"
-#: gui/options.cpp:886
+#: gui/options.cpp:884
msgid "True Roland MT-32 (disable GM emulation)"
msgstr "Roland MT-32 autщntica (desactivar emulaciѓn GM)"
-#: gui/options.cpp:886 gui/options.cpp:888
+#: gui/options.cpp:884 gui/options.cpp:886
msgid ""
"Check if you want to use your real hardware Roland-compatible sound device "
"connected to your computer"
@@ -761,16 +793,16 @@ msgstr ""
"Marcar si se quiere usar un dispositivo de sonido real conectado al "
"ordenador y compatible con Roland"
-#: gui/options.cpp:888
+#: gui/options.cpp:886
msgctxt "lowres"
msgid "True Roland MT-32 (no GM emulation)"
msgstr "Roland MT-32 real (sin emulaciѓn GM)"
-#: gui/options.cpp:891
+#: gui/options.cpp:889
msgid "Roland GS Device (enable MT-32 mappings)"
msgstr "Dispositivo Roland GS (activar conversiѓn MT-32)"
-#: gui/options.cpp:891
+#: gui/options.cpp:889
msgid ""
"Check if you want to enable patch mappings to emulate an MT-32 on a Roland "
"GS device"
@@ -778,174 +810,174 @@ msgstr ""
"Marca esta opciѓn si quieres activar la conversiѓn para emular una MT-32 en "
"un dispositivo Roland GS"
-#: gui/options.cpp:900
+#: gui/options.cpp:898
msgid "Don't use Roland MT-32 music"
msgstr "No usar mњsica Roland MT-32"
-#: gui/options.cpp:927
+#: gui/options.cpp:925
msgid "Text and Speech:"
msgstr "Texto y voces:"
-#: gui/options.cpp:931 gui/options.cpp:941
+#: gui/options.cpp:929 gui/options.cpp:939
msgid "Speech"
msgstr "Voces"
-#: gui/options.cpp:932 gui/options.cpp:942
+#: gui/options.cpp:930 gui/options.cpp:940
msgid "Subtitles"
msgstr "Subtэtulos"
-#: gui/options.cpp:933
+#: gui/options.cpp:931
msgid "Both"
msgstr "Ambos"
-#: gui/options.cpp:935
+#: gui/options.cpp:933
msgid "Subtitle speed:"
msgstr "Vel. de subtэtulos:"
-#: gui/options.cpp:937
+#: gui/options.cpp:935
msgctxt "lowres"
msgid "Text and Speech:"
msgstr "Texto y voces:"
-#: gui/options.cpp:941
+#: gui/options.cpp:939
msgid "Spch"
msgstr "Voz"
-#: gui/options.cpp:942
+#: gui/options.cpp:940
msgid "Subs"
msgstr "Subt"
-#: gui/options.cpp:943
+#: gui/options.cpp:941
msgctxt "lowres"
msgid "Both"
msgstr "V&S"
-#: gui/options.cpp:943
+#: gui/options.cpp:941
msgid "Show subtitles and play speech"
msgstr "Reproducir voces y subtэtulos"
-#: gui/options.cpp:945
+#: gui/options.cpp:943
msgctxt "lowres"
msgid "Subtitle speed:"
msgstr "Vel. de subt.:"
-#: gui/options.cpp:961
+#: gui/options.cpp:959
msgid "Music volume:"
msgstr "Mњsica:"
-#: gui/options.cpp:963
+#: gui/options.cpp:961
msgctxt "lowres"
msgid "Music volume:"
msgstr "Mњsica:"
-#: gui/options.cpp:970
+#: gui/options.cpp:968
msgid "Mute All"
msgstr "Silenciar"
-#: gui/options.cpp:973
+#: gui/options.cpp:971
msgid "SFX volume:"
msgstr "Efectos:"
-#: gui/options.cpp:973 gui/options.cpp:975 gui/options.cpp:976
+#: gui/options.cpp:971 gui/options.cpp:973 gui/options.cpp:974
msgid "Special sound effects volume"
msgstr "Volumen de los efectos de sonido"
-#: gui/options.cpp:975
+#: gui/options.cpp:973
msgctxt "lowres"
msgid "SFX volume:"
msgstr "Efectos:"
-#: gui/options.cpp:983
+#: gui/options.cpp:981
msgid "Speech volume:"
msgstr "Voces:"
-#: gui/options.cpp:985
+#: gui/options.cpp:983
msgctxt "lowres"
msgid "Speech volume:"
msgstr "Voces:"
-#: gui/options.cpp:1142
+#: gui/options.cpp:1140
msgid "Theme Path:"
msgstr "Temas:"
-#: gui/options.cpp:1144
+#: gui/options.cpp:1142
msgctxt "lowres"
msgid "Theme Path:"
msgstr "Temas:"
-#: gui/options.cpp:1150 gui/options.cpp:1152 gui/options.cpp:1153
+#: gui/options.cpp:1148 gui/options.cpp:1150 gui/options.cpp:1151
msgid "Specifies path to additional data used by all games or ScummVM"
msgstr "Especifica el directorio adicional usado por los juegos y ScummVM"
-#: gui/options.cpp:1159
+#: gui/options.cpp:1157
msgid "Plugins Path:"
msgstr "Plugins:"
-#: gui/options.cpp:1161
+#: gui/options.cpp:1159
msgctxt "lowres"
msgid "Plugins Path:"
msgstr "Plugins:"
-#: gui/options.cpp:1170 gui/fluidsynth-dialog.cpp:138
+#: gui/options.cpp:1168 gui/fluidsynth-dialog.cpp:138
msgid "Misc"
msgstr "Otras"
-#: gui/options.cpp:1172
+#: gui/options.cpp:1170
msgctxt "lowres"
msgid "Misc"
msgstr "Otras"
-#: gui/options.cpp:1174
+#: gui/options.cpp:1172
msgid "Theme:"
msgstr "Tema:"
-#: gui/options.cpp:1178
+#: gui/options.cpp:1176
msgid "GUI Renderer:"
msgstr "Interfaz:"
-#: gui/options.cpp:1190
+#: gui/options.cpp:1188
msgid "Autosave:"
msgstr "Autoguardado:"
-#: gui/options.cpp:1192
+#: gui/options.cpp:1190
msgctxt "lowres"
msgid "Autosave:"
msgstr "Autoguardado:"
-#: gui/options.cpp:1200
+#: gui/options.cpp:1198
msgid "Keys"
msgstr "Teclas"
-#: gui/options.cpp:1207
+#: gui/options.cpp:1205
msgid "GUI Language:"
msgstr "Idioma:"
-#: gui/options.cpp:1207
+#: gui/options.cpp:1205
msgid "Language of ScummVM GUI"
msgstr "Idioma de la interfaz de ScummVM"
-#: gui/options.cpp:1366
+#: gui/options.cpp:1364
msgid "You have to restart ScummVM before your changes will take effect."
msgstr "Tienes que reiniciar ScummVM para aplicar los cambios."
-#: gui/options.cpp:1386
+#: gui/options.cpp:1384
msgid "The chosen directory cannot be written to. Please select another one."
msgstr ""
"No se puede escribir en el directorio elegido. Por favor, selecciona otro."
-#: gui/options.cpp:1395
+#: gui/options.cpp:1393
msgid "Select directory for GUI themes"
msgstr "Selecciona el directorio de temas"
-#: gui/options.cpp:1405
+#: gui/options.cpp:1403
msgid "Select directory for extra files"
msgstr "Selecciona el directorio adicional"
-#: gui/options.cpp:1416
+#: gui/options.cpp:1414
msgid "Select directory for plugins"
msgstr "Selecciona el directorio de plugins"
-#: gui/options.cpp:1469
+#: gui/options.cpp:1467
msgid ""
"The theme you selected does not support your current language. If you want "
"to use this theme you need to switch to another language first."
@@ -953,6 +985,29 @@ msgstr ""
"El tema seleccionado no es compatible con el idioma actual. Si quieres usar "
"este tema debes cambiar a otro idioma primero."
+#. I18N: You must leave "#" as is, only word 'next' is translatable
+#: gui/predictivedialog.cpp:87
+msgid "# next"
+msgstr ""
+
+#: gui/predictivedialog.cpp:88
+msgid "add"
+msgstr ""
+
+#: gui/predictivedialog.cpp:92
+#, fuzzy
+msgid "Delete char"
+msgstr "Borrar"
+
+#: gui/predictivedialog.cpp:96
+msgid "<"
+msgstr ""
+
+#. I18N: Pre means 'Predictive', leave '*' as is
+#: gui/predictivedialog.cpp:98
+msgid "* Pre"
+msgstr ""
+
#: gui/recorderdialog.cpp:64
msgid "Recorder or Playback Gameplay"
msgstr ""
@@ -990,6 +1045,11 @@ msgstr ""
msgid "Do you really want to delete this record?"
msgstr "ПSeguro que quieres borrar esta partida?"
+#: gui/recorderdialog.cpp:174
+#, fuzzy
+msgid "Unknown Author"
+msgstr "Error desconocido"
+
#: gui/saveload-dialog.cpp:167
msgid "List view"
msgstr "Modo lista"
@@ -1440,14 +1500,18 @@ msgstr ""
msgid "Start anyway"
msgstr "Jugar aun asэ"
-#: audio/fmopl.cpp:50
+#: audio/fmopl.cpp:62
msgid "MAME OPL emulator"
msgstr "Emulador OPL de MAME"
-#: audio/fmopl.cpp:52
+#: audio/fmopl.cpp:64
msgid "DOSBox OPL emulator"
msgstr "Emulador OPL de DOSBox"
+#: audio/fmopl.cpp:67
+msgid "ALSA Direct FM"
+msgstr ""
+
#: audio/mididrv.cpp:209
#, c-format
msgid ""
@@ -1497,7 +1561,7 @@ msgstr "Sin mњsica"
msgid "Amiga Audio Emulator"
msgstr "Emulador de Amiga Audio"
-#: audio/softsynth/adlib.cpp:2285
+#: audio/adlib.cpp:2291
msgid "AdLib Emulator"
msgstr "Emulador de AdLib"
@@ -2130,14 +2194,13 @@ msgstr "Clic desactivado"
#: engines/agi/detection.cpp:147 engines/drascula/detection.cpp:302
#: engines/dreamweb/detection.cpp:47 engines/neverhood/detection.cpp:160
#: engines/sci/detection.cpp:394 engines/toltecs/detection.cpp:200
-#: engines/zvision/detection.cpp:246
+#: engines/zvision/detection_tables.h:51
msgid "Use original save/load screens"
msgstr "Usar pantallas de guardar/cargar originales"
#: engines/agi/detection.cpp:148 engines/drascula/detection.cpp:303
#: engines/dreamweb/detection.cpp:48 engines/neverhood/detection.cpp:161
#: engines/sci/detection.cpp:395 engines/toltecs/detection.cpp:201
-#: engines/zvision/detection.cpp:247
msgid "Use the original save/load screens, instead of the ScummVM ones"
msgstr ""
"Utilizar las pantallas de guardar/cargar originales, en vez de las de ScummVM"
@@ -3278,6 +3341,25 @@ msgstr "Volar a la derecha"
msgid "Fly to lower right"
msgstr "Volar abajo y a la derecha"
+#: engines/scumm/input.cpp:572
+#, fuzzy
+msgid "Snap scroll on"
+msgstr "Desplazamiento suave"
+
+#: engines/scumm/input.cpp:574
+msgid "Snap scroll off"
+msgstr ""
+
+#: engines/scumm/input.cpp:587
+#, fuzzy
+msgid "Music volume: "
+msgstr "Mњsica:"
+
+#: engines/scumm/input.cpp:604
+#, fuzzy
+msgid "Subtitle speed: "
+msgstr "Vel. de subtэtulos:"
+
#: engines/scumm/scumm.cpp:1832
#, c-format
msgid ""
@@ -3435,39 +3517,45 @@ msgstr ""
msgid "Show the current number of frames per second in the upper left corner"
msgstr ""
-#: engines/zvision/detection.cpp:256
+#: engines/zvision/detection_tables.h:52
+#, fuzzy
+msgid "Use the original save/load screens instead of the ScummVM interface"
+msgstr ""
+"Utilizar las pantallas de guardar/cargar originales, en vez de las de ScummVM"
+
+#: engines/zvision/detection_tables.h:61
msgid "Double FPS"
msgstr ""
-#: engines/zvision/detection.cpp:257
-msgid "Increase game FPS from 30 to 60"
+#: engines/zvision/detection_tables.h:62
+msgid "Increase framerate from 30 to 60 FPS"
msgstr ""
-#: engines/zvision/detection.cpp:266
+#: engines/zvision/detection_tables.h:71
#, fuzzy
msgid "Enable Venus"
msgstr "Activar el modo helio"
-#: engines/zvision/detection.cpp:267
+#: engines/zvision/detection_tables.h:72
+#, fuzzy
msgid "Enable the Venus help system"
-msgstr ""
+msgstr "Activar el modo helio"
-#: engines/zvision/detection.cpp:276
+#: engines/zvision/detection_tables.h:81
msgid "Disable animation while turning"
msgstr ""
-#: engines/zvision/detection.cpp:277
-msgid "Disable animation while turning in panoramic mode"
+#: engines/zvision/detection_tables.h:82
+msgid "Disable animation while turning in panorama mode"
msgstr ""
-#: engines/zvision/detection.cpp:286
-msgid "Use the hires MPEG movies"
+#: engines/zvision/detection_tables.h:91
+msgid "Use high resolution MPEG video"
msgstr ""
-#: engines/zvision/detection.cpp:287
+#: engines/zvision/detection_tables.h:92
#, fuzzy
-msgid ""
-"Use the hires MPEG movies of the DVD version, instead of the lowres AVI ones"
+msgid "Use MPEG video from the DVD version, instead of lower resolution AVI"
msgstr ""
"Usar los cursores plateados alternativos, en vez de los dorados normales"
diff --git a/po/eu.po b/po/eu.po
index 9381f0576c..97e13810e5 100644
--- a/po/eu.po
+++ b/po/eu.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ScummVM 1.5.0git\n"
"Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n"
-"POT-Creation-Date: 2015-06-30 20:57+0100\n"
+"POT-Creation-Date: 2015-10-11 18:59+0100\n"
"PO-Revision-Date: 2011-12-15 14:53+0100\n"
"Last-Translator: Mikel Iturbe Urretxa <mikel@hamahiru.org>\n"
"Language-Team: Librezale <librezale@librezale.org>\n"
@@ -29,7 +29,7 @@ msgstr "Ezaugarri erantsiak:"
msgid "Available engines:"
msgstr "Motore erabilgarriak:"
-#: gui/browser.cpp:68
+#: gui/browser.cpp:68 gui/browser_osx.mm:104
#, fuzzy
msgid "Show hidden files"
msgstr "Kontsola erakutsi / ezkutatu"
@@ -51,13 +51,14 @@ msgctxt "lowres"
msgid "Go up"
msgstr "Joan gora"
-#: gui/browser.cpp:75 gui/chooser.cpp:46 gui/KeysDialog.cpp:43
-#: gui/launcher.cpp:351 gui/massadd.cpp:95 gui/options.cpp:1239
-#: gui/recorderdialog.cpp:70 gui/recorderdialog.cpp:156
-#: gui/saveload-dialog.cpp:216 gui/saveload-dialog.cpp:276
-#: gui/saveload-dialog.cpp:547 gui/saveload-dialog.cpp:931
-#: gui/themebrowser.cpp:55 gui/fluidsynth-dialog.cpp:152
-#: engines/engine.cpp:483 backends/platform/wii/options.cpp:48
+#: gui/browser.cpp:75 gui/chooser.cpp:46 gui/editrecorddialog.cpp:67
+#: gui/KeysDialog.cpp:43 gui/launcher.cpp:351 gui/massadd.cpp:95
+#: gui/options.cpp:1237 gui/predictivedialog.cpp:74 gui/recorderdialog.cpp:70
+#: gui/recorderdialog.cpp:156 gui/saveload-dialog.cpp:216
+#: gui/saveload-dialog.cpp:276 gui/saveload-dialog.cpp:547
+#: gui/saveload-dialog.cpp:931 gui/themebrowser.cpp:55
+#: gui/fluidsynth-dialog.cpp:152 engines/engine.cpp:483
+#: backends/platform/wii/options.cpp:48
#: backends/events/default/default-events.cpp:196
#: backends/events/default/default-events.cpp:218
#: engines/drascula/saveload.cpp:49 engines/parallaction/saveload.cpp:274
@@ -65,10 +66,27 @@ msgstr "Joan gora"
msgid "Cancel"
msgstr "Utzi"
-#: gui/browser.cpp:76 gui/chooser.cpp:47 gui/themebrowser.cpp:56
+#: gui/browser.cpp:76 gui/browser_osx.mm:103 gui/chooser.cpp:47
+#: gui/themebrowser.cpp:56
msgid "Choose"
msgstr "Aukeratu"
+#: gui/editrecorddialog.cpp:58
+msgid "Author:"
+msgstr ""
+
+#: gui/editrecorddialog.cpp:59 gui/launcher.cpp:204
+msgid "Name:"
+msgstr "Izena:"
+
+#: gui/editrecorddialog.cpp:60
+msgid "Notes:"
+msgstr ""
+
+#: gui/editrecorddialog.cpp:68 gui/predictivedialog.cpp:75
+msgid "Ok"
+msgstr ""
+
#: gui/gui-manager.cpp:117 backends/keymapper/remap-dialog.cpp:53
#: engines/scumm/help.cpp:126 engines/scumm/help.cpp:141
#: engines/scumm/help.cpp:166 engines/scumm/help.cpp:192
@@ -101,7 +119,7 @@ msgid "Map"
msgstr "Esleitu"
#: gui/KeysDialog.cpp:42 gui/launcher.cpp:352 gui/launcher.cpp:1048
-#: gui/launcher.cpp:1052 gui/massadd.cpp:92 gui/options.cpp:1240
+#: gui/launcher.cpp:1052 gui/massadd.cpp:92 gui/options.cpp:1238
#: gui/saveload-dialog.cpp:932 gui/fluidsynth-dialog.cpp:153
#: engines/engine.cpp:402 engines/engine.cpp:413
#: backends/platform/wii/options.cpp:47
@@ -163,10 +181,6 @@ msgctxt "lowres"
msgid "ID:"
msgstr "ID:"
-#: gui/launcher.cpp:204
-msgid "Name:"
-msgstr "Izena:"
-
#: gui/launcher.cpp:204 gui/launcher.cpp:206 gui/launcher.cpp:207
msgid "Full title of the game"
msgstr "Jokoaren izen osoa"
@@ -188,7 +202,7 @@ msgstr ""
"Jokoaren hizkuntza. Honek ez du zure ingelesezko bertsioa frantsesera pasako"
#: gui/launcher.cpp:212 gui/launcher.cpp:226 gui/options.cpp:87
-#: gui/options.cpp:737 gui/options.cpp:750 gui/options.cpp:1210
+#: gui/options.cpp:735 gui/options.cpp:748 gui/options.cpp:1208
#: audio/null.cpp:41
msgid "<default>"
msgstr "<lehenetsia>"
@@ -211,11 +225,11 @@ msgstr "Plataforma:"
msgid "Engine"
msgstr "Aztertu"
-#: gui/launcher.cpp:245 gui/options.cpp:1073 gui/options.cpp:1090
+#: gui/launcher.cpp:245 gui/options.cpp:1071 gui/options.cpp:1088
msgid "Graphics"
msgstr "Grafikoak"
-#: gui/launcher.cpp:245 gui/options.cpp:1073 gui/options.cpp:1090
+#: gui/launcher.cpp:245 gui/options.cpp:1071 gui/options.cpp:1088
msgid "GFX"
msgstr "GFX"
@@ -228,7 +242,7 @@ msgctxt "lowres"
msgid "Override global graphic settings"
msgstr "Ezarpen grafiko globalak baliogabetu"
-#: gui/launcher.cpp:257 gui/options.cpp:1096
+#: gui/launcher.cpp:257 gui/options.cpp:1094
msgid "Audio"
msgstr "Soinua"
@@ -241,11 +255,11 @@ msgctxt "lowres"
msgid "Override global audio settings"
msgstr "Soinu ezarpen globalak baliogabetu"
-#: gui/launcher.cpp:271 gui/options.cpp:1101
+#: gui/launcher.cpp:271 gui/options.cpp:1099
msgid "Volume"
msgstr "Bolumena"
-#: gui/launcher.cpp:273 gui/options.cpp:1103
+#: gui/launcher.cpp:273 gui/options.cpp:1101
msgctxt "lowres"
msgid "Volume"
msgstr "Bolumena"
@@ -259,7 +273,7 @@ msgctxt "lowres"
msgid "Override global volume settings"
msgstr "Bolumen ezarpen globalak baliogabetu"
-#: gui/launcher.cpp:286 gui/options.cpp:1111
+#: gui/launcher.cpp:286 gui/options.cpp:1109
msgid "MIDI"
msgstr "MIDI"
@@ -272,7 +286,7 @@ msgctxt "lowres"
msgid "Override global MIDI settings"
msgstr "MIDI ezarpen globalak baliogabetu"
-#: gui/launcher.cpp:300 gui/options.cpp:1117
+#: gui/launcher.cpp:300 gui/options.cpp:1115
msgid "MT-32"
msgstr "MT-32"
@@ -285,11 +299,11 @@ msgctxt "lowres"
msgid "Override global MT-32 settings"
msgstr "MT-32 ezarpen globalak baliogabetu"
-#: gui/launcher.cpp:314 gui/options.cpp:1124
+#: gui/launcher.cpp:314 gui/options.cpp:1122
msgid "Paths"
msgstr "Bide-izenak"
-#: gui/launcher.cpp:316 gui/options.cpp:1126
+#: gui/launcher.cpp:316 gui/options.cpp:1124
msgctxt "lowres"
msgid "Paths"
msgstr "Bideak"
@@ -303,7 +317,7 @@ msgctxt "lowres"
msgid "Game Path:"
msgstr "Jokoa:"
-#: gui/launcher.cpp:330 gui/options.cpp:1150
+#: gui/launcher.cpp:330 gui/options.cpp:1148
msgid "Extra Path:"
msgstr "Gehigarriak:"
@@ -311,42 +325,42 @@ msgstr "Gehigarriak:"
msgid "Specifies path to additional data used by the game"
msgstr "Jokoak erabiltzen duen datu gehigarrien bide-izena"
-#: gui/launcher.cpp:332 gui/options.cpp:1152
+#: gui/launcher.cpp:332 gui/options.cpp:1150
msgctxt "lowres"
msgid "Extra Path:"
msgstr "Gehigarria:"
-#: gui/launcher.cpp:339 gui/options.cpp:1134
+#: gui/launcher.cpp:339 gui/options.cpp:1132
msgid "Save Path:"
msgstr "Partida gordeak:"
#: gui/launcher.cpp:339 gui/launcher.cpp:341 gui/launcher.cpp:342
-#: gui/options.cpp:1134 gui/options.cpp:1136 gui/options.cpp:1137
+#: gui/options.cpp:1132 gui/options.cpp:1134 gui/options.cpp:1135
msgid "Specifies where your saved games are put"
msgstr "Zure gordetako partidak non gordeko diren zehazten du"
-#: gui/launcher.cpp:341 gui/options.cpp:1136
+#: gui/launcher.cpp:341 gui/options.cpp:1134
msgctxt "lowres"
msgid "Save Path:"
msgstr "Partida gordeak:"
#: gui/launcher.cpp:360 gui/launcher.cpp:459 gui/launcher.cpp:517
-#: gui/launcher.cpp:571 gui/options.cpp:1145 gui/options.cpp:1153
-#: gui/options.cpp:1162 gui/options.cpp:1277 gui/options.cpp:1283
-#: gui/options.cpp:1291 gui/options.cpp:1321 gui/options.cpp:1327
-#: gui/options.cpp:1334 gui/options.cpp:1427 gui/options.cpp:1430
-#: gui/options.cpp:1442
+#: gui/launcher.cpp:571 gui/options.cpp:1143 gui/options.cpp:1151
+#: gui/options.cpp:1160 gui/options.cpp:1275 gui/options.cpp:1281
+#: gui/options.cpp:1289 gui/options.cpp:1319 gui/options.cpp:1325
+#: gui/options.cpp:1332 gui/options.cpp:1425 gui/options.cpp:1428
+#: gui/options.cpp:1440
msgctxt "path"
msgid "None"
msgstr "Bat ere ez"
#: gui/launcher.cpp:365 gui/launcher.cpp:465 gui/launcher.cpp:575
-#: gui/options.cpp:1271 gui/options.cpp:1315 gui/options.cpp:1433
+#: gui/options.cpp:1269 gui/options.cpp:1313 gui/options.cpp:1431
#: backends/platform/wii/options.cpp:56
msgid "Default"
msgstr "Lehenetsia"
-#: gui/launcher.cpp:510 gui/options.cpp:1436
+#: gui/launcher.cpp:510 gui/options.cpp:1434
msgid "Select SoundFont"
msgstr "SoundFont-a aukeratu"
@@ -358,7 +372,7 @@ msgstr "Jokoaren direktorioa aukeratu"
msgid "Select additional game directory"
msgstr "Direktorio gehigarria aukeratu"
-#: gui/launcher.cpp:559 gui/options.cpp:1379
+#: gui/launcher.cpp:559 gui/options.cpp:1377
msgid "Select directory for saved games"
msgstr "Partida gordeen direktorioa aukeratu"
@@ -560,6 +574,24 @@ msgid "Discovered %d new games, ignored %d previously added games ..."
msgstr ""
"%d joko berri aurkitu dira, aurretik gehituriko %d ez dira kontuan hartu"
+#: gui/onscreendialog.cpp:101 gui/onscreendialog.cpp:103
+msgid "Stop"
+msgstr ""
+
+#: gui/onscreendialog.cpp:106
+msgid "Edit record description"
+msgstr ""
+
+#: gui/onscreendialog.cpp:108
+#, fuzzy
+msgid "Switch to Game"
+msgstr "Aldatu"
+
+#: gui/onscreendialog.cpp:110
+#, fuzzy
+msgid "Fast replay"
+msgstr "Modu bizkorra"
+
#: gui/options.cpp:85
msgid "Never"
msgstr "Inoiz ez"
@@ -600,8 +632,8 @@ msgstr "44 kHz"
msgid "48 kHz"
msgstr "48 kHz"
-#: gui/options.cpp:255 gui/options.cpp:481 gui/options.cpp:582
-#: gui/options.cpp:651 gui/options.cpp:859
+#: gui/options.cpp:255 gui/options.cpp:479 gui/options.cpp:580
+#: gui/options.cpp:649 gui/options.cpp:857
msgctxt "soundfont"
msgid "None"
msgstr "Bat ere ez"
@@ -622,70 +654,70 @@ msgstr "ezin izan da pantaila-osoaren ezarpena aldatu"
msgid "the aspect ratio setting could not be changed"
msgstr "formatu-ratioaren ezarpena ezin izan da aldatu"
-#: gui/options.cpp:734
+#: gui/options.cpp:732
msgid "Graphics mode:"
msgstr "Modu grafikoa:"
-#: gui/options.cpp:748
+#: gui/options.cpp:746
msgid "Render mode:"
msgstr "Renderizazioa:"
-#: gui/options.cpp:748 gui/options.cpp:749
+#: gui/options.cpp:746 gui/options.cpp:747
msgid "Special dithering modes supported by some games"
msgstr "Joko batzuk onarturiko lausotze-modu bereziak"
-#: gui/options.cpp:760
+#: gui/options.cpp:758
#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2298
msgid "Fullscreen mode"
msgstr "Pantaila osoa"
-#: gui/options.cpp:763
+#: gui/options.cpp:761
msgid "Aspect ratio correction"
msgstr "Formatu-ratioaren zuzenketa"
-#: gui/options.cpp:763
+#: gui/options.cpp:761
msgid "Correct aspect ratio for 320x200 games"
msgstr "320x200 jokoentzako formatu-ratioa zuzendu"
-#: gui/options.cpp:771
+#: gui/options.cpp:769
msgid "Preferred Device:"
msgstr "Gogoko gailua:"
-#: gui/options.cpp:771
+#: gui/options.cpp:769
msgid "Music Device:"
msgstr "Musika gailua:"
-#: gui/options.cpp:771 gui/options.cpp:773
+#: gui/options.cpp:769 gui/options.cpp:771
msgid "Specifies preferred sound device or sound card emulator"
msgstr "Gogoko soinu txartel edo emuladorea zein den ezartzen du"
-#: gui/options.cpp:771 gui/options.cpp:773 gui/options.cpp:774
+#: gui/options.cpp:769 gui/options.cpp:771 gui/options.cpp:772
msgid "Specifies output sound device or sound card emulator"
msgstr "Irteerako soinu txartel edo emuladorea ezartzen du"
-#: gui/options.cpp:773
+#: gui/options.cpp:771
msgctxt "lowres"
msgid "Preferred Dev.:"
msgstr "Gail. gogokoa:"
-#: gui/options.cpp:773
+#: gui/options.cpp:771
msgctxt "lowres"
msgid "Music Device:"
msgstr "Musika gailua:"
-#: gui/options.cpp:800
+#: gui/options.cpp:798
msgid "AdLib emulator:"
msgstr "AdLib emuladorea:"
-#: gui/options.cpp:800 gui/options.cpp:801
+#: gui/options.cpp:798 gui/options.cpp:799
msgid "AdLib is used for music in many games"
msgstr "AdLib musikarako hainbat jokotan erabiltzen da"
-#: gui/options.cpp:811
+#: gui/options.cpp:809
msgid "Output rate:"
msgstr "Irteera maizt.:"
-#: gui/options.cpp:811 gui/options.cpp:812
+#: gui/options.cpp:809 gui/options.cpp:810
msgid ""
"Higher value specifies better sound quality but may be not supported by your "
"soundcard"
@@ -693,68 +725,68 @@ msgstr ""
"Balio altuagoek soinu kalitate hobea ezartzen dute, baina baliteke zure "
"soinu-txartela bateragarria ez izatea"
-#: gui/options.cpp:822
+#: gui/options.cpp:820
msgid "GM Device:"
msgstr "GM gailua:"
-#: gui/options.cpp:822
+#: gui/options.cpp:820
msgid "Specifies default sound device for General MIDI output"
msgstr "Defektuzko soinu txartela ezartzen du General MIDI irteerarako"
-#: gui/options.cpp:833
+#: gui/options.cpp:831
msgid "Don't use General MIDI music"
msgstr "Ez erabili General MIDI musika"
-#: gui/options.cpp:844 gui/options.cpp:910
+#: gui/options.cpp:842 gui/options.cpp:908
msgid "Use first available device"
msgstr "Erabilgarri dagoen lehen gailua erabili"
-#: gui/options.cpp:856
+#: gui/options.cpp:854
msgid "SoundFont:"
msgstr "SoundFont:"
-#: gui/options.cpp:856 gui/options.cpp:858 gui/options.cpp:859
+#: gui/options.cpp:854 gui/options.cpp:856 gui/options.cpp:857
msgid "SoundFont is supported by some audio cards, FluidSynth and Timidity"
msgstr ""
"Zenbait soinu txartel bateragarriak dira SoundFont-ekin, FluidSynth eta "
"Timidity besteak beste"
-#: gui/options.cpp:858
+#: gui/options.cpp:856
msgctxt "lowres"
msgid "SoundFont:"
msgstr "SoundFont:"
-#: gui/options.cpp:864
+#: gui/options.cpp:862
msgid "Mixed AdLib/MIDI mode"
msgstr "AdLib/MIDI modua"
-#: gui/options.cpp:864
+#: gui/options.cpp:862
msgid "Use both MIDI and AdLib sound generation"
msgstr "Soinua sortzerakoan MIDI eta AdLib erabili"
-#: gui/options.cpp:867
+#: gui/options.cpp:865
msgid "MIDI gain:"
msgstr "MIDI irabazia:"
-#: gui/options.cpp:874
+#: gui/options.cpp:872
msgid "FluidSynth Settings"
msgstr ""
-#: gui/options.cpp:881
+#: gui/options.cpp:879
msgid "MT-32 Device:"
msgstr "MT-32 gailua:"
-#: gui/options.cpp:881
+#: gui/options.cpp:879
msgid "Specifies default sound device for Roland MT-32/LAPC1/CM32l/CM64 output"
msgstr ""
"Roland MT-32/LAPC1/CM32l/CM64 irteerarako defektuzko soinu txartela ezartzen "
"du"
-#: gui/options.cpp:886
+#: gui/options.cpp:884
msgid "True Roland MT-32 (disable GM emulation)"
msgstr "Benetako Roland MT-32 (GM emulazio gabe)"
-#: gui/options.cpp:886 gui/options.cpp:888
+#: gui/options.cpp:884 gui/options.cpp:886
msgid ""
"Check if you want to use your real hardware Roland-compatible sound device "
"connected to your computer"
@@ -762,190 +794,190 @@ msgstr ""
"Markatu ordenagailura konektaturiko Roland-ekin bateragarria den soinu-"
"gailua erabiltzeko"
-#: gui/options.cpp:888
+#: gui/options.cpp:886
msgctxt "lowres"
msgid "True Roland MT-32 (no GM emulation)"
msgstr "Benetako Roland MT-32 (GM emulazio gabe)"
-#: gui/options.cpp:891
+#: gui/options.cpp:889
#, fuzzy
msgid "Roland GS Device (enable MT-32 mappings)"
msgstr "Benetako Roland MT-32 (GM emulazio gabe)"
-#: gui/options.cpp:891
+#: gui/options.cpp:889
msgid ""
"Check if you want to enable patch mappings to emulate an MT-32 on a Roland "
"GS device"
msgstr ""
-#: gui/options.cpp:900
+#: gui/options.cpp:898
msgid "Don't use Roland MT-32 music"
msgstr "Ez erabili Roland MT-32 musika"
-#: gui/options.cpp:927
+#: gui/options.cpp:925
msgid "Text and Speech:"
msgstr "Testu eta ahotsa:"
-#: gui/options.cpp:931 gui/options.cpp:941
+#: gui/options.cpp:929 gui/options.cpp:939
msgid "Speech"
msgstr "Ahotsa"
-#: gui/options.cpp:932 gui/options.cpp:942
+#: gui/options.cpp:930 gui/options.cpp:940
msgid "Subtitles"
msgstr "Azpitituluak"
-#: gui/options.cpp:933
+#: gui/options.cpp:931
msgid "Both"
msgstr "Biak"
-#: gui/options.cpp:935
+#: gui/options.cpp:933
msgid "Subtitle speed:"
msgstr "Azpitit. abiadura:"
-#: gui/options.cpp:937
+#: gui/options.cpp:935
msgctxt "lowres"
msgid "Text and Speech:"
msgstr "Testu eta ahotsa:"
-#: gui/options.cpp:941
+#: gui/options.cpp:939
msgid "Spch"
msgstr "Ahots."
-#: gui/options.cpp:942
+#: gui/options.cpp:940
msgid "Subs"
msgstr "Azp."
-#: gui/options.cpp:943
+#: gui/options.cpp:941
msgctxt "lowres"
msgid "Both"
msgstr "Biak"
-#: gui/options.cpp:943
+#: gui/options.cpp:941
msgid "Show subtitles and play speech"
msgstr "Ahotsak erreproduzitu eta azpitituluak erakutsi"
-#: gui/options.cpp:945
+#: gui/options.cpp:943
msgctxt "lowres"
msgid "Subtitle speed:"
msgstr "Azpit. abiadura:"
-#: gui/options.cpp:961
+#: gui/options.cpp:959
msgid "Music volume:"
msgstr "Musika:"
-#: gui/options.cpp:963
+#: gui/options.cpp:961
msgctxt "lowres"
msgid "Music volume:"
msgstr "Musika:"
-#: gui/options.cpp:970
+#: gui/options.cpp:968
msgid "Mute All"
msgstr "Mututu dena"
-#: gui/options.cpp:973
+#: gui/options.cpp:971
msgid "SFX volume:"
msgstr "Efektuak:"
-#: gui/options.cpp:973 gui/options.cpp:975 gui/options.cpp:976
+#: gui/options.cpp:971 gui/options.cpp:973 gui/options.cpp:974
msgid "Special sound effects volume"
msgstr "Soinu efektu berezien bolumena"
-#: gui/options.cpp:975
+#: gui/options.cpp:973
msgctxt "lowres"
msgid "SFX volume:"
msgstr "Efektuak:"
-#: gui/options.cpp:983
+#: gui/options.cpp:981
msgid "Speech volume:"
msgstr "Ahotsak:"
-#: gui/options.cpp:985
+#: gui/options.cpp:983
msgctxt "lowres"
msgid "Speech volume:"
msgstr "Ahotsak:"
-#: gui/options.cpp:1142
+#: gui/options.cpp:1140
msgid "Theme Path:"
msgstr "Gaiak:"
-#: gui/options.cpp:1144
+#: gui/options.cpp:1142
msgctxt "lowres"
msgid "Theme Path:"
msgstr "Gaiak:"
-#: gui/options.cpp:1150 gui/options.cpp:1152 gui/options.cpp:1153
+#: gui/options.cpp:1148 gui/options.cpp:1150 gui/options.cpp:1151
msgid "Specifies path to additional data used by all games or ScummVM"
msgstr ""
"Joko guztiek edo ScummVM-k darabilten datu gehigarrien bide-izena ezartzen du"
-#: gui/options.cpp:1159
+#: gui/options.cpp:1157
msgid "Plugins Path:"
msgstr "Pluginak:"
-#: gui/options.cpp:1161
+#: gui/options.cpp:1159
msgctxt "lowres"
msgid "Plugins Path:"
msgstr "Pluginak:"
-#: gui/options.cpp:1170 gui/fluidsynth-dialog.cpp:138
+#: gui/options.cpp:1168 gui/fluidsynth-dialog.cpp:138
msgid "Misc"
msgstr "Beste"
-#: gui/options.cpp:1172
+#: gui/options.cpp:1170
msgctxt "lowres"
msgid "Misc"
msgstr "Beste"
-#: gui/options.cpp:1174
+#: gui/options.cpp:1172
msgid "Theme:"
msgstr "Gaia:"
-#: gui/options.cpp:1178
+#: gui/options.cpp:1176
msgid "GUI Renderer:"
msgstr "Interfazea:"
-#: gui/options.cpp:1190
+#: gui/options.cpp:1188
msgid "Autosave:"
msgstr "Autogordetzea:"
-#: gui/options.cpp:1192
+#: gui/options.cpp:1190
msgctxt "lowres"
msgid "Autosave:"
msgstr "Autogordetzea:"
-#: gui/options.cpp:1200
+#: gui/options.cpp:1198
msgid "Keys"
msgstr "Teklak"
-#: gui/options.cpp:1207
+#: gui/options.cpp:1205
msgid "GUI Language:"
msgstr "Hizkuntza"
-#: gui/options.cpp:1207
+#: gui/options.cpp:1205
msgid "Language of ScummVM GUI"
msgstr "ScummVM interfazearen hizkuntza"
-#: gui/options.cpp:1366
+#: gui/options.cpp:1364
msgid "You have to restart ScummVM before your changes will take effect."
msgstr "ScummVM berrabiarazi behar duzu aldaketak indarrean jartzeko"
-#: gui/options.cpp:1386
+#: gui/options.cpp:1384
msgid "The chosen directory cannot be written to. Please select another one."
msgstr "Aukeraturiko direktorioan ezin da idatzi. Mesedez, aukeratu beste bat."
-#: gui/options.cpp:1395
+#: gui/options.cpp:1393
msgid "Select directory for GUI themes"
msgstr "Gaien direktorioa aukeratu"
-#: gui/options.cpp:1405
+#: gui/options.cpp:1403
msgid "Select directory for extra files"
msgstr "Fitxategi gehigarrien direktorioa aukeratu"
-#: gui/options.cpp:1416
+#: gui/options.cpp:1414
msgid "Select directory for plugins"
msgstr "Pluginen direktorioa aukeratu"
-#: gui/options.cpp:1469
+#: gui/options.cpp:1467
msgid ""
"The theme you selected does not support your current language. If you want "
"to use this theme you need to switch to another language first."
@@ -953,6 +985,29 @@ msgstr ""
"Aukeraturiko gaia ez da zure hizkuntzarekin bateragarria. Gai hau erabili "
"nahi baduzu, aurretik beste hizkuntza batera pasa behar duzu."
+#. I18N: You must leave "#" as is, only word 'next' is translatable
+#: gui/predictivedialog.cpp:87
+msgid "# next"
+msgstr ""
+
+#: gui/predictivedialog.cpp:88
+msgid "add"
+msgstr ""
+
+#: gui/predictivedialog.cpp:92
+#, fuzzy
+msgid "Delete char"
+msgstr "Ezabatu"
+
+#: gui/predictivedialog.cpp:96
+msgid "<"
+msgstr ""
+
+#. I18N: Pre means 'Predictive', leave '*' as is
+#: gui/predictivedialog.cpp:98
+msgid "* Pre"
+msgstr ""
+
#: gui/recorderdialog.cpp:64
msgid "Recorder or Playback Gameplay"
msgstr ""
@@ -990,6 +1045,11 @@ msgstr ""
msgid "Do you really want to delete this record?"
msgstr "Ezabatu partida gorde hau?"
+#: gui/recorderdialog.cpp:174
+#, fuzzy
+msgid "Unknown Author"
+msgstr "Errore ezezaguna"
+
#: gui/saveload-dialog.cpp:167
msgid "List view"
msgstr ""
@@ -1445,14 +1505,18 @@ msgstr ""
msgid "Start anyway"
msgstr "Jolastu berdin-berdin"
-#: audio/fmopl.cpp:50
+#: audio/fmopl.cpp:62
msgid "MAME OPL emulator"
msgstr "MAME OPL emuladorea"
-#: audio/fmopl.cpp:52
+#: audio/fmopl.cpp:64
msgid "DOSBox OPL emulator"
msgstr "DOSBox OPL emuladorea"
+#: audio/fmopl.cpp:67
+msgid "ALSA Direct FM"
+msgstr ""
+
#: audio/mididrv.cpp:209
#, c-format
msgid ""
@@ -1502,7 +1566,7 @@ msgstr "Musikarik ez"
msgid "Amiga Audio Emulator"
msgstr "Amiga Audio emuladorea"
-#: audio/softsynth/adlib.cpp:2285
+#: audio/adlib.cpp:2291
msgid "AdLib Emulator"
msgstr "AdLib emuladorea"
@@ -2137,14 +2201,13 @@ msgstr "Klikatzea desgaituta"
#: engines/agi/detection.cpp:147 engines/drascula/detection.cpp:302
#: engines/dreamweb/detection.cpp:47 engines/neverhood/detection.cpp:160
#: engines/sci/detection.cpp:394 engines/toltecs/detection.cpp:200
-#: engines/zvision/detection.cpp:246
+#: engines/zvision/detection_tables.h:51
msgid "Use original save/load screens"
msgstr ""
#: engines/agi/detection.cpp:148 engines/drascula/detection.cpp:303
#: engines/dreamweb/detection.cpp:48 engines/neverhood/detection.cpp:161
#: engines/sci/detection.cpp:395 engines/toltecs/detection.cpp:201
-#: engines/zvision/detection.cpp:247
msgid "Use the original save/load screens, instead of the ScummVM ones"
msgstr ""
@@ -3283,6 +3346,25 @@ msgstr "Eskuinera hegan egin"
msgid "Fly to lower right"
msgstr "Behera eta eskuinera hegan egin"
+#: engines/scumm/input.cpp:572
+#, fuzzy
+msgid "Snap scroll on"
+msgstr "Behera"
+
+#: engines/scumm/input.cpp:574
+msgid "Snap scroll off"
+msgstr ""
+
+#: engines/scumm/input.cpp:587
+#, fuzzy
+msgid "Music volume: "
+msgstr "Musika:"
+
+#: engines/scumm/input.cpp:604
+#, fuzzy
+msgid "Subtitle speed: "
+msgstr "Azpitit. abiadura:"
+
#: engines/scumm/scumm.cpp:1832
#, c-format
msgid ""
@@ -3434,38 +3516,42 @@ msgstr ""
msgid "Show the current number of frames per second in the upper left corner"
msgstr ""
-#: engines/zvision/detection.cpp:256
+#: engines/zvision/detection_tables.h:52
+msgid "Use the original save/load screens instead of the ScummVM interface"
+msgstr ""
+
+#: engines/zvision/detection_tables.h:61
msgid "Double FPS"
msgstr ""
-#: engines/zvision/detection.cpp:257
-msgid "Increase game FPS from 30 to 60"
+#: engines/zvision/detection_tables.h:62
+msgid "Increase framerate from 30 to 60 FPS"
msgstr ""
-#: engines/zvision/detection.cpp:266
+#: engines/zvision/detection_tables.h:71
#, fuzzy
msgid "Enable Venus"
msgstr "Roland GS modua gaitu"
-#: engines/zvision/detection.cpp:267
+#: engines/zvision/detection_tables.h:72
+#, fuzzy
msgid "Enable the Venus help system"
-msgstr ""
+msgstr "Roland GS modua gaitu"
-#: engines/zvision/detection.cpp:276
+#: engines/zvision/detection_tables.h:81
msgid "Disable animation while turning"
msgstr ""
-#: engines/zvision/detection.cpp:277
-msgid "Disable animation while turning in panoramic mode"
+#: engines/zvision/detection_tables.h:82
+msgid "Disable animation while turning in panorama mode"
msgstr ""
-#: engines/zvision/detection.cpp:286
-msgid "Use the hires MPEG movies"
+#: engines/zvision/detection_tables.h:91
+msgid "Use high resolution MPEG video"
msgstr ""
-#: engines/zvision/detection.cpp:287
-msgid ""
-"Use the hires MPEG movies of the DVD version, instead of the lowres AVI ones"
+#: engines/zvision/detection_tables.h:92
+msgid "Use MPEG video from the DVD version, instead of lower resolution AVI"
msgstr ""
#~ msgid "EGA undithering"
diff --git a/po/fi_FI.po b/po/fi_FI.po
index 04aea37268..aeed76304e 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.sf.net\n"
-"POT-Creation-Date: 2015-06-30 20:57+0100\n"
+"POT-Creation-Date: 2015-10-11 18:59+0100\n"
"PO-Revision-Date: 2012-12-01 19:37+0200\n"
"Last-Translator: Toni Saarela <saarela@gmail.com>\n"
"Language-Team: Finnish\n"
@@ -30,7 +30,7 @@ msgstr "Tфhфn versioon kффnnetyt ominaisuudet:"
msgid "Available engines:"
msgstr "Tuetut pelimoottorit:"
-#: gui/browser.cpp:68
+#: gui/browser.cpp:68 gui/browser_osx.mm:104
#, fuzzy
msgid "Show hidden files"
msgstr "Nфytф / piilota konsoli"
@@ -52,13 +52,14 @@ msgctxt "lowres"
msgid "Go up"
msgstr "Siirry ylіs"
-#: gui/browser.cpp:75 gui/chooser.cpp:46 gui/KeysDialog.cpp:43
-#: gui/launcher.cpp:351 gui/massadd.cpp:95 gui/options.cpp:1239
-#: gui/recorderdialog.cpp:70 gui/recorderdialog.cpp:156
-#: gui/saveload-dialog.cpp:216 gui/saveload-dialog.cpp:276
-#: gui/saveload-dialog.cpp:547 gui/saveload-dialog.cpp:931
-#: gui/themebrowser.cpp:55 gui/fluidsynth-dialog.cpp:152
-#: engines/engine.cpp:483 backends/platform/wii/options.cpp:48
+#: gui/browser.cpp:75 gui/chooser.cpp:46 gui/editrecorddialog.cpp:67
+#: gui/KeysDialog.cpp:43 gui/launcher.cpp:351 gui/massadd.cpp:95
+#: gui/options.cpp:1237 gui/predictivedialog.cpp:74 gui/recorderdialog.cpp:70
+#: gui/recorderdialog.cpp:156 gui/saveload-dialog.cpp:216
+#: gui/saveload-dialog.cpp:276 gui/saveload-dialog.cpp:547
+#: gui/saveload-dialog.cpp:931 gui/themebrowser.cpp:55
+#: gui/fluidsynth-dialog.cpp:152 engines/engine.cpp:483
+#: backends/platform/wii/options.cpp:48
#: backends/events/default/default-events.cpp:196
#: backends/events/default/default-events.cpp:218
#: engines/drascula/saveload.cpp:49 engines/parallaction/saveload.cpp:274
@@ -66,10 +67,27 @@ msgstr "Siirry ylіs"
msgid "Cancel"
msgstr "Peruuta"
-#: gui/browser.cpp:76 gui/chooser.cpp:47 gui/themebrowser.cpp:56
+#: gui/browser.cpp:76 gui/browser_osx.mm:103 gui/chooser.cpp:47
+#: gui/themebrowser.cpp:56
msgid "Choose"
msgstr "Valitse"
+#: gui/editrecorddialog.cpp:58
+msgid "Author:"
+msgstr ""
+
+#: gui/editrecorddialog.cpp:59 gui/launcher.cpp:204
+msgid "Name:"
+msgstr "Nimi:"
+
+#: gui/editrecorddialog.cpp:60
+msgid "Notes:"
+msgstr ""
+
+#: gui/editrecorddialog.cpp:68 gui/predictivedialog.cpp:75
+msgid "Ok"
+msgstr ""
+
#: gui/gui-manager.cpp:117 backends/keymapper/remap-dialog.cpp:53
#: engines/scumm/help.cpp:126 engines/scumm/help.cpp:141
#: engines/scumm/help.cpp:166 engines/scumm/help.cpp:192
@@ -102,7 +120,7 @@ msgid "Map"
msgstr "Nфppфinkartta"
#: gui/KeysDialog.cpp:42 gui/launcher.cpp:352 gui/launcher.cpp:1048
-#: gui/launcher.cpp:1052 gui/massadd.cpp:92 gui/options.cpp:1240
+#: gui/launcher.cpp:1052 gui/massadd.cpp:92 gui/options.cpp:1238
#: gui/saveload-dialog.cpp:932 gui/fluidsynth-dialog.cpp:153
#: engines/engine.cpp:402 engines/engine.cpp:413
#: backends/platform/wii/options.cpp:47
@@ -164,10 +182,6 @@ msgctxt "lowres"
msgid "ID:"
msgstr "Tunniste:"
-#: gui/launcher.cpp:204
-msgid "Name:"
-msgstr "Nimi:"
-
#: gui/launcher.cpp:204 gui/launcher.cpp:206 gui/launcher.cpp:207
msgid "Full title of the game"
msgstr "Pelin koko nimi"
@@ -190,7 +204,7 @@ msgstr ""
"englanninkieliseksi."
#: gui/launcher.cpp:212 gui/launcher.cpp:226 gui/options.cpp:87
-#: gui/options.cpp:737 gui/options.cpp:750 gui/options.cpp:1210
+#: gui/options.cpp:735 gui/options.cpp:748 gui/options.cpp:1208
#: audio/null.cpp:41
msgid "<default>"
msgstr "<oletus>"
@@ -212,11 +226,11 @@ msgstr "Alusta:"
msgid "Engine"
msgstr "Moottori"
-#: gui/launcher.cpp:245 gui/options.cpp:1073 gui/options.cpp:1090
+#: gui/launcher.cpp:245 gui/options.cpp:1071 gui/options.cpp:1088
msgid "Graphics"
msgstr "Grafiikka"
-#: gui/launcher.cpp:245 gui/options.cpp:1073 gui/options.cpp:1090
+#: gui/launcher.cpp:245 gui/options.cpp:1071 gui/options.cpp:1088
msgid "GFX"
msgstr "GFX"
@@ -229,7 +243,7 @@ msgctxt "lowres"
msgid "Override global graphic settings"
msgstr "Ohita globaalit grafiikka-asetukset"
-#: gui/launcher.cpp:257 gui/options.cpp:1096
+#: gui/launcher.cpp:257 gui/options.cpp:1094
msgid "Audio"
msgstr "Ффni"
@@ -242,11 +256,11 @@ msgctxt "lowres"
msgid "Override global audio settings"
msgstr "Ohita globaalit ффniasetukset"
-#: gui/launcher.cpp:271 gui/options.cpp:1101
+#: gui/launcher.cpp:271 gui/options.cpp:1099
msgid "Volume"
msgstr "Voimakkuus"
-#: gui/launcher.cpp:273 gui/options.cpp:1103
+#: gui/launcher.cpp:273 gui/options.cpp:1101
msgctxt "lowres"
msgid "Volume"
msgstr "Voimakkuus"
@@ -260,7 +274,7 @@ msgctxt "lowres"
msgid "Override global volume settings"
msgstr "Ohita globaalit ффnenvoimakkuusasetukset"
-#: gui/launcher.cpp:286 gui/options.cpp:1111
+#: gui/launcher.cpp:286 gui/options.cpp:1109
msgid "MIDI"
msgstr "MIDI"
@@ -273,7 +287,7 @@ msgctxt "lowres"
msgid "Override global MIDI settings"
msgstr "Ohita globaalit MIDI-asetukset"
-#: gui/launcher.cpp:300 gui/options.cpp:1117
+#: gui/launcher.cpp:300 gui/options.cpp:1115
msgid "MT-32"
msgstr "MT-32"
@@ -286,11 +300,11 @@ msgctxt "lowres"
msgid "Override global MT-32 settings"
msgstr "Ohita globaalit MT-32 asetukset"
-#: gui/launcher.cpp:314 gui/options.cpp:1124
+#: gui/launcher.cpp:314 gui/options.cpp:1122
msgid "Paths"
msgstr "Polut"
-#: gui/launcher.cpp:316 gui/options.cpp:1126
+#: gui/launcher.cpp:316 gui/options.cpp:1124
msgctxt "lowres"
msgid "Paths"
msgstr "Polut"
@@ -304,7 +318,7 @@ msgctxt "lowres"
msgid "Game Path:"
msgstr "Pelin polku:"
-#: gui/launcher.cpp:330 gui/options.cpp:1150
+#: gui/launcher.cpp:330 gui/options.cpp:1148
msgid "Extra Path:"
msgstr "Lisфkansio:"
@@ -312,42 +326,42 @@ msgstr "Lisфkansio:"
msgid "Specifies path to additional data used by the game"
msgstr "Mффrittфф polun lisфtiedostoihin joita peli mahdollisesti kфyttфф"
-#: gui/launcher.cpp:332 gui/options.cpp:1152
+#: gui/launcher.cpp:332 gui/options.cpp:1150
msgctxt "lowres"
msgid "Extra Path:"
msgstr "Lisфkansio:"
-#: gui/launcher.cpp:339 gui/options.cpp:1134
+#: gui/launcher.cpp:339 gui/options.cpp:1132
msgid "Save Path:"
msgstr "Tallennuskansio:"
#: gui/launcher.cpp:339 gui/launcher.cpp:341 gui/launcher.cpp:342
-#: gui/options.cpp:1134 gui/options.cpp:1136 gui/options.cpp:1137
+#: gui/options.cpp:1132 gui/options.cpp:1134 gui/options.cpp:1135
msgid "Specifies where your saved games are put"
msgstr "Mффrittфф polun pelitallennuksille"
-#: gui/launcher.cpp:341 gui/options.cpp:1136
+#: gui/launcher.cpp:341 gui/options.cpp:1134
msgctxt "lowres"
msgid "Save Path:"
msgstr "Tallennuskansio:"
#: gui/launcher.cpp:360 gui/launcher.cpp:459 gui/launcher.cpp:517
-#: gui/launcher.cpp:571 gui/options.cpp:1145 gui/options.cpp:1153
-#: gui/options.cpp:1162 gui/options.cpp:1277 gui/options.cpp:1283
-#: gui/options.cpp:1291 gui/options.cpp:1321 gui/options.cpp:1327
-#: gui/options.cpp:1334 gui/options.cpp:1427 gui/options.cpp:1430
-#: gui/options.cpp:1442
+#: gui/launcher.cpp:571 gui/options.cpp:1143 gui/options.cpp:1151
+#: gui/options.cpp:1160 gui/options.cpp:1275 gui/options.cpp:1281
+#: gui/options.cpp:1289 gui/options.cpp:1319 gui/options.cpp:1325
+#: gui/options.cpp:1332 gui/options.cpp:1425 gui/options.cpp:1428
+#: gui/options.cpp:1440
msgctxt "path"
msgid "None"
msgstr "Ei mффritelty"
#: gui/launcher.cpp:365 gui/launcher.cpp:465 gui/launcher.cpp:575
-#: gui/options.cpp:1271 gui/options.cpp:1315 gui/options.cpp:1433
+#: gui/options.cpp:1269 gui/options.cpp:1313 gui/options.cpp:1431
#: backends/platform/wii/options.cpp:56
msgid "Default"
msgstr "Oletus"
-#: gui/launcher.cpp:510 gui/options.cpp:1436
+#: gui/launcher.cpp:510 gui/options.cpp:1434
msgid "Select SoundFont"
msgstr "Valitse ффnifontti"
@@ -359,7 +373,7 @@ msgstr "Valitse pelin kansio"
msgid "Select additional game directory"
msgstr "Valitse lisфkansio pelille"
-#: gui/launcher.cpp:559 gui/options.cpp:1379
+#: gui/launcher.cpp:559 gui/options.cpp:1377
msgid "Select directory for saved games"
msgstr "Valitse kansio pelitallennuksille"
@@ -561,6 +575,24 @@ msgstr ""
"%d uutta peliф lіytyi, jфtettiin %d peliф huomiotta, koska ne oli jo lisфtty "
"aiemmin."
+#: gui/onscreendialog.cpp:101 gui/onscreendialog.cpp:103
+msgid "Stop"
+msgstr ""
+
+#: gui/onscreendialog.cpp:106
+msgid "Edit record description"
+msgstr ""
+
+#: gui/onscreendialog.cpp:108
+#, fuzzy
+msgid "Switch to Game"
+msgstr "Vaihda"
+
+#: gui/onscreendialog.cpp:110
+#, fuzzy
+msgid "Fast replay"
+msgstr "Nopea moodi"
+
#: gui/options.cpp:85
msgid "Never"
msgstr "Ei koskaan"
@@ -601,8 +633,8 @@ msgstr "44 kHz"
msgid "48 kHz"
msgstr "48 kHz"
-#: gui/options.cpp:255 gui/options.cpp:481 gui/options.cpp:582
-#: gui/options.cpp:651 gui/options.cpp:859
+#: gui/options.cpp:255 gui/options.cpp:479 gui/options.cpp:580
+#: gui/options.cpp:649 gui/options.cpp:857
msgctxt "soundfont"
msgid "None"
msgstr "Ei kфytіssф"
@@ -623,72 +655,72 @@ msgstr "kokoruututilaa ei voitu muuttaa"
msgid "the aspect ratio setting could not be changed"
msgstr "kuvasuhdekorjausasetusta ei voitu muuttaa"
-#: gui/options.cpp:734
+#: gui/options.cpp:732
msgid "Graphics mode:"
msgstr "Grafiikkatila:"
-#: gui/options.cpp:748
+#: gui/options.cpp:746
msgid "Render mode:"
msgstr "Renderіintitila:"
-#: gui/options.cpp:748 gui/options.cpp:749
+#: gui/options.cpp:746 gui/options.cpp:747
msgid "Special dithering modes supported by some games"
msgstr "Erityiset dithering asetukset joita jotkut pelit tukevat"
-#: gui/options.cpp:760
+#: gui/options.cpp:758
#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2298
msgid "Fullscreen mode"
msgstr "Kokoruututila"
-#: gui/options.cpp:763
+#: gui/options.cpp:761
msgid "Aspect ratio correction"
msgstr "Kuvasuhteen korjaus"
-#: gui/options.cpp:763
+#: gui/options.cpp:761
msgid "Correct aspect ratio for 320x200 games"
msgstr "Oikea kuvasuhde 320x200 peleille"
-#: gui/options.cpp:771
+#: gui/options.cpp:769
msgid "Preferred Device:"
msgstr "Ensisijainen laite:"
-#: gui/options.cpp:771
+#: gui/options.cpp:769
msgid "Music Device:"
msgstr "Musiikkilaite:"
-#: gui/options.cpp:771 gui/options.cpp:773
+#: gui/options.cpp:769 gui/options.cpp:771
msgid "Specifies preferred sound device or sound card emulator"
msgstr ""
"Mффrittфф ффnilaitteen tai ффnikorttiemulaattorin jota ensisijaisesti tulisi "
"kфyttфф"
-#: gui/options.cpp:771 gui/options.cpp:773 gui/options.cpp:774
+#: gui/options.cpp:769 gui/options.cpp:771 gui/options.cpp:772
msgid "Specifies output sound device or sound card emulator"
msgstr "Mффrittфф ффnikortin tai ффnikorttia emuloivan ohjelmiston"
-#: gui/options.cpp:773
+#: gui/options.cpp:771
msgctxt "lowres"
msgid "Preferred Dev.:"
msgstr "Ensisijainen:"
-#: gui/options.cpp:773
+#: gui/options.cpp:771
msgctxt "lowres"
msgid "Music Device:"
msgstr "Musiikkilaite:"
-#: gui/options.cpp:800
+#: gui/options.cpp:798
msgid "AdLib emulator:"
msgstr "AdLib emulaattori:"
-#: gui/options.cpp:800 gui/options.cpp:801
+#: gui/options.cpp:798 gui/options.cpp:799
msgid "AdLib is used for music in many games"
msgstr "AdLibiф kфytetффn monien pelien musiikeissa"
-#: gui/options.cpp:811
+#: gui/options.cpp:809
msgid "Output rate:"
msgstr "Taajuus:"
-#: gui/options.cpp:811 gui/options.cpp:812
+#: gui/options.cpp:809 gui/options.cpp:810
msgid ""
"Higher value specifies better sound quality but may be not supported by your "
"soundcard"
@@ -696,65 +728,65 @@ msgstr ""
"Isommat taajuudet merkitsevфt parempaa ффnenlaatua, mutta ффnikorttisi ei "
"ehkф tue niitф."
-#: gui/options.cpp:822
+#: gui/options.cpp:820
msgid "GM Device:"
msgstr "GM laite:"
-#: gui/options.cpp:822
+#: gui/options.cpp:820
msgid "Specifies default sound device for General MIDI output"
msgstr "Mффrittфф oletuksena kфytettфvфn ффnilaitteen General MIDIlle"
-#: gui/options.cpp:833
+#: gui/options.cpp:831
msgid "Don't use General MIDI music"
msgstr "Фlф kфytф General MIDIф musiikissa"
-#: gui/options.cpp:844 gui/options.cpp:910
+#: gui/options.cpp:842 gui/options.cpp:908
msgid "Use first available device"
msgstr "Kфytф ensimmфistф laitetta"
-#: gui/options.cpp:856
+#: gui/options.cpp:854
msgid "SoundFont:"
msgstr "Ффnifontti:"
-#: gui/options.cpp:856 gui/options.cpp:858 gui/options.cpp:859
+#: gui/options.cpp:854 gui/options.cpp:856 gui/options.cpp:857
msgid "SoundFont is supported by some audio cards, FluidSynth and Timidity"
msgstr ""
"Jotkut ффnikortit tukevat ффnifonttia (SoundFont), FluidSynth ja Timidity"
-#: gui/options.cpp:858
+#: gui/options.cpp:856
msgctxt "lowres"
msgid "SoundFont:"
msgstr "Ффnifontti:"
-#: gui/options.cpp:864
+#: gui/options.cpp:862
msgid "Mixed AdLib/MIDI mode"
msgstr "Yhdistetty AdLib/MIDI tila"
-#: gui/options.cpp:864
+#: gui/options.cpp:862
msgid "Use both MIDI and AdLib sound generation"
msgstr "Kфytф sekф MIDIф ettф Adlibiф ффnentuotantoon"
-#: gui/options.cpp:867
+#: gui/options.cpp:865
msgid "MIDI gain:"
msgstr "MIDIn ффnilisфys:"
-#: gui/options.cpp:874
+#: gui/options.cpp:872
msgid "FluidSynth Settings"
msgstr ""
-#: gui/options.cpp:881
+#: gui/options.cpp:879
msgid "MT-32 Device:"
msgstr "MT-32 laite:"
-#: gui/options.cpp:881
+#: gui/options.cpp:879
msgid "Specifies default sound device for Roland MT-32/LAPC1/CM32l/CM64 output"
msgstr "Mффrittфф oletusффnilaitteen Roland MT-32/LAPC1/CM32l/CM64:n kфyttііn"
-#: gui/options.cpp:886
+#: gui/options.cpp:884
msgid "True Roland MT-32 (disable GM emulation)"
msgstr "Aito Roland MT-32 (ei GM emulointia)"
-#: gui/options.cpp:886 gui/options.cpp:888
+#: gui/options.cpp:884 gui/options.cpp:886
msgid ""
"Check if you want to use your real hardware Roland-compatible sound device "
"connected to your computer"
@@ -762,191 +794,191 @@ msgstr ""
"Valitse jos haluat kфyttфф aitoa Roland-yhteensopivaa laittetta joka on "
"kytketty tietokoneeseesi"
-#: gui/options.cpp:888
+#: gui/options.cpp:886
msgctxt "lowres"
msgid "True Roland MT-32 (no GM emulation)"
msgstr "Aito Roland MT-32 (ei GM emulointia)"
-#: gui/options.cpp:891
+#: gui/options.cpp:889
#, fuzzy
msgid "Roland GS Device (enable MT-32 mappings)"
msgstr "Aito Roland MT-32 (ei GM emulointia)"
-#: gui/options.cpp:891
+#: gui/options.cpp:889
msgid ""
"Check if you want to enable patch mappings to emulate an MT-32 on a Roland "
"GS device"
msgstr ""
-#: gui/options.cpp:900
+#: gui/options.cpp:898
msgid "Don't use Roland MT-32 music"
msgstr "Фlф kфytф Roland MT-32 musiikkia"
-#: gui/options.cpp:927
+#: gui/options.cpp:925
msgid "Text and Speech:"
msgstr "Tekstitys ja puhe:"
-#: gui/options.cpp:931 gui/options.cpp:941
+#: gui/options.cpp:929 gui/options.cpp:939
msgid "Speech"
msgstr "Puhe"
-#: gui/options.cpp:932 gui/options.cpp:942
+#: gui/options.cpp:930 gui/options.cpp:940
msgid "Subtitles"
msgstr "Tekstitys"
-#: gui/options.cpp:933
+#: gui/options.cpp:931
msgid "Both"
msgstr "Molemmat"
-#: gui/options.cpp:935
+#: gui/options.cpp:933
msgid "Subtitle speed:"
msgstr "Tekstin nopeus:"
-#: gui/options.cpp:937
+#: gui/options.cpp:935
msgctxt "lowres"
msgid "Text and Speech:"
msgstr "Tekstitys ja puhe:"
-#: gui/options.cpp:941
+#: gui/options.cpp:939
msgid "Spch"
msgstr "Puhe"
-#: gui/options.cpp:942
+#: gui/options.cpp:940
msgid "Subs"
msgstr "Tekstit"
-#: gui/options.cpp:943
+#: gui/options.cpp:941
msgctxt "lowres"
msgid "Both"
msgstr "Molemmat"
-#: gui/options.cpp:943
+#: gui/options.cpp:941
msgid "Show subtitles and play speech"
msgstr "Nфytф tekstitys ja kфytф puhetta"
-#: gui/options.cpp:945
+#: gui/options.cpp:943
msgctxt "lowres"
msgid "Subtitle speed:"
msgstr "Tekstin nopeus:"
-#: gui/options.cpp:961
+#: gui/options.cpp:959
msgid "Music volume:"
msgstr "Musiikki:"
-#: gui/options.cpp:963
+#: gui/options.cpp:961
msgctxt "lowres"
msgid "Music volume:"
msgstr "Musiikki:"
-#: gui/options.cpp:970
+#: gui/options.cpp:968
msgid "Mute All"
msgstr "Vaimenna"
-#: gui/options.cpp:973
+#: gui/options.cpp:971
msgid "SFX volume:"
msgstr "Ффniefektit:"
-#: gui/options.cpp:973 gui/options.cpp:975 gui/options.cpp:976
+#: gui/options.cpp:971 gui/options.cpp:973 gui/options.cpp:974
msgid "Special sound effects volume"
msgstr "Erikoisefektit"
-#: gui/options.cpp:975
+#: gui/options.cpp:973
msgctxt "lowres"
msgid "SFX volume:"
msgstr "Ффniefektit:"
-#: gui/options.cpp:983
+#: gui/options.cpp:981
msgid "Speech volume:"
msgstr "Puhe:"
-#: gui/options.cpp:985
+#: gui/options.cpp:983
msgctxt "lowres"
msgid "Speech volume:"
msgstr "Puhe:"
-#: gui/options.cpp:1142
+#: gui/options.cpp:1140
msgid "Theme Path:"
msgstr "Teemojen polku:"
-#: gui/options.cpp:1144
+#: gui/options.cpp:1142
msgctxt "lowres"
msgid "Theme Path:"
msgstr "Teemojen polku:"
-#: gui/options.cpp:1150 gui/options.cpp:1152 gui/options.cpp:1153
+#: gui/options.cpp:1148 gui/options.cpp:1150 gui/options.cpp:1151
msgid "Specifies path to additional data used by all games or ScummVM"
msgstr ""
"Mффrittфф polun, jossa on lisфtiedostoja joita ScummVM tai kaikki pelit "
"kфyttфvфt"
-#: gui/options.cpp:1159
+#: gui/options.cpp:1157
msgid "Plugins Path:"
msgstr "Pluginien sijainti:"
-#: gui/options.cpp:1161
+#: gui/options.cpp:1159
msgctxt "lowres"
msgid "Plugins Path:"
msgstr "Pluginien sijainti:"
-#: gui/options.cpp:1170 gui/fluidsynth-dialog.cpp:138
+#: gui/options.cpp:1168 gui/fluidsynth-dialog.cpp:138
msgid "Misc"
msgstr "Muut"
-#: gui/options.cpp:1172
+#: gui/options.cpp:1170
msgctxt "lowres"
msgid "Misc"
msgstr "Muut"
-#: gui/options.cpp:1174
+#: gui/options.cpp:1172
msgid "Theme:"
msgstr "Teema"
-#: gui/options.cpp:1178
+#: gui/options.cpp:1176
msgid "GUI Renderer:"
msgstr "GUI renderіijф:"
-#: gui/options.cpp:1190
+#: gui/options.cpp:1188
msgid "Autosave:"
msgstr "Autom. tallennus:"
-#: gui/options.cpp:1192
+#: gui/options.cpp:1190
msgctxt "lowres"
msgid "Autosave:"
msgstr "Autom. tallennus:"
-#: gui/options.cpp:1200
+#: gui/options.cpp:1198
msgid "Keys"
msgstr "Nфppфimet"
-#: gui/options.cpp:1207
+#: gui/options.cpp:1205
msgid "GUI Language:"
msgstr "ScummVM:n kieli:"
-#: gui/options.cpp:1207
+#: gui/options.cpp:1205
msgid "Language of ScummVM GUI"
msgstr "ScummVM kфyttіliittymфn kieli"
-#: gui/options.cpp:1366
+#: gui/options.cpp:1364
msgid "You have to restart ScummVM before your changes will take effect."
msgstr "ScummVM pitфф kфynnistфф uudelleen jotta muutokset tulevat voimaan."
-#: gui/options.cpp:1386
+#: gui/options.cpp:1384
msgid "The chosen directory cannot be written to. Please select another one."
msgstr "Valittuun hakemistoon ei voi kirjoittaa. Valitse toinen hakemisto."
-#: gui/options.cpp:1395
+#: gui/options.cpp:1393
msgid "Select directory for GUI themes"
msgstr "Valitse hakemisto kфyttіliittymфn teemoille"
-#: gui/options.cpp:1405
+#: gui/options.cpp:1403
msgid "Select directory for extra files"
msgstr "Valitse hakemisto lisфtiedostoille"
-#: gui/options.cpp:1416
+#: gui/options.cpp:1414
msgid "Select directory for plugins"
msgstr "Valitse hakemisto plugineille"
-#: gui/options.cpp:1469
+#: gui/options.cpp:1467
msgid ""
"The theme you selected does not support your current language. If you want "
"to use this theme you need to switch to another language first."
@@ -954,6 +986,29 @@ msgstr ""
"Valitsemasi teema ei tue nykyistф valitsemaasi kieltф. Vaihda kieli ensin, "
"ja yritф sitten uudelleen."
+#. I18N: You must leave "#" as is, only word 'next' is translatable
+#: gui/predictivedialog.cpp:87
+msgid "# next"
+msgstr ""
+
+#: gui/predictivedialog.cpp:88
+msgid "add"
+msgstr ""
+
+#: gui/predictivedialog.cpp:92
+#, fuzzy
+msgid "Delete char"
+msgstr "Poista"
+
+#: gui/predictivedialog.cpp:96
+msgid "<"
+msgstr ""
+
+#. I18N: Pre means 'Predictive', leave '*' as is
+#: gui/predictivedialog.cpp:98
+msgid "* Pre"
+msgstr ""
+
#: gui/recorderdialog.cpp:64
msgid "Recorder or Playback Gameplay"
msgstr ""
@@ -991,6 +1046,11 @@ msgstr ""
msgid "Do you really want to delete this record?"
msgstr "Haluatko varmasti poistaa tфmфn pelitallennuksen?"
+#: gui/recorderdialog.cpp:174
+#, fuzzy
+msgid "Unknown Author"
+msgstr "Tuntematon virhe"
+
#: gui/saveload-dialog.cpp:167
msgid "List view"
msgstr "Listanфkymф"
@@ -1443,14 +1503,18 @@ msgstr ""
msgid "Start anyway"
msgstr "Pelaa silti"
-#: audio/fmopl.cpp:50
+#: audio/fmopl.cpp:62
msgid "MAME OPL emulator"
msgstr "MAME OPL emulaattori"
-#: audio/fmopl.cpp:52
+#: audio/fmopl.cpp:64
msgid "DOSBox OPL emulator"
msgstr "DOSBox OPL emulaattori"
+#: audio/fmopl.cpp:67
+msgid "ALSA Direct FM"
+msgstr ""
+
#: audio/mididrv.cpp:209
#, c-format
msgid ""
@@ -1500,7 +1564,7 @@ msgstr "Ei musiikkia"
msgid "Amiga Audio Emulator"
msgstr "Amiga Audio emulaattori"
-#: audio/softsynth/adlib.cpp:2285
+#: audio/adlib.cpp:2291
msgid "AdLib Emulator"
msgstr "AdLib emulaattori"
@@ -2138,14 +2202,13 @@ msgstr "Klikkaus pois pффltф"
#: engines/agi/detection.cpp:147 engines/drascula/detection.cpp:302
#: engines/dreamweb/detection.cpp:47 engines/neverhood/detection.cpp:160
#: engines/sci/detection.cpp:394 engines/toltecs/detection.cpp:200
-#: engines/zvision/detection.cpp:246
+#: engines/zvision/detection_tables.h:51
msgid "Use original save/load screens"
msgstr "Kфytф alkuperфisiф tallenna/lataa valikkoja"
#: engines/agi/detection.cpp:148 engines/drascula/detection.cpp:303
#: engines/dreamweb/detection.cpp:48 engines/neverhood/detection.cpp:161
#: engines/sci/detection.cpp:395 engines/toltecs/detection.cpp:201
-#: engines/zvision/detection.cpp:247
msgid "Use the original save/load screens, instead of the ScummVM ones"
msgstr "Kфytф alkuperфisiф tallenna/lataa valikkoja, ScummVM valikoiden sijaan"
@@ -3277,6 +3340,25 @@ msgstr "Lennф oikealle"
msgid "Fly to lower right"
msgstr "Lennф alas oikealle"
+#: engines/scumm/input.cpp:572
+#, fuzzy
+msgid "Snap scroll on"
+msgstr "Pehmeф vieritys"
+
+#: engines/scumm/input.cpp:574
+msgid "Snap scroll off"
+msgstr ""
+
+#: engines/scumm/input.cpp:587
+#, fuzzy
+msgid "Music volume: "
+msgstr "Musiikki:"
+
+#: engines/scumm/input.cpp:604
+#, fuzzy
+msgid "Subtitle speed: "
+msgstr "Tekstin nopeus:"
+
#: engines/scumm/scumm.cpp:1832
#, c-format
msgid ""
@@ -3428,39 +3510,44 @@ msgstr ""
msgid "Show the current number of frames per second in the upper left corner"
msgstr ""
-#: engines/zvision/detection.cpp:256
+#: engines/zvision/detection_tables.h:52
+#, fuzzy
+msgid "Use the original save/load screens instead of the ScummVM interface"
+msgstr "Kфytф alkuperфisiф tallenna/lataa valikkoja, ScummVM valikoiden sijaan"
+
+#: engines/zvision/detection_tables.h:61
msgid "Double FPS"
msgstr ""
-#: engines/zvision/detection.cpp:257
-msgid "Increase game FPS from 30 to 60"
+#: engines/zvision/detection_tables.h:62
+msgid "Increase framerate from 30 to 60 FPS"
msgstr ""
-#: engines/zvision/detection.cpp:266
+#: engines/zvision/detection_tables.h:71
#, fuzzy
msgid "Enable Venus"
msgstr "Kфytф helium moodia"
-#: engines/zvision/detection.cpp:267
+#: engines/zvision/detection_tables.h:72
+#, fuzzy
msgid "Enable the Venus help system"
-msgstr ""
+msgstr "Kфytф helium moodia"
-#: engines/zvision/detection.cpp:276
+#: engines/zvision/detection_tables.h:81
msgid "Disable animation while turning"
msgstr ""
-#: engines/zvision/detection.cpp:277
-msgid "Disable animation while turning in panoramic mode"
+#: engines/zvision/detection_tables.h:82
+msgid "Disable animation while turning in panorama mode"
msgstr ""
-#: engines/zvision/detection.cpp:286
-msgid "Use the hires MPEG movies"
+#: engines/zvision/detection_tables.h:91
+msgid "Use high resolution MPEG video"
msgstr ""
-#: engines/zvision/detection.cpp:287
+#: engines/zvision/detection_tables.h:92
#, fuzzy
-msgid ""
-"Use the hires MPEG movies of the DVD version, instead of the lowres AVI ones"
+msgid "Use MPEG video from the DVD version, instead of lower resolution AVI"
msgstr "Kфytф vaihtoehtoisia hopeisia kursoreita normaalien kultaisten sijaan"
#~ msgid "EGA undithering"
diff --git a/po/fr_FR.po b/po/fr_FR.po
index 2627e1e54f..c6b785c794 100644
--- a/po/fr_FR.po
+++ b/po/fr_FR.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ScummVM 1.3.0svn\n"
"Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n"
-"POT-Creation-Date: 2015-06-30 20:57+0100\n"
+"POT-Creation-Date: 2015-10-11 18:59+0100\n"
"PO-Revision-Date: 2014-07-05 13:49-0000\n"
"Last-Translator: Thierry Crozat <criezy@scummvm.org>\n"
"Language-Team: French <scummvm-devel@lists.sf.net>\n"
@@ -31,7 +31,7 @@ msgstr "Options incluses:"
msgid "Available engines:"
msgstr "Moteurs disponibles:"
-#: gui/browser.cpp:68
+#: gui/browser.cpp:68 gui/browser_osx.mm:104
msgid "Show hidden files"
msgstr "Afficher les fichiers cachщs"
@@ -52,13 +52,14 @@ msgctxt "lowres"
msgid "Go up"
msgstr "Remonter"
-#: gui/browser.cpp:75 gui/chooser.cpp:46 gui/KeysDialog.cpp:43
-#: gui/launcher.cpp:351 gui/massadd.cpp:95 gui/options.cpp:1239
-#: gui/recorderdialog.cpp:70 gui/recorderdialog.cpp:156
-#: gui/saveload-dialog.cpp:216 gui/saveload-dialog.cpp:276
-#: gui/saveload-dialog.cpp:547 gui/saveload-dialog.cpp:931
-#: gui/themebrowser.cpp:55 gui/fluidsynth-dialog.cpp:152
-#: engines/engine.cpp:483 backends/platform/wii/options.cpp:48
+#: gui/browser.cpp:75 gui/chooser.cpp:46 gui/editrecorddialog.cpp:67
+#: gui/KeysDialog.cpp:43 gui/launcher.cpp:351 gui/massadd.cpp:95
+#: gui/options.cpp:1237 gui/predictivedialog.cpp:74 gui/recorderdialog.cpp:70
+#: gui/recorderdialog.cpp:156 gui/saveload-dialog.cpp:216
+#: gui/saveload-dialog.cpp:276 gui/saveload-dialog.cpp:547
+#: gui/saveload-dialog.cpp:931 gui/themebrowser.cpp:55
+#: gui/fluidsynth-dialog.cpp:152 engines/engine.cpp:483
+#: backends/platform/wii/options.cpp:48
#: backends/events/default/default-events.cpp:196
#: backends/events/default/default-events.cpp:218
#: engines/drascula/saveload.cpp:49 engines/parallaction/saveload.cpp:274
@@ -66,10 +67,27 @@ msgstr "Remonter"
msgid "Cancel"
msgstr "Annuler"
-#: gui/browser.cpp:76 gui/chooser.cpp:47 gui/themebrowser.cpp:56
+#: gui/browser.cpp:76 gui/browser_osx.mm:103 gui/chooser.cpp:47
+#: gui/themebrowser.cpp:56
msgid "Choose"
msgstr "Choisir"
+#: gui/editrecorddialog.cpp:58
+msgid "Author:"
+msgstr ""
+
+#: gui/editrecorddialog.cpp:59 gui/launcher.cpp:204
+msgid "Name:"
+msgstr "Nom:"
+
+#: gui/editrecorddialog.cpp:60
+msgid "Notes:"
+msgstr ""
+
+#: gui/editrecorddialog.cpp:68 gui/predictivedialog.cpp:75
+msgid "Ok"
+msgstr ""
+
#: gui/gui-manager.cpp:117 backends/keymapper/remap-dialog.cpp:53
#: engines/scumm/help.cpp:126 engines/scumm/help.cpp:141
#: engines/scumm/help.cpp:166 engines/scumm/help.cpp:192
@@ -102,7 +120,7 @@ msgid "Map"
msgstr "Affecter"
#: gui/KeysDialog.cpp:42 gui/launcher.cpp:352 gui/launcher.cpp:1048
-#: gui/launcher.cpp:1052 gui/massadd.cpp:92 gui/options.cpp:1240
+#: gui/launcher.cpp:1052 gui/massadd.cpp:92 gui/options.cpp:1238
#: gui/saveload-dialog.cpp:932 gui/fluidsynth-dialog.cpp:153
#: engines/engine.cpp:402 engines/engine.cpp:413
#: backends/platform/wii/options.cpp:47
@@ -164,10 +182,6 @@ msgctxt "lowres"
msgid "ID:"
msgstr "ID:"
-#: gui/launcher.cpp:204
-msgid "Name:"
-msgstr "Nom:"
-
#: gui/launcher.cpp:204 gui/launcher.cpp:206 gui/launcher.cpp:207
msgid "Full title of the game"
msgstr "Nom complet du jeu"
@@ -190,7 +204,7 @@ msgstr ""
"espagnole du jeu."
#: gui/launcher.cpp:212 gui/launcher.cpp:226 gui/options.cpp:87
-#: gui/options.cpp:737 gui/options.cpp:750 gui/options.cpp:1210
+#: gui/options.cpp:735 gui/options.cpp:748 gui/options.cpp:1208
#: audio/null.cpp:41
msgid "<default>"
msgstr "<defaut>"
@@ -212,11 +226,11 @@ msgstr "Systшme:"
msgid "Engine"
msgstr "Moteur"
-#: gui/launcher.cpp:245 gui/options.cpp:1073 gui/options.cpp:1090
+#: gui/launcher.cpp:245 gui/options.cpp:1071 gui/options.cpp:1088
msgid "Graphics"
msgstr "Graphique"
-#: gui/launcher.cpp:245 gui/options.cpp:1073 gui/options.cpp:1090
+#: gui/launcher.cpp:245 gui/options.cpp:1071 gui/options.cpp:1088
msgid "GFX"
msgstr "GFX"
@@ -229,7 +243,7 @@ msgctxt "lowres"
msgid "Override global graphic settings"
msgstr "Rщglages spщcifiques р ce jeux"
-#: gui/launcher.cpp:257 gui/options.cpp:1096
+#: gui/launcher.cpp:257 gui/options.cpp:1094
msgid "Audio"
msgstr "Audio"
@@ -242,11 +256,11 @@ msgctxt "lowres"
msgid "Override global audio settings"
msgstr "Rщglages spщcifiques р ce jeux"
-#: gui/launcher.cpp:271 gui/options.cpp:1101
+#: gui/launcher.cpp:271 gui/options.cpp:1099
msgid "Volume"
msgstr "Volume"
-#: gui/launcher.cpp:273 gui/options.cpp:1103
+#: gui/launcher.cpp:273 gui/options.cpp:1101
msgctxt "lowres"
msgid "Volume"
msgstr "Volume"
@@ -260,7 +274,7 @@ msgctxt "lowres"
msgid "Override global volume settings"
msgstr "Rщglages spщcifiques р ce jeux"
-#: gui/launcher.cpp:286 gui/options.cpp:1111
+#: gui/launcher.cpp:286 gui/options.cpp:1109
msgid "MIDI"
msgstr "MIDI"
@@ -273,7 +287,7 @@ msgctxt "lowres"
msgid "Override global MIDI settings"
msgstr "Rщglages spщcifiques р ce jeux"
-#: gui/launcher.cpp:300 gui/options.cpp:1117
+#: gui/launcher.cpp:300 gui/options.cpp:1115
msgid "MT-32"
msgstr "MT-32"
@@ -286,11 +300,11 @@ msgctxt "lowres"
msgid "Override global MT-32 settings"
msgstr "Rщglages spщcifiques р ce jeux"
-#: gui/launcher.cpp:314 gui/options.cpp:1124
+#: gui/launcher.cpp:314 gui/options.cpp:1122
msgid "Paths"
msgstr "Chemins"
-#: gui/launcher.cpp:316 gui/options.cpp:1126
+#: gui/launcher.cpp:316 gui/options.cpp:1124
msgctxt "lowres"
msgid "Paths"
msgstr "Chemins"
@@ -304,7 +318,7 @@ msgctxt "lowres"
msgid "Game Path:"
msgstr "Chemin du Jeu:"
-#: gui/launcher.cpp:330 gui/options.cpp:1150
+#: gui/launcher.cpp:330 gui/options.cpp:1148
msgid "Extra Path:"
msgstr "Extra:"
@@ -312,42 +326,42 @@ msgstr "Extra:"
msgid "Specifies path to additional data used by the game"
msgstr "Dщfinie un chemin vers des donnщes suplщmentaires utilisщes par le jeu"
-#: gui/launcher.cpp:332 gui/options.cpp:1152
+#: gui/launcher.cpp:332 gui/options.cpp:1150
msgctxt "lowres"
msgid "Extra Path:"
msgstr "Extra:"
-#: gui/launcher.cpp:339 gui/options.cpp:1134
+#: gui/launcher.cpp:339 gui/options.cpp:1132
msgid "Save Path:"
msgstr "Sauvegardes:"
#: gui/launcher.cpp:339 gui/launcher.cpp:341 gui/launcher.cpp:342
-#: gui/options.cpp:1134 gui/options.cpp:1136 gui/options.cpp:1137
+#: gui/options.cpp:1132 gui/options.cpp:1134 gui/options.cpp:1135
msgid "Specifies where your saved games are put"
msgstr "Dщfinie l'emplacement oљ les fichiers de sauvegarde sont crщщs"
-#: gui/launcher.cpp:341 gui/options.cpp:1136
+#: gui/launcher.cpp:341 gui/options.cpp:1134
msgctxt "lowres"
msgid "Save Path:"
msgstr "Sauvegardes:"
#: gui/launcher.cpp:360 gui/launcher.cpp:459 gui/launcher.cpp:517
-#: gui/launcher.cpp:571 gui/options.cpp:1145 gui/options.cpp:1153
-#: gui/options.cpp:1162 gui/options.cpp:1277 gui/options.cpp:1283
-#: gui/options.cpp:1291 gui/options.cpp:1321 gui/options.cpp:1327
-#: gui/options.cpp:1334 gui/options.cpp:1427 gui/options.cpp:1430
-#: gui/options.cpp:1442
+#: gui/launcher.cpp:571 gui/options.cpp:1143 gui/options.cpp:1151
+#: gui/options.cpp:1160 gui/options.cpp:1275 gui/options.cpp:1281
+#: gui/options.cpp:1289 gui/options.cpp:1319 gui/options.cpp:1325
+#: gui/options.cpp:1332 gui/options.cpp:1425 gui/options.cpp:1428
+#: gui/options.cpp:1440
msgctxt "path"
msgid "None"
msgstr "Aucun"
#: gui/launcher.cpp:365 gui/launcher.cpp:465 gui/launcher.cpp:575
-#: gui/options.cpp:1271 gui/options.cpp:1315 gui/options.cpp:1433
+#: gui/options.cpp:1269 gui/options.cpp:1313 gui/options.cpp:1431
#: backends/platform/wii/options.cpp:56
msgid "Default"
msgstr "Dщfaut"
-#: gui/launcher.cpp:510 gui/options.cpp:1436
+#: gui/launcher.cpp:510 gui/options.cpp:1434
msgid "Select SoundFont"
msgstr "Choisir une banque de sons"
@@ -359,7 +373,7 @@ msgstr "Sщlectionner le rщpertoire contenant les donnщes du jeu"
msgid "Select additional game directory"
msgstr "Sщlectionner un rщpertoire supplщmentaire"
-#: gui/launcher.cpp:559 gui/options.cpp:1379
+#: gui/launcher.cpp:559 gui/options.cpp:1377
msgid "Select directory for saved games"
msgstr "Sщlectionner le rщpertoire pour les sauvegardes"
@@ -559,6 +573,24 @@ msgid "Discovered %d new games, ignored %d previously added games ..."
msgstr ""
"%d nouveaux jeux trouvщs, %d jeux ignorщs (dщjр ajoutщ prщcщdemment) ..."
+#: gui/onscreendialog.cpp:101 gui/onscreendialog.cpp:103
+msgid "Stop"
+msgstr ""
+
+#: gui/onscreendialog.cpp:106
+msgid "Edit record description"
+msgstr ""
+
+#: gui/onscreendialog.cpp:108
+#, fuzzy
+msgid "Switch to Game"
+msgstr "Commuter"
+
+#: gui/onscreendialog.cpp:110
+#, fuzzy
+msgid "Fast replay"
+msgstr "Mode rapide"
+
#: gui/options.cpp:85
msgid "Never"
msgstr "Jamais"
@@ -599,8 +631,8 @@ msgstr "44 kHz"
msgid "48 kHz"
msgstr "48 kHz"
-#: gui/options.cpp:255 gui/options.cpp:481 gui/options.cpp:582
-#: gui/options.cpp:651 gui/options.cpp:859
+#: gui/options.cpp:255 gui/options.cpp:479 gui/options.cpp:580
+#: gui/options.cpp:649 gui/options.cpp:857
msgctxt "soundfont"
msgid "None"
msgstr "Aucune"
@@ -621,72 +653,72 @@ msgstr "le mode plein щcran n'a pu ъtre changщ."
msgid "the aspect ratio setting could not be changed"
msgstr "la correction de rapport d'aspect n'a pu ъtre changщe."
-#: gui/options.cpp:734
+#: gui/options.cpp:732
msgid "Graphics mode:"
msgstr "Mode graphique:"
-#: gui/options.cpp:748
+#: gui/options.cpp:746
msgid "Render mode:"
msgstr "Mode de rendu:"
-#: gui/options.cpp:748 gui/options.cpp:749
+#: gui/options.cpp:746 gui/options.cpp:747
msgid "Special dithering modes supported by some games"
msgstr "Mode spщcial de tramage supportщ par certains jeux"
-#: gui/options.cpp:760
+#: gui/options.cpp:758
#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2298
msgid "Fullscreen mode"
msgstr "Plein щcran"
-#: gui/options.cpp:763
+#: gui/options.cpp:761
msgid "Aspect ratio correction"
msgstr "Correction du rapport d'aspect"
-#: gui/options.cpp:763
+#: gui/options.cpp:761
msgid "Correct aspect ratio for 320x200 games"
msgstr "Corrige le rapport d'aspect pour les jeu 320x200"
-#: gui/options.cpp:771
+#: gui/options.cpp:769
msgid "Preferred Device:"
msgstr "Sortie Prщfщrщ:"
-#: gui/options.cpp:771
+#: gui/options.cpp:769
msgid "Music Device:"
msgstr "Sortie Audio:"
-#: gui/options.cpp:771 gui/options.cpp:773
+#: gui/options.cpp:769 gui/options.cpp:771
msgid "Specifies preferred sound device or sound card emulator"
msgstr ""
"Spщcifie le pщriphщrique de sortie audio ou l'щmulateur de carte audio "
"prщfщrщ"
-#: gui/options.cpp:771 gui/options.cpp:773 gui/options.cpp:774
+#: gui/options.cpp:769 gui/options.cpp:771 gui/options.cpp:772
msgid "Specifies output sound device or sound card emulator"
msgstr "Spщcifie le pщriphщrique de sortie audio ou l'щmulateur de carte audio"
-#: gui/options.cpp:773
+#: gui/options.cpp:771
msgctxt "lowres"
msgid "Preferred Dev.:"
msgstr "Sortie Prщfщrщ:"
-#: gui/options.cpp:773
+#: gui/options.cpp:771
msgctxt "lowres"
msgid "Music Device:"
msgstr "Sortie Audio:"
-#: gui/options.cpp:800
+#: gui/options.cpp:798
msgid "AdLib emulator:"
msgstr "Щmulateur AdLib:"
-#: gui/options.cpp:800 gui/options.cpp:801
+#: gui/options.cpp:798 gui/options.cpp:799
msgid "AdLib is used for music in many games"
msgstr "AdLib est utilisщ pour la musique dans de nombreux jeux"
-#: gui/options.cpp:811
+#: gui/options.cpp:809
msgid "Output rate:"
msgstr "Frщquence:"
-#: gui/options.cpp:811 gui/options.cpp:812
+#: gui/options.cpp:809 gui/options.cpp:810
msgid ""
"Higher value specifies better sound quality but may be not supported by your "
"soundcard"
@@ -694,68 +726,68 @@ msgstr ""
"Une valeur plus щlevщe donne une meilleure qualitщ audio mais peut ne pas "
"ъtre supportщ par votre carte son"
-#: gui/options.cpp:822
+#: gui/options.cpp:820
msgid "GM Device:"
msgstr "Sortie GM:"
-#: gui/options.cpp:822
+#: gui/options.cpp:820
msgid "Specifies default sound device for General MIDI output"
msgstr "Spщcifie le pщriphщrique audio par dщfaut pour la sortie General MIDI"
-#: gui/options.cpp:833
+#: gui/options.cpp:831
msgid "Don't use General MIDI music"
msgstr "Ne pas utiliser la musique General MIDI"
-#: gui/options.cpp:844 gui/options.cpp:910
+#: gui/options.cpp:842 gui/options.cpp:908
msgid "Use first available device"
msgstr "Utiliser le premier pщriphщrique disponible"
-#: gui/options.cpp:856
+#: gui/options.cpp:854
msgid "SoundFont:"
msgstr "Banque de sons:"
-#: gui/options.cpp:856 gui/options.cpp:858 gui/options.cpp:859
+#: gui/options.cpp:854 gui/options.cpp:856 gui/options.cpp:857
msgid "SoundFont is supported by some audio cards, FluidSynth and Timidity"
msgstr ""
"La banque de sons (SoundFont) est utilisщe par certaines cartes audio, "
"FluidSynth et Timidity"
-#: gui/options.cpp:858
+#: gui/options.cpp:856
msgctxt "lowres"
msgid "SoundFont:"
msgstr "SoundFont:"
-#: gui/options.cpp:864
+#: gui/options.cpp:862
msgid "Mixed AdLib/MIDI mode"
msgstr "Mode mixe AdLib/MIDI"
-#: gui/options.cpp:864
+#: gui/options.cpp:862
msgid "Use both MIDI and AdLib sound generation"
msgstr "Utiliser р la fois MIDI et AdLib"
-#: gui/options.cpp:867
+#: gui/options.cpp:865
msgid "MIDI gain:"
msgstr "Gain MIDI:"
-#: gui/options.cpp:874
+#: gui/options.cpp:872
msgid "FluidSynth Settings"
msgstr "Paramшtres FluidSynth"
-#: gui/options.cpp:881
+#: gui/options.cpp:879
msgid "MT-32 Device:"
msgstr "Sortie MT-32:"
-#: gui/options.cpp:881
+#: gui/options.cpp:879
msgid "Specifies default sound device for Roland MT-32/LAPC1/CM32l/CM64 output"
msgstr ""
"Spщcifie le pщriphщrique audio par dщfaut pour la sortie Roland MT-32/LAPC1/"
"CM32l/CM64"
-#: gui/options.cpp:886
+#: gui/options.cpp:884
msgid "True Roland MT-32 (disable GM emulation)"
msgstr "Roland MT-32 exacte (dщsactive l'щmulation GM)"
-#: gui/options.cpp:886 gui/options.cpp:888
+#: gui/options.cpp:884 gui/options.cpp:886
msgid ""
"Check if you want to use your real hardware Roland-compatible sound device "
"connected to your computer"
@@ -763,16 +795,16 @@ msgstr ""
"Vщrifie si vous voulez utiliser un pщriphщrique audio compatible Roland "
"connectщ р l'ordinateur"
-#: gui/options.cpp:888
+#: gui/options.cpp:886
msgctxt "lowres"
msgid "True Roland MT-32 (no GM emulation)"
msgstr "Roland MT-32 exacte (pas d'щmu GM)"
-#: gui/options.cpp:891
+#: gui/options.cpp:889
msgid "Roland GS Device (enable MT-32 mappings)"
msgstr "Roland GS (active le mappage MT-32)"
-#: gui/options.cpp:891
+#: gui/options.cpp:889
msgid ""
"Check if you want to enable patch mappings to emulate an MT-32 on a Roland "
"GS device"
@@ -780,178 +812,178 @@ msgstr ""
"Utilisez cette option si vous voulez activez le mappage р la volщe pour une "
"щmulation MT-32 sur un appareil Roland GS."
-#: gui/options.cpp:900
+#: gui/options.cpp:898
msgid "Don't use Roland MT-32 music"
msgstr "Ne pas utiliser la musique Roland MT-32"
-#: gui/options.cpp:927
+#: gui/options.cpp:925
msgid "Text and Speech:"
msgstr "Dialogue:"
-#: gui/options.cpp:931 gui/options.cpp:941
+#: gui/options.cpp:929 gui/options.cpp:939
msgid "Speech"
msgstr "Voix"
-#: gui/options.cpp:932 gui/options.cpp:942
+#: gui/options.cpp:930 gui/options.cpp:940
msgid "Subtitles"
msgstr "Sous-titres"
-#: gui/options.cpp:933
+#: gui/options.cpp:931
msgid "Both"
msgstr "Les deux"
-#: gui/options.cpp:935
+#: gui/options.cpp:933
msgid "Subtitle speed:"
msgstr "Vitesse des ST:"
-#: gui/options.cpp:937
+#: gui/options.cpp:935
msgctxt "lowres"
msgid "Text and Speech:"
msgstr "Dialogue:"
-#: gui/options.cpp:941
+#: gui/options.cpp:939
msgid "Spch"
msgstr "Voix"
-#: gui/options.cpp:942
+#: gui/options.cpp:940
msgid "Subs"
msgstr "Subs"
-#: gui/options.cpp:943
+#: gui/options.cpp:941
msgctxt "lowres"
msgid "Both"
msgstr "V&S"
-#: gui/options.cpp:943
+#: gui/options.cpp:941
msgid "Show subtitles and play speech"
msgstr "Affiche les sous-titres et joue les dialogues audio"
-#: gui/options.cpp:945
+#: gui/options.cpp:943
msgctxt "lowres"
msgid "Subtitle speed:"
msgstr "Vitesse des ST:"
-#: gui/options.cpp:961
+#: gui/options.cpp:959
msgid "Music volume:"
msgstr "Volume Musique:"
-#: gui/options.cpp:963
+#: gui/options.cpp:961
msgctxt "lowres"
msgid "Music volume:"
msgstr "Musique:"
-#: gui/options.cpp:970
+#: gui/options.cpp:968
msgid "Mute All"
msgstr "Silence"
-#: gui/options.cpp:973
+#: gui/options.cpp:971
msgid "SFX volume:"
msgstr "Volume Bruitage:"
-#: gui/options.cpp:973 gui/options.cpp:975 gui/options.cpp:976
+#: gui/options.cpp:971 gui/options.cpp:973 gui/options.cpp:974
msgid "Special sound effects volume"
msgstr "Volume des effets spщciaux sonores"
-#: gui/options.cpp:975
+#: gui/options.cpp:973
msgctxt "lowres"
msgid "SFX volume:"
msgstr "Bruitage:"
-#: gui/options.cpp:983
+#: gui/options.cpp:981
msgid "Speech volume:"
msgstr "Volume Dialogues:"
-#: gui/options.cpp:985
+#: gui/options.cpp:983
msgctxt "lowres"
msgid "Speech volume:"
msgstr "Dialogues:"
-#: gui/options.cpp:1142
+#: gui/options.cpp:1140
msgid "Theme Path:"
msgstr "Thшmes:"
-#: gui/options.cpp:1144
+#: gui/options.cpp:1142
msgctxt "lowres"
msgid "Theme Path:"
msgstr "Thшmes:"
-#: gui/options.cpp:1150 gui/options.cpp:1152 gui/options.cpp:1153
+#: gui/options.cpp:1148 gui/options.cpp:1150 gui/options.cpp:1151
msgid "Specifies path to additional data used by all games or ScummVM"
msgstr ""
"Spщcifie un chemin vers des donnщes supplщmentaires utilisщes par tous les "
"jeux ou ScummVM"
-#: gui/options.cpp:1159
+#: gui/options.cpp:1157
msgid "Plugins Path:"
msgstr "Plugins:"
-#: gui/options.cpp:1161
+#: gui/options.cpp:1159
msgctxt "lowres"
msgid "Plugins Path:"
msgstr "Plugins:"
-#: gui/options.cpp:1170 gui/fluidsynth-dialog.cpp:138
+#: gui/options.cpp:1168 gui/fluidsynth-dialog.cpp:138
msgid "Misc"
msgstr "Divers"
-#: gui/options.cpp:1172
+#: gui/options.cpp:1170
msgctxt "lowres"
msgid "Misc"
msgstr "Divers"
-#: gui/options.cpp:1174
+#: gui/options.cpp:1172
msgid "Theme:"
msgstr "Thшme:"
-#: gui/options.cpp:1178
+#: gui/options.cpp:1176
msgid "GUI Renderer:"
msgstr "Interface:"
-#: gui/options.cpp:1190
+#: gui/options.cpp:1188
msgid "Autosave:"
msgstr "Sauvegarde auto:"
-#: gui/options.cpp:1192
+#: gui/options.cpp:1190
msgctxt "lowres"
msgid "Autosave:"
msgstr "Sauvegarde:"
-#: gui/options.cpp:1200
+#: gui/options.cpp:1198
msgid "Keys"
msgstr "Touches"
-#: gui/options.cpp:1207
+#: gui/options.cpp:1205
msgid "GUI Language:"
msgstr "Langue:"
-#: gui/options.cpp:1207
+#: gui/options.cpp:1205
msgid "Language of ScummVM GUI"
msgstr "Langue de l'interface graphique de ScummVM"
-#: gui/options.cpp:1366
+#: gui/options.cpp:1364
msgid "You have to restart ScummVM before your changes will take effect."
msgstr ""
"Vous devez relancer ScummVM pour que le changement soit pris en compte."
-#: gui/options.cpp:1386
+#: gui/options.cpp:1384
msgid "The chosen directory cannot be written to. Please select another one."
msgstr ""
"Le rщpertoire sщlectionnщ est vщrouillщ en щcriture. Sщlectionnez un autre "
"rщpertoire."
-#: gui/options.cpp:1395
+#: gui/options.cpp:1393
msgid "Select directory for GUI themes"
msgstr "Sщlectionner le rщpertoire des thшmes d'interface"
-#: gui/options.cpp:1405
+#: gui/options.cpp:1403
msgid "Select directory for extra files"
msgstr "Sщlectionner le rщpertoire pour les fichiers suplщmentaires"
-#: gui/options.cpp:1416
+#: gui/options.cpp:1414
msgid "Select directory for plugins"
msgstr "Sщlectionner le rщpertoire des plugins"
-#: gui/options.cpp:1469
+#: gui/options.cpp:1467
msgid ""
"The theme you selected does not support your current language. If you want "
"to use this theme you need to switch to another language first."
@@ -959,6 +991,29 @@ msgstr ""
"Le thшme que vous avez sщlectionщ ne support pas la langue franчaise. Si "
"vous voulez l'utiliser vous devez d'abord changer de langue."
+#. I18N: You must leave "#" as is, only word 'next' is translatable
+#: gui/predictivedialog.cpp:87
+msgid "# next"
+msgstr ""
+
+#: gui/predictivedialog.cpp:88
+msgid "add"
+msgstr ""
+
+#: gui/predictivedialog.cpp:92
+#, fuzzy
+msgid "Delete char"
+msgstr "Supprimer"
+
+#: gui/predictivedialog.cpp:96
+msgid "<"
+msgstr ""
+
+#. I18N: Pre means 'Predictive', leave '*' as is
+#: gui/predictivedialog.cpp:98
+msgid "* Pre"
+msgstr ""
+
#: gui/recorderdialog.cpp:64
msgid "Recorder or Playback Gameplay"
msgstr ""
@@ -996,6 +1051,11 @@ msgstr ""
msgid "Do you really want to delete this record?"
msgstr "Voulez-vous vraiment supprimer cette sauvegarde ?"
+#: gui/recorderdialog.cpp:174
+#, fuzzy
+msgid "Unknown Author"
+msgstr "Erreur inconnue"
+
#: gui/saveload-dialog.cpp:167
msgid "List view"
msgstr "Vue en liste"
@@ -1445,14 +1505,18 @@ msgstr ""
msgid "Start anyway"
msgstr "Jouer quand mъme"
-#: audio/fmopl.cpp:50
+#: audio/fmopl.cpp:62
msgid "MAME OPL emulator"
msgstr "Щmulateur MAME OPL"
-#: audio/fmopl.cpp:52
+#: audio/fmopl.cpp:64
msgid "DOSBox OPL emulator"
msgstr "Щmulateur DOSBox OPL"
+#: audio/fmopl.cpp:67
+msgid "ALSA Direct FM"
+msgstr ""
+
#: audio/mididrv.cpp:209
#, c-format
msgid ""
@@ -1502,7 +1566,7 @@ msgstr "Pas de musique"
msgid "Amiga Audio Emulator"
msgstr "Щmulateur Amiga Audio"
-#: audio/softsynth/adlib.cpp:2285
+#: audio/adlib.cpp:2291
msgid "AdLib Emulator"
msgstr "Щmulateur AdLib"
@@ -2136,14 +2200,13 @@ msgstr "Clic Dщsactivщ"
#: engines/agi/detection.cpp:147 engines/drascula/detection.cpp:302
#: engines/dreamweb/detection.cpp:47 engines/neverhood/detection.cpp:160
#: engines/sci/detection.cpp:394 engines/toltecs/detection.cpp:200
-#: engines/zvision/detection.cpp:246
+#: engines/zvision/detection_tables.h:51
msgid "Use original save/load screens"
msgstr "Dialogues sauvegarde/chargement d'origine"
#: engines/agi/detection.cpp:148 engines/drascula/detection.cpp:303
#: engines/dreamweb/detection.cpp:48 engines/neverhood/detection.cpp:161
#: engines/sci/detection.cpp:395 engines/toltecs/detection.cpp:201
-#: engines/zvision/detection.cpp:247
msgid "Use the original save/load screens, instead of the ScummVM ones"
msgstr ""
"Utiliser les dialogues sauvegarde/chargement d'origine plutєt que ceux de "
@@ -3285,6 +3348,25 @@ msgstr "Voler vers la droite"
msgid "Fly to lower right"
msgstr "Voler vers la bas р droite"
+#: engines/scumm/input.cpp:572
+#, fuzzy
+msgid "Snap scroll on"
+msgstr "Dщfilement rщgulier"
+
+#: engines/scumm/input.cpp:574
+msgid "Snap scroll off"
+msgstr ""
+
+#: engines/scumm/input.cpp:587
+#, fuzzy
+msgid "Music volume: "
+msgstr "Volume Musique:"
+
+#: engines/scumm/input.cpp:604
+#, fuzzy
+msgid "Subtitle speed: "
+msgstr "Vitesse des ST:"
+
#: engines/scumm/scumm.cpp:1832
#, c-format
msgid ""
@@ -3443,39 +3525,46 @@ msgstr ""
msgid "Show the current number of frames per second in the upper left corner"
msgstr ""
-#: engines/zvision/detection.cpp:256
+#: engines/zvision/detection_tables.h:52
+#, fuzzy
+msgid "Use the original save/load screens instead of the ScummVM interface"
+msgstr ""
+"Utiliser les dialogues sauvegarde/chargement d'origine plutєt que ceux de "
+"ScummVM"
+
+#: engines/zvision/detection_tables.h:61
msgid "Double FPS"
msgstr ""
-#: engines/zvision/detection.cpp:257
-msgid "Increase game FPS from 30 to 60"
+#: engines/zvision/detection_tables.h:62
+msgid "Increase framerate from 30 to 60 FPS"
msgstr ""
-#: engines/zvision/detection.cpp:266
+#: engines/zvision/detection_tables.h:71
#, fuzzy
msgid "Enable Venus"
msgstr "Activer le mode helium"
-#: engines/zvision/detection.cpp:267
+#: engines/zvision/detection_tables.h:72
+#, fuzzy
msgid "Enable the Venus help system"
-msgstr ""
+msgstr "Activer le mode helium"
-#: engines/zvision/detection.cpp:276
+#: engines/zvision/detection_tables.h:81
msgid "Disable animation while turning"
msgstr ""
-#: engines/zvision/detection.cpp:277
-msgid "Disable animation while turning in panoramic mode"
+#: engines/zvision/detection_tables.h:82
+msgid "Disable animation while turning in panorama mode"
msgstr ""
-#: engines/zvision/detection.cpp:286
-msgid "Use the hires MPEG movies"
+#: engines/zvision/detection_tables.h:91
+msgid "Use high resolution MPEG video"
msgstr ""
-#: engines/zvision/detection.cpp:287
+#: engines/zvision/detection_tables.h:92
#, fuzzy
-msgid ""
-"Use the hires MPEG movies of the DVD version, instead of the lowres AVI ones"
+msgid "Use MPEG video from the DVD version, instead of lower resolution AVI"
msgstr "Utiliser les curseurs argentщs au lieu des curseurs normaux dorщs"
#~ msgid "EGA undithering"
diff --git a/po/gl_ES.po b/po/gl_ES.po
index a6a5365e42..905c87d316 100644
--- a/po/gl_ES.po
+++ b/po/gl_ES.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ScummVM 1.6.0git\n"
"Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n"
-"POT-Creation-Date: 2015-06-30 20:57+0100\n"
+"POT-Creation-Date: 2015-10-11 18:59+0100\n"
"PO-Revision-Date: 2014-07-02 09:51+0100\n"
"Last-Translator: Santiago G. Sanz <s.sanz@uvigo.es>\n"
"Language-Team: Santiago G. Sanz <s.sanz@uvigo.es>\n"
@@ -30,7 +30,7 @@ msgstr "Funcionalidades compiladas:"
msgid "Available engines:"
msgstr "Motores dispoёibles:"
-#: gui/browser.cpp:68
+#: gui/browser.cpp:68 gui/browser_osx.mm:104
msgid "Show hidden files"
msgstr "Mostrar ficheiros ocultos"
@@ -51,13 +51,14 @@ msgctxt "lowres"
msgid "Go up"
msgstr "Arriba"
-#: gui/browser.cpp:75 gui/chooser.cpp:46 gui/KeysDialog.cpp:43
-#: gui/launcher.cpp:351 gui/massadd.cpp:95 gui/options.cpp:1239
-#: gui/recorderdialog.cpp:70 gui/recorderdialog.cpp:156
-#: gui/saveload-dialog.cpp:216 gui/saveload-dialog.cpp:276
-#: gui/saveload-dialog.cpp:547 gui/saveload-dialog.cpp:931
-#: gui/themebrowser.cpp:55 gui/fluidsynth-dialog.cpp:152
-#: engines/engine.cpp:483 backends/platform/wii/options.cpp:48
+#: gui/browser.cpp:75 gui/chooser.cpp:46 gui/editrecorddialog.cpp:67
+#: gui/KeysDialog.cpp:43 gui/launcher.cpp:351 gui/massadd.cpp:95
+#: gui/options.cpp:1237 gui/predictivedialog.cpp:74 gui/recorderdialog.cpp:70
+#: gui/recorderdialog.cpp:156 gui/saveload-dialog.cpp:216
+#: gui/saveload-dialog.cpp:276 gui/saveload-dialog.cpp:547
+#: gui/saveload-dialog.cpp:931 gui/themebrowser.cpp:55
+#: gui/fluidsynth-dialog.cpp:152 engines/engine.cpp:483
+#: backends/platform/wii/options.cpp:48
#: backends/events/default/default-events.cpp:196
#: backends/events/default/default-events.cpp:218
#: engines/drascula/saveload.cpp:49 engines/parallaction/saveload.cpp:274
@@ -65,10 +66,27 @@ msgstr "Arriba"
msgid "Cancel"
msgstr "Cancelar"
-#: gui/browser.cpp:76 gui/chooser.cpp:47 gui/themebrowser.cpp:56
+#: gui/browser.cpp:76 gui/browser_osx.mm:103 gui/chooser.cpp:47
+#: gui/themebrowser.cpp:56
msgid "Choose"
msgstr "Elixir"
+#: gui/editrecorddialog.cpp:58
+msgid "Author:"
+msgstr ""
+
+#: gui/editrecorddialog.cpp:59 gui/launcher.cpp:204
+msgid "Name:"
+msgstr "Nome:"
+
+#: gui/editrecorddialog.cpp:60
+msgid "Notes:"
+msgstr ""
+
+#: gui/editrecorddialog.cpp:68 gui/predictivedialog.cpp:75
+msgid "Ok"
+msgstr ""
+
#: gui/gui-manager.cpp:117 backends/keymapper/remap-dialog.cpp:53
#: engines/scumm/help.cpp:126 engines/scumm/help.cpp:141
#: engines/scumm/help.cpp:166 engines/scumm/help.cpp:192
@@ -101,7 +119,7 @@ msgid "Map"
msgstr "Asignar"
#: gui/KeysDialog.cpp:42 gui/launcher.cpp:352 gui/launcher.cpp:1048
-#: gui/launcher.cpp:1052 gui/massadd.cpp:92 gui/options.cpp:1240
+#: gui/launcher.cpp:1052 gui/massadd.cpp:92 gui/options.cpp:1238
#: gui/saveload-dialog.cpp:932 gui/fluidsynth-dialog.cpp:153
#: engines/engine.cpp:402 engines/engine.cpp:413
#: backends/platform/wii/options.cpp:47
@@ -163,10 +181,6 @@ msgctxt "lowres"
msgid "ID:"
msgstr "ID:"
-#: gui/launcher.cpp:204
-msgid "Name:"
-msgstr "Nome:"
-
#: gui/launcher.cpp:204 gui/launcher.cpp:206 gui/launcher.cpp:207
msgid "Full title of the game"
msgstr "Tэtulo completo do xogo"
@@ -187,7 +201,7 @@ msgid ""
msgstr "Idioma do xogo. Non converterс a versiѓn galega do xogo en inglesa"
#: gui/launcher.cpp:212 gui/launcher.cpp:226 gui/options.cpp:87
-#: gui/options.cpp:737 gui/options.cpp:750 gui/options.cpp:1210
+#: gui/options.cpp:735 gui/options.cpp:748 gui/options.cpp:1208
#: audio/null.cpp:41
msgid "<default>"
msgstr "<por defecto>"
@@ -209,11 +223,11 @@ msgstr "Plataforma:"
msgid "Engine"
msgstr "Motor"
-#: gui/launcher.cpp:245 gui/options.cpp:1073 gui/options.cpp:1090
+#: gui/launcher.cpp:245 gui/options.cpp:1071 gui/options.cpp:1088
msgid "Graphics"
msgstr "Grсficos"
-#: gui/launcher.cpp:245 gui/options.cpp:1073 gui/options.cpp:1090
+#: gui/launcher.cpp:245 gui/options.cpp:1071 gui/options.cpp:1088
msgid "GFX"
msgstr "Efectos grсficos"
@@ -226,7 +240,7 @@ msgctxt "lowres"
msgid "Override global graphic settings"
msgstr "Anular a configuraciѓn dos grсficos"
-#: gui/launcher.cpp:257 gui/options.cpp:1096
+#: gui/launcher.cpp:257 gui/options.cpp:1094
msgid "Audio"
msgstr "Son"
@@ -239,11 +253,11 @@ msgctxt "lowres"
msgid "Override global audio settings"
msgstr "Anular a configuraciѓn do son"
-#: gui/launcher.cpp:271 gui/options.cpp:1101
+#: gui/launcher.cpp:271 gui/options.cpp:1099
msgid "Volume"
msgstr "Volume"
-#: gui/launcher.cpp:273 gui/options.cpp:1103
+#: gui/launcher.cpp:273 gui/options.cpp:1101
msgctxt "lowres"
msgid "Volume"
msgstr "Volume"
@@ -257,7 +271,7 @@ msgctxt "lowres"
msgid "Override global volume settings"
msgstr "Anular a configuraciѓn do volume"
-#: gui/launcher.cpp:286 gui/options.cpp:1111
+#: gui/launcher.cpp:286 gui/options.cpp:1109
msgid "MIDI"
msgstr "MIDI"
@@ -270,7 +284,7 @@ msgctxt "lowres"
msgid "Override global MIDI settings"
msgstr "Anular a configuraciѓn de MIDI"
-#: gui/launcher.cpp:300 gui/options.cpp:1117
+#: gui/launcher.cpp:300 gui/options.cpp:1115
msgid "MT-32"
msgstr "MT-32"
@@ -283,11 +297,11 @@ msgctxt "lowres"
msgid "Override global MT-32 settings"
msgstr "Anular a configuraciѓn de MT-32"
-#: gui/launcher.cpp:314 gui/options.cpp:1124
+#: gui/launcher.cpp:314 gui/options.cpp:1122
msgid "Paths"
msgstr "Camiёos"
-#: gui/launcher.cpp:316 gui/options.cpp:1126
+#: gui/launcher.cpp:316 gui/options.cpp:1124
msgctxt "lowres"
msgid "Paths"
msgstr "Camiёos"
@@ -301,7 +315,7 @@ msgctxt "lowres"
msgid "Game Path:"
msgstr "Camiёo do xogo:"
-#: gui/launcher.cpp:330 gui/options.cpp:1150
+#: gui/launcher.cpp:330 gui/options.cpp:1148
msgid "Extra Path:"
msgstr "Camiёo adicional:"
@@ -309,42 +323,42 @@ msgstr "Camiёo adicional:"
msgid "Specifies path to additional data used by the game"
msgstr "Especifica o camiёo dos datos adicionais usados no xogo"
-#: gui/launcher.cpp:332 gui/options.cpp:1152
+#: gui/launcher.cpp:332 gui/options.cpp:1150
msgctxt "lowres"
msgid "Extra Path:"
msgstr "Camiёo adicional:"
-#: gui/launcher.cpp:339 gui/options.cpp:1134
+#: gui/launcher.cpp:339 gui/options.cpp:1132
msgid "Save Path:"
msgstr "Camiёo de gardado:"
#: gui/launcher.cpp:339 gui/launcher.cpp:341 gui/launcher.cpp:342
-#: gui/options.cpp:1134 gui/options.cpp:1136 gui/options.cpp:1137
+#: gui/options.cpp:1132 gui/options.cpp:1134 gui/options.cpp:1135
msgid "Specifies where your saved games are put"
msgstr "Especifica o lugar dos ficheiros de gardado"
-#: gui/launcher.cpp:341 gui/options.cpp:1136
+#: gui/launcher.cpp:341 gui/options.cpp:1134
msgctxt "lowres"
msgid "Save Path:"
msgstr "Camiёo de gardado:"
#: gui/launcher.cpp:360 gui/launcher.cpp:459 gui/launcher.cpp:517
-#: gui/launcher.cpp:571 gui/options.cpp:1145 gui/options.cpp:1153
-#: gui/options.cpp:1162 gui/options.cpp:1277 gui/options.cpp:1283
-#: gui/options.cpp:1291 gui/options.cpp:1321 gui/options.cpp:1327
-#: gui/options.cpp:1334 gui/options.cpp:1427 gui/options.cpp:1430
-#: gui/options.cpp:1442
+#: gui/launcher.cpp:571 gui/options.cpp:1143 gui/options.cpp:1151
+#: gui/options.cpp:1160 gui/options.cpp:1275 gui/options.cpp:1281
+#: gui/options.cpp:1289 gui/options.cpp:1319 gui/options.cpp:1325
+#: gui/options.cpp:1332 gui/options.cpp:1425 gui/options.cpp:1428
+#: gui/options.cpp:1440
msgctxt "path"
msgid "None"
msgstr "Ningњn"
#: gui/launcher.cpp:365 gui/launcher.cpp:465 gui/launcher.cpp:575
-#: gui/options.cpp:1271 gui/options.cpp:1315 gui/options.cpp:1433
+#: gui/options.cpp:1269 gui/options.cpp:1313 gui/options.cpp:1431
#: backends/platform/wii/options.cpp:56
msgid "Default"
msgstr "Predefinido"
-#: gui/launcher.cpp:510 gui/options.cpp:1436
+#: gui/launcher.cpp:510 gui/options.cpp:1434
msgid "Select SoundFont"
msgstr "Seleccionar SoundFont"
@@ -356,7 +370,7 @@ msgstr "Selecciona un directorio con datos de xogo"
msgid "Select additional game directory"
msgstr "Selecciona un directorio con datos adicionais"
-#: gui/launcher.cpp:559 gui/options.cpp:1379
+#: gui/launcher.cpp:559 gui/options.cpp:1377
msgid "Select directory for saved games"
msgstr "Selecciona un directorio para ficheiros de gardado"
@@ -553,6 +567,24 @@ msgstr "%d directorios analizados..."
msgid "Discovered %d new games, ignored %d previously added games ..."
msgstr "%d xogos novos atopados; %d xogos xa engadidos ignorados..."
+#: gui/onscreendialog.cpp:101 gui/onscreendialog.cpp:103
+msgid "Stop"
+msgstr ""
+
+#: gui/onscreendialog.cpp:106
+msgid "Edit record description"
+msgstr ""
+
+#: gui/onscreendialog.cpp:108
+#, fuzzy
+msgid "Switch to Game"
+msgstr "Cambiar"
+
+#: gui/onscreendialog.cpp:110
+#, fuzzy
+msgid "Fast replay"
+msgstr "Modo rсpido"
+
#: gui/options.cpp:85
msgid "Never"
msgstr "Nunca"
@@ -593,8 +625,8 @@ msgstr "44 kHz"
msgid "48 kHz"
msgstr "48 kHz"
-#: gui/options.cpp:255 gui/options.cpp:481 gui/options.cpp:582
-#: gui/options.cpp:651 gui/options.cpp:859
+#: gui/options.cpp:255 gui/options.cpp:479 gui/options.cpp:580
+#: gui/options.cpp:649 gui/options.cpp:857
msgctxt "soundfont"
msgid "None"
msgstr "Ningunha"
@@ -615,70 +647,70 @@ msgstr "non se puido cambiar a configuraciѓn de pantalla completa."
msgid "the aspect ratio setting could not be changed"
msgstr "non se puido cambiar a proporciѓn."
-#: gui/options.cpp:734
+#: gui/options.cpp:732
msgid "Graphics mode:"
msgstr "Grсficos:"
-#: gui/options.cpp:748
+#: gui/options.cpp:746
msgid "Render mode:"
msgstr "Procesamento:"
-#: gui/options.cpp:748 gui/options.cpp:749
+#: gui/options.cpp:746 gui/options.cpp:747
msgid "Special dithering modes supported by some games"
msgstr "Modos de interpolaciѓn de cores compatibles con algњns xogos"
-#: gui/options.cpp:760
+#: gui/options.cpp:758
#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2298
msgid "Fullscreen mode"
msgstr "Pantalla completa"
-#: gui/options.cpp:763
+#: gui/options.cpp:761
msgid "Aspect ratio correction"
msgstr "Correcciѓn de proporciѓn"
-#: gui/options.cpp:763
+#: gui/options.cpp:761
msgid "Correct aspect ratio for 320x200 games"
msgstr "Corrixir a proporciѓn para os xogos en 320x200"
-#: gui/options.cpp:771
+#: gui/options.cpp:769
msgid "Preferred Device:"
msgstr "Dispositivo preferido:"
-#: gui/options.cpp:771
+#: gui/options.cpp:769
msgid "Music Device:"
msgstr "Dispositivo de mњsica:"
-#: gui/options.cpp:771 gui/options.cpp:773
+#: gui/options.cpp:769 gui/options.cpp:771
msgid "Specifies preferred sound device or sound card emulator"
msgstr "Especifica o dispositivo ou emulador de tarxeta de son preferido"
-#: gui/options.cpp:771 gui/options.cpp:773 gui/options.cpp:774
+#: gui/options.cpp:769 gui/options.cpp:771 gui/options.cpp:772
msgid "Specifies output sound device or sound card emulator"
msgstr "Especifica o dispositivo ou emulador de tarxeta de son de saэda"
-#: gui/options.cpp:773
+#: gui/options.cpp:771
msgctxt "lowres"
msgid "Preferred Dev.:"
msgstr "Disp. preferido:"
-#: gui/options.cpp:773
+#: gui/options.cpp:771
msgctxt "lowres"
msgid "Music Device:"
msgstr "Disp. mњsica:"
-#: gui/options.cpp:800
+#: gui/options.cpp:798
msgid "AdLib emulator:"
msgstr "Emulador de AdLib:"
-#: gui/options.cpp:800 gui/options.cpp:801
+#: gui/options.cpp:798 gui/options.cpp:799
msgid "AdLib is used for music in many games"
msgstr "Moitos xogos empregan AdLib para a mњsica"
-#: gui/options.cpp:811
+#: gui/options.cpp:809
msgid "Output rate:"
msgstr "Taxa de saэda:"
-#: gui/options.cpp:811 gui/options.cpp:812
+#: gui/options.cpp:809 gui/options.cpp:810
msgid ""
"Higher value specifies better sound quality but may be not supported by your "
"soundcard"
@@ -686,84 +718,84 @@ msgstr ""
"A maior valor, maior calidade do son, mais talvez non sexa compatible coa "
"tarxeta"
-#: gui/options.cpp:822
+#: gui/options.cpp:820
msgid "GM Device:"
msgstr "Dispositivo de GM:"
-#: gui/options.cpp:822
+#: gui/options.cpp:820
msgid "Specifies default sound device for General MIDI output"
msgstr ""
"Especifica o dispositivo de son por defecto para a saэda de General MIDI"
-#: gui/options.cpp:833
+#: gui/options.cpp:831
msgid "Don't use General MIDI music"
msgstr "Non empregar mњsica en General MIDI"
-#: gui/options.cpp:844 gui/options.cpp:910
+#: gui/options.cpp:842 gui/options.cpp:908
msgid "Use first available device"
msgstr "Empregar o primeiro dispositivo dispoёible"
-#: gui/options.cpp:856
+#: gui/options.cpp:854
msgid "SoundFont:"
msgstr "SoundFont:"
-#: gui/options.cpp:856 gui/options.cpp:858 gui/options.cpp:859
+#: gui/options.cpp:854 gui/options.cpp:856 gui/options.cpp:857
msgid "SoundFont is supported by some audio cards, FluidSynth and Timidity"
msgstr ""
"SoundFont щ compatible con algunhas tarxetas de son, FluidSynth e Timidity"
-#: gui/options.cpp:858
+#: gui/options.cpp:856
msgctxt "lowres"
msgid "SoundFont:"
msgstr "SoundFont:"
-#: gui/options.cpp:864
+#: gui/options.cpp:862
msgid "Mixed AdLib/MIDI mode"
msgstr "Modo AdLib/MIDI mixto"
-#: gui/options.cpp:864
+#: gui/options.cpp:862
msgid "Use both MIDI and AdLib sound generation"
msgstr "Empregar xeraciѓn de son MIDI e mсis AdLib"
-#: gui/options.cpp:867
+#: gui/options.cpp:865
msgid "MIDI gain:"
msgstr "Ganancia de MIDI:"
-#: gui/options.cpp:874
+#: gui/options.cpp:872
msgid "FluidSynth Settings"
msgstr "Configuraciѓn de FluidSynth"
-#: gui/options.cpp:881
+#: gui/options.cpp:879
msgid "MT-32 Device:"
msgstr "Dispositivo de MT-32:"
-#: gui/options.cpp:881
+#: gui/options.cpp:879
msgid "Specifies default sound device for Roland MT-32/LAPC1/CM32l/CM64 output"
msgstr ""
"Especifica o dispositivo por defecto para a saэda de Roland MT-32/LAPC1/"
"CM32l/CM64"
-#: gui/options.cpp:886
+#: gui/options.cpp:884
msgid "True Roland MT-32 (disable GM emulation)"
msgstr "Roland MT-32 verdadeiro (sen emulaciѓn de GM)"
-#: gui/options.cpp:886 gui/options.cpp:888
+#: gui/options.cpp:884 gui/options.cpp:886
msgid ""
"Check if you want to use your real hardware Roland-compatible sound device "
"connected to your computer"
msgstr ""
"Marcar para empregar o hardware compatible con Roland conectado ao sistema"
-#: gui/options.cpp:888
+#: gui/options.cpp:886
msgctxt "lowres"
msgid "True Roland MT-32 (no GM emulation)"
msgstr "Roland MT-32 (sen emulaciѓn de GM)"
-#: gui/options.cpp:891
+#: gui/options.cpp:889
msgid "Roland GS Device (enable MT-32 mappings)"
msgstr "Dispositivo Roland GS (activar atribuciѓn MT-32)"
-#: gui/options.cpp:891
+#: gui/options.cpp:889
msgid ""
"Check if you want to enable patch mappings to emulate an MT-32 on a Roland "
"GS device"
@@ -771,174 +803,174 @@ msgstr ""
"Marcar para activar a atribuciѓn de parches e emular MT-32 nun dispositivo "
"Roland GS"
-#: gui/options.cpp:900
+#: gui/options.cpp:898
msgid "Don't use Roland MT-32 music"
msgstr "Non empregar mњsica en Roland MT-32"
-#: gui/options.cpp:927
+#: gui/options.cpp:925
msgid "Text and Speech:"
msgstr "Texto e voz:"
-#: gui/options.cpp:931 gui/options.cpp:941
+#: gui/options.cpp:929 gui/options.cpp:939
msgid "Speech"
msgstr "Voz"
-#: gui/options.cpp:932 gui/options.cpp:942
+#: gui/options.cpp:930 gui/options.cpp:940
msgid "Subtitles"
msgstr "Subtэtulos"
-#: gui/options.cpp:933
+#: gui/options.cpp:931
msgid "Both"
msgstr "Ambos"
-#: gui/options.cpp:935
+#: gui/options.cpp:933
msgid "Subtitle speed:"
msgstr "Velocidade dos subtэtulos:"
-#: gui/options.cpp:937
+#: gui/options.cpp:935
msgctxt "lowres"
msgid "Text and Speech:"
msgstr "Texto e voz:"
-#: gui/options.cpp:941
+#: gui/options.cpp:939
msgid "Spch"
msgstr "Voz"
-#: gui/options.cpp:942
+#: gui/options.cpp:940
msgid "Subs"
msgstr "Subs"
-#: gui/options.cpp:943
+#: gui/options.cpp:941
msgctxt "lowres"
msgid "Both"
msgstr "Ambos"
-#: gui/options.cpp:943
+#: gui/options.cpp:941
msgid "Show subtitles and play speech"
msgstr "Mostrar os subtэtulos e reproducir as voces"
-#: gui/options.cpp:945
+#: gui/options.cpp:943
msgctxt "lowres"
msgid "Subtitle speed:"
msgstr "Velocidade subs:"
-#: gui/options.cpp:961
+#: gui/options.cpp:959
msgid "Music volume:"
msgstr "Volume de mњsica:"
-#: gui/options.cpp:963
+#: gui/options.cpp:961
msgctxt "lowres"
msgid "Music volume:"
msgstr "Volume mњsica:"
-#: gui/options.cpp:970
+#: gui/options.cpp:968
msgid "Mute All"
msgstr "Silenciar todo"
-#: gui/options.cpp:973
+#: gui/options.cpp:971
msgid "SFX volume:"
msgstr "Volume de efectos:"
-#: gui/options.cpp:973 gui/options.cpp:975 gui/options.cpp:976
+#: gui/options.cpp:971 gui/options.cpp:973 gui/options.cpp:974
msgid "Special sound effects volume"
msgstr "Volume dos efectos de son"
-#: gui/options.cpp:975
+#: gui/options.cpp:973
msgctxt "lowres"
msgid "SFX volume:"
msgstr "Volume efectos:"
-#: gui/options.cpp:983
+#: gui/options.cpp:981
msgid "Speech volume:"
msgstr "Volume de voz:"
-#: gui/options.cpp:985
+#: gui/options.cpp:983
msgctxt "lowres"
msgid "Speech volume:"
msgstr "Volume voz:"
-#: gui/options.cpp:1142
+#: gui/options.cpp:1140
msgid "Theme Path:"
msgstr "Camiёo do tema:"
-#: gui/options.cpp:1144
+#: gui/options.cpp:1142
msgctxt "lowres"
msgid "Theme Path:"
msgstr "Camiёo tema:"
-#: gui/options.cpp:1150 gui/options.cpp:1152 gui/options.cpp:1153
+#: gui/options.cpp:1148 gui/options.cpp:1150 gui/options.cpp:1151
msgid "Specifies path to additional data used by all games or ScummVM"
msgstr ""
"Especificar o camiёo dos datos adicionais de todos os xogos ou de ScummVM"
-#: gui/options.cpp:1159
+#: gui/options.cpp:1157
msgid "Plugins Path:"
msgstr "Camiёo dos complementos:"
-#: gui/options.cpp:1161
+#: gui/options.cpp:1159
msgctxt "lowres"
msgid "Plugins Path:"
msgstr "Camiёo complementos:"
-#: gui/options.cpp:1170 gui/fluidsynth-dialog.cpp:138
+#: gui/options.cpp:1168 gui/fluidsynth-dialog.cpp:138
msgid "Misc"
msgstr "Misc."
-#: gui/options.cpp:1172
+#: gui/options.cpp:1170
msgctxt "lowres"
msgid "Misc"
msgstr "Misc."
-#: gui/options.cpp:1174
+#: gui/options.cpp:1172
msgid "Theme:"
msgstr "Tema:"
-#: gui/options.cpp:1178
+#: gui/options.cpp:1176
msgid "GUI Renderer:"
msgstr "Procesamento da interfaz:"
-#: gui/options.cpp:1190
+#: gui/options.cpp:1188
msgid "Autosave:"
msgstr "Autogardado:"
-#: gui/options.cpp:1192
+#: gui/options.cpp:1190
msgctxt "lowres"
msgid "Autosave:"
msgstr "Autogardado:"
-#: gui/options.cpp:1200
+#: gui/options.cpp:1198
msgid "Keys"
msgstr "Teclas"
-#: gui/options.cpp:1207
+#: gui/options.cpp:1205
msgid "GUI Language:"
msgstr "Idioma de interfaz:"
-#: gui/options.cpp:1207
+#: gui/options.cpp:1205
msgid "Language of ScummVM GUI"
msgstr "Idioma da interfaz de ScummVM"
-#: gui/options.cpp:1366
+#: gui/options.cpp:1364
msgid "You have to restart ScummVM before your changes will take effect."
msgstr "Debes reiniciar ScummVM para que os cambios teёan efecto."
-#: gui/options.cpp:1386
+#: gui/options.cpp:1384
msgid "The chosen directory cannot be written to. Please select another one."
msgstr "Non щ posible escribir no directorio elixido. Selecciona outro."
-#: gui/options.cpp:1395
+#: gui/options.cpp:1393
msgid "Select directory for GUI themes"
msgstr "Seleccionar directorio para temas de interfaz"
-#: gui/options.cpp:1405
+#: gui/options.cpp:1403
msgid "Select directory for extra files"
msgstr "Seleccionar directorio para ficheiros adicionais"
-#: gui/options.cpp:1416
+#: gui/options.cpp:1414
msgid "Select directory for plugins"
msgstr "Seleccionar directorio para complementos"
-#: gui/options.cpp:1469
+#: gui/options.cpp:1467
msgid ""
"The theme you selected does not support your current language. If you want "
"to use this theme you need to switch to another language first."
@@ -946,6 +978,29 @@ msgstr ""
"O tema seleccionado non щ compatible co idioma actual. Para empregar o tema, "
"deberсs cambiar antes o idioma da interfaz."
+#. I18N: You must leave "#" as is, only word 'next' is translatable
+#: gui/predictivedialog.cpp:87
+msgid "# next"
+msgstr ""
+
+#: gui/predictivedialog.cpp:88
+msgid "add"
+msgstr ""
+
+#: gui/predictivedialog.cpp:92
+#, fuzzy
+msgid "Delete char"
+msgstr "Eliminar"
+
+#: gui/predictivedialog.cpp:96
+msgid "<"
+msgstr ""
+
+#. I18N: Pre means 'Predictive', leave '*' as is
+#: gui/predictivedialog.cpp:98
+msgid "* Pre"
+msgstr ""
+
#: gui/recorderdialog.cpp:64
msgid "Recorder or Playback Gameplay"
msgstr ""
@@ -983,6 +1038,11 @@ msgstr ""
msgid "Do you really want to delete this record?"
msgstr "Seguro que queres eliminar esta partida?"
+#: gui/recorderdialog.cpp:174
+#, fuzzy
+msgid "Unknown Author"
+msgstr "Erro descoёecido"
+
#: gui/saveload-dialog.cpp:167
msgid "List view"
msgstr "Lista"
@@ -1432,14 +1492,18 @@ msgstr ""
msgid "Start anyway"
msgstr "Iniciar de todos os xeitos"
-#: audio/fmopl.cpp:50
+#: audio/fmopl.cpp:62
msgid "MAME OPL emulator"
msgstr "Emulador de OPL de MAME"
-#: audio/fmopl.cpp:52
+#: audio/fmopl.cpp:64
msgid "DOSBox OPL emulator"
msgstr "Emulador de OPL de DOSBox"
+#: audio/fmopl.cpp:67
+msgid "ALSA Direct FM"
+msgstr ""
+
#: audio/mididrv.cpp:209
#, c-format
msgid ""
@@ -1489,7 +1553,7 @@ msgstr "Sen mњsica"
msgid "Amiga Audio Emulator"
msgstr "Emulador de Amiga Audio"
-#: audio/softsynth/adlib.cpp:2285
+#: audio/adlib.cpp:2291
msgid "AdLib Emulator"
msgstr "Emulador de AdLib"
@@ -2121,14 +2185,13 @@ msgstr "Premer desactivado"
#: engines/agi/detection.cpp:147 engines/drascula/detection.cpp:302
#: engines/dreamweb/detection.cpp:47 engines/neverhood/detection.cpp:160
#: engines/sci/detection.cpp:394 engines/toltecs/detection.cpp:200
-#: engines/zvision/detection.cpp:246
+#: engines/zvision/detection_tables.h:51
msgid "Use original save/load screens"
msgstr "Empregar pantallas orixinais de gardado e carga"
#: engines/agi/detection.cpp:148 engines/drascula/detection.cpp:303
#: engines/dreamweb/detection.cpp:48 engines/neverhood/detection.cpp:161
#: engines/sci/detection.cpp:395 engines/toltecs/detection.cpp:201
-#: engines/zvision/detection.cpp:247
msgid "Use the original save/load screens, instead of the ScummVM ones"
msgstr ""
"Empregar as pantallas orixinais de gardado e carga, no canto das de ScummVM"
@@ -3268,6 +3331,25 @@ msgstr "Voar с dereita"
msgid "Fly to lower right"
msgstr "Voar с dereita abaixo"
+#: engines/scumm/input.cpp:572
+#, fuzzy
+msgid "Snap scroll on"
+msgstr "Desprazamento suave"
+
+#: engines/scumm/input.cpp:574
+msgid "Snap scroll off"
+msgstr ""
+
+#: engines/scumm/input.cpp:587
+#, fuzzy
+msgid "Music volume: "
+msgstr "Volume de mњsica:"
+
+#: engines/scumm/input.cpp:604
+#, fuzzy
+msgid "Subtitle speed: "
+msgstr "Velocidade dos subtэtulos:"
+
#: engines/scumm/scumm.cpp:1832
#, c-format
msgid ""
@@ -3423,39 +3505,45 @@ msgstr ""
msgid "Show the current number of frames per second in the upper left corner"
msgstr ""
-#: engines/zvision/detection.cpp:256
+#: engines/zvision/detection_tables.h:52
+#, fuzzy
+msgid "Use the original save/load screens instead of the ScummVM interface"
+msgstr ""
+"Empregar as pantallas orixinais de gardado e carga, no canto das de ScummVM"
+
+#: engines/zvision/detection_tables.h:61
msgid "Double FPS"
msgstr ""
-#: engines/zvision/detection.cpp:257
-msgid "Increase game FPS from 30 to 60"
+#: engines/zvision/detection_tables.h:62
+msgid "Increase framerate from 30 to 60 FPS"
msgstr ""
-#: engines/zvision/detection.cpp:266
+#: engines/zvision/detection_tables.h:71
#, fuzzy
msgid "Enable Venus"
msgstr "Activar o modo helio"
-#: engines/zvision/detection.cpp:267
+#: engines/zvision/detection_tables.h:72
+#, fuzzy
msgid "Enable the Venus help system"
-msgstr ""
+msgstr "Activar o modo helio"
-#: engines/zvision/detection.cpp:276
+#: engines/zvision/detection_tables.h:81
msgid "Disable animation while turning"
msgstr ""
-#: engines/zvision/detection.cpp:277
-msgid "Disable animation while turning in panoramic mode"
+#: engines/zvision/detection_tables.h:82
+msgid "Disable animation while turning in panorama mode"
msgstr ""
-#: engines/zvision/detection.cpp:286
-msgid "Use the hires MPEG movies"
+#: engines/zvision/detection_tables.h:91
+msgid "Use high resolution MPEG video"
msgstr ""
-#: engines/zvision/detection.cpp:287
+#: engines/zvision/detection_tables.h:92
#, fuzzy
-msgid ""
-"Use the hires MPEG movies of the DVD version, instead of the lowres AVI ones"
+msgid "Use MPEG video from the DVD version, instead of lower resolution AVI"
msgstr ""
"Empregar o xogo de cursores prateados alternativo, no canto dos dourados "
"normais"
diff --git a/po/hu_HU.po b/po/hu_HU.po
index 2121b0a100..89538e9f61 100644
--- a/po/hu_HU.po
+++ b/po/hu_HU.po
@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ScummVM 1.3.0svn\n"
"Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n"
-"POT-Creation-Date: 2015-06-30 20:57+0100\n"
-"PO-Revision-Date: 2014-02-18 06:30+0100\n"
+"POT-Creation-Date: 2015-10-11 18:59+0100\n"
+"PO-Revision-Date: 2015-10-12 11:10+0200\n"
"Last-Translator: George Kormendi <grubycza@hotmail.com>\n"
"Language-Team: Hungarian\n"
"Language: Magyar\n"
@@ -17,7 +17,7 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Poedit-SourceCharset: iso-8859-1\n"
-"X-Generator: Poedit 1.6.4\n"
+"X-Generator: Poedit 1.8.5\n"
#: gui/about.cpp:94
#, c-format
@@ -32,7 +32,7 @@ msgstr "Lefordэtott іsszetevѕk:"
msgid "Available engines:"
msgstr "Tсmogatott jсtщkmotorok:"
-#: gui/browser.cpp:68
+#: gui/browser.cpp:68 gui/browser_osx.mm:104
msgid "Show hidden files"
msgstr "Rejtett fсjlok lсtszanak"
@@ -53,13 +53,14 @@ msgctxt "lowres"
msgid "Go up"
msgstr "Feljebb"
-#: gui/browser.cpp:75 gui/chooser.cpp:46 gui/KeysDialog.cpp:43
-#: gui/launcher.cpp:351 gui/massadd.cpp:95 gui/options.cpp:1239
-#: gui/recorderdialog.cpp:70 gui/recorderdialog.cpp:156
-#: gui/saveload-dialog.cpp:216 gui/saveload-dialog.cpp:276
-#: gui/saveload-dialog.cpp:547 gui/saveload-dialog.cpp:931
-#: gui/themebrowser.cpp:55 gui/fluidsynth-dialog.cpp:152
-#: engines/engine.cpp:483 backends/platform/wii/options.cpp:48
+#: gui/browser.cpp:75 gui/chooser.cpp:46 gui/editrecorddialog.cpp:67
+#: gui/KeysDialog.cpp:43 gui/launcher.cpp:351 gui/massadd.cpp:95
+#: gui/options.cpp:1237 gui/predictivedialog.cpp:74 gui/recorderdialog.cpp:70
+#: gui/recorderdialog.cpp:156 gui/saveload-dialog.cpp:216
+#: gui/saveload-dialog.cpp:276 gui/saveload-dialog.cpp:547
+#: gui/saveload-dialog.cpp:931 gui/themebrowser.cpp:55
+#: gui/fluidsynth-dialog.cpp:152 engines/engine.cpp:483
+#: backends/platform/wii/options.cpp:48
#: backends/events/default/default-events.cpp:196
#: backends/events/default/default-events.cpp:218
#: engines/drascula/saveload.cpp:49 engines/parallaction/saveload.cpp:274
@@ -67,10 +68,27 @@ msgstr "Feljebb"
msgid "Cancel"
msgstr "Mщgse"
-#: gui/browser.cpp:76 gui/chooser.cpp:47 gui/themebrowser.cpp:56
+#: gui/browser.cpp:76 gui/browser_osx.mm:103 gui/chooser.cpp:47
+#: gui/themebrowser.cpp:56
msgid "Choose"
msgstr "Vсlaszt"
+#: gui/editrecorddialog.cpp:58
+msgid "Author:"
+msgstr "Szerzѕ:"
+
+#: gui/editrecorddialog.cpp:59 gui/launcher.cpp:204
+msgid "Name:"
+msgstr "Nщv:"
+
+#: gui/editrecorddialog.cpp:60
+msgid "Notes:"
+msgstr "Megjegyzщs:"
+
+#: gui/editrecorddialog.cpp:68 gui/predictivedialog.cpp:75
+msgid "Ok"
+msgstr "Ok"
+
#: gui/gui-manager.cpp:117 backends/keymapper/remap-dialog.cpp:53
#: engines/scumm/help.cpp:126 engines/scumm/help.cpp:141
#: engines/scumm/help.cpp:166 engines/scumm/help.cpp:192
@@ -103,7 +121,7 @@ msgid "Map"
msgstr "Kiosztсs"
#: gui/KeysDialog.cpp:42 gui/launcher.cpp:352 gui/launcher.cpp:1048
-#: gui/launcher.cpp:1052 gui/massadd.cpp:92 gui/options.cpp:1240
+#: gui/launcher.cpp:1052 gui/massadd.cpp:92 gui/options.cpp:1238
#: gui/saveload-dialog.cpp:932 gui/fluidsynth-dialog.cpp:153
#: engines/engine.cpp:402 engines/engine.cpp:413
#: backends/platform/wii/options.cpp:47
@@ -164,10 +182,6 @@ msgctxt "lowres"
msgid "ID:"
msgstr "ID:"
-#: gui/launcher.cpp:204
-msgid "Name:"
-msgstr "Nщv:"
-
#: gui/launcher.cpp:204 gui/launcher.cpp:206 gui/launcher.cpp:207
msgid "Full title of the game"
msgstr "A jсtщk teljes neve"
@@ -189,7 +203,7 @@ msgstr ""
"A jсtщk nyelve. Ne сllэtsd сt a pl. Spanyol nyelvћ jсtщkodat Angol nyelvre"
#: gui/launcher.cpp:212 gui/launcher.cpp:226 gui/options.cpp:87
-#: gui/options.cpp:737 gui/options.cpp:750 gui/options.cpp:1210
+#: gui/options.cpp:735 gui/options.cpp:748 gui/options.cpp:1208
#: audio/null.cpp:41
msgid "<default>"
msgstr "<alapщrtelmezett>"
@@ -211,11 +225,11 @@ msgstr "Platform:"
msgid "Engine"
msgstr "Motor"
-#: gui/launcher.cpp:245 gui/options.cpp:1073 gui/options.cpp:1090
+#: gui/launcher.cpp:245 gui/options.cpp:1071 gui/options.cpp:1088
msgid "Graphics"
msgstr "Grafika"
-#: gui/launcher.cpp:245 gui/options.cpp:1073 gui/options.cpp:1090
+#: gui/launcher.cpp:245 gui/options.cpp:1071 gui/options.cpp:1088
msgid "GFX"
msgstr "GFX"
@@ -228,7 +242,7 @@ msgctxt "lowres"
msgid "Override global graphic settings"
msgstr "Globсlis grafikai beсllэtсsok felќlbэrсlсsa"
-#: gui/launcher.cpp:257 gui/options.cpp:1096
+#: gui/launcher.cpp:257 gui/options.cpp:1094
msgid "Audio"
msgstr "Audiѓ"
@@ -241,11 +255,11 @@ msgctxt "lowres"
msgid "Override global audio settings"
msgstr "Globсlis audiѓ beсllэtсsok felќlbэrсlсsa"
-#: gui/launcher.cpp:271 gui/options.cpp:1101
+#: gui/launcher.cpp:271 gui/options.cpp:1099
msgid "Volume"
msgstr "Hangerѕ"
-#: gui/launcher.cpp:273 gui/options.cpp:1103
+#: gui/launcher.cpp:273 gui/options.cpp:1101
msgctxt "lowres"
msgid "Volume"
msgstr "Hangerѕ"
@@ -259,7 +273,7 @@ msgctxt "lowres"
msgid "Override global volume settings"
msgstr "Globсlis hangerѕbeсllэtсsok felќlbэrсlсsa"
-#: gui/launcher.cpp:286 gui/options.cpp:1111
+#: gui/launcher.cpp:286 gui/options.cpp:1109
msgid "MIDI"
msgstr "MIDI"
@@ -272,7 +286,7 @@ msgctxt "lowres"
msgid "Override global MIDI settings"
msgstr "Globсlis MIDI beсllэtсsok felќlbэrсlсsa"
-#: gui/launcher.cpp:300 gui/options.cpp:1117
+#: gui/launcher.cpp:300 gui/options.cpp:1115
msgid "MT-32"
msgstr "MT-32"
@@ -285,11 +299,11 @@ msgctxt "lowres"
msgid "Override global MT-32 settings"
msgstr "Globсlis MT-32 beсllэtсsok felќlbэrсlсsa"
-#: gui/launcher.cpp:314 gui/options.cpp:1124
+#: gui/launcher.cpp:314 gui/options.cpp:1122
msgid "Paths"
msgstr "Mappсk"
-#: gui/launcher.cpp:316 gui/options.cpp:1126
+#: gui/launcher.cpp:316 gui/options.cpp:1124
msgctxt "lowres"
msgid "Paths"
msgstr "Mappсk"
@@ -303,7 +317,7 @@ msgctxt "lowres"
msgid "Game Path:"
msgstr "Jсtщk Mappa:"
-#: gui/launcher.cpp:330 gui/options.cpp:1150
+#: gui/launcher.cpp:330 gui/options.cpp:1148
msgid "Extra Path:"
msgstr "Extra Mappa:"
@@ -311,42 +325,42 @@ msgstr "Extra Mappa:"
msgid "Specifies path to additional data used by the game"
msgstr "Mappa kivсlasztсs a jсtщkok kiegщszэtѕ fсjljaihoz"
-#: gui/launcher.cpp:332 gui/options.cpp:1152
+#: gui/launcher.cpp:332 gui/options.cpp:1150
msgctxt "lowres"
msgid "Extra Path:"
msgstr "Extra Mappa:"
-#: gui/launcher.cpp:339 gui/options.cpp:1134
+#: gui/launcher.cpp:339 gui/options.cpp:1132
msgid "Save Path:"
msgstr "Mentщs Mappa:"
#: gui/launcher.cpp:339 gui/launcher.cpp:341 gui/launcher.cpp:342
-#: gui/options.cpp:1134 gui/options.cpp:1136 gui/options.cpp:1137
+#: gui/options.cpp:1132 gui/options.cpp:1134 gui/options.cpp:1135
msgid "Specifies where your saved games are put"
msgstr "Jсtщkmentщsek helyщnek meghatсrozсsa"
-#: gui/launcher.cpp:341 gui/options.cpp:1136
+#: gui/launcher.cpp:341 gui/options.cpp:1134
msgctxt "lowres"
msgid "Save Path:"
msgstr "Mentщs Mappa:"
#: gui/launcher.cpp:360 gui/launcher.cpp:459 gui/launcher.cpp:517
-#: gui/launcher.cpp:571 gui/options.cpp:1145 gui/options.cpp:1153
-#: gui/options.cpp:1162 gui/options.cpp:1277 gui/options.cpp:1283
-#: gui/options.cpp:1291 gui/options.cpp:1321 gui/options.cpp:1327
-#: gui/options.cpp:1334 gui/options.cpp:1427 gui/options.cpp:1430
-#: gui/options.cpp:1442
+#: gui/launcher.cpp:571 gui/options.cpp:1143 gui/options.cpp:1151
+#: gui/options.cpp:1160 gui/options.cpp:1275 gui/options.cpp:1281
+#: gui/options.cpp:1289 gui/options.cpp:1319 gui/options.cpp:1325
+#: gui/options.cpp:1332 gui/options.cpp:1425 gui/options.cpp:1428
+#: gui/options.cpp:1440
msgctxt "path"
msgid "None"
msgstr "Nincs"
#: gui/launcher.cpp:365 gui/launcher.cpp:465 gui/launcher.cpp:575
-#: gui/options.cpp:1271 gui/options.cpp:1315 gui/options.cpp:1433
+#: gui/options.cpp:1269 gui/options.cpp:1313 gui/options.cpp:1431
#: backends/platform/wii/options.cpp:56
msgid "Default"
msgstr "Alapщrtelmezett"
-#: gui/launcher.cpp:510 gui/options.cpp:1436
+#: gui/launcher.cpp:510 gui/options.cpp:1434
msgid "Select SoundFont"
msgstr "SoundFont kivсlasztсs"
@@ -358,7 +372,7 @@ msgstr "Jсtщkok helyщnek kivсlasztсsa"
msgid "Select additional game directory"
msgstr "Vсlassz mappсt a jсtщk kiegщszэtѕkhіz"
-#: gui/launcher.cpp:559 gui/options.cpp:1379
+#: gui/launcher.cpp:559 gui/options.cpp:1377
msgid "Select directory for saved games"
msgstr "Vсlaszz jсtщkmentщseknek mappсt"
@@ -400,7 +414,7 @@ msgstr "A vсlasztott jсtщk indэtсsa"
#: gui/launcher.cpp:633
msgid "~L~oad..."
-msgstr "Betіltщs"
+msgstr "~B~etіlt..."
#: gui/launcher.cpp:633
msgid "Load saved game for selected game"
@@ -531,7 +545,7 @@ msgstr "Masszэv mѓd..."
#: gui/launcher.cpp:1161
msgid "Record..."
-msgstr ""
+msgstr "Felvщtel..."
#: gui/massadd.cpp:79 gui/massadd.cpp:82
msgid "... progress ..."
@@ -556,6 +570,22 @@ msgstr "%d Mappa сtvizsgсlva..."
msgid "Discovered %d new games, ignored %d previously added games ..."
msgstr "%d њj jсtщkot talсltam, %d elѕzѕleg hozzсadott jсtщk kihagyva..."
+#: gui/onscreendialog.cpp:101 gui/onscreendialog.cpp:103
+msgid "Stop"
+msgstr "Сllj"
+
+#: gui/onscreendialog.cpp:106
+msgid "Edit record description"
+msgstr "Felvщtel leэrсs szerkesztщse"
+
+#: gui/onscreendialog.cpp:108
+msgid "Switch to Game"
+msgstr "Сtvсlt jсtщkra"
+
+#: gui/onscreendialog.cpp:110
+msgid "Fast replay"
+msgstr "Gyors visszajсtszсs"
+
#: gui/options.cpp:85
msgid "Never"
msgstr "Soha"
@@ -596,8 +626,8 @@ msgstr "44 kHz"
msgid "48 kHz"
msgstr "48 kHz"
-#: gui/options.cpp:255 gui/options.cpp:481 gui/options.cpp:582
-#: gui/options.cpp:651 gui/options.cpp:859
+#: gui/options.cpp:255 gui/options.cpp:479 gui/options.cpp:580
+#: gui/options.cpp:649 gui/options.cpp:857
msgctxt "soundfont"
msgid "None"
msgstr "Nincs"
@@ -618,135 +648,135 @@ msgstr "a teljeskщpernyѕs beсllэtсs nem vсltozott"
msgid "the aspect ratio setting could not be changed"
msgstr "a kщpmщretarсny beсllэtсsok nem vсltoztak"
-#: gui/options.cpp:734
+#: gui/options.cpp:732
msgid "Graphics mode:"
msgstr "Grafikus mѓd:"
-#: gui/options.cpp:748
+#: gui/options.cpp:746
msgid "Render mode:"
msgstr "Kirajzolсs mѓd:"
-#: gui/options.cpp:748 gui/options.cpp:749
+#: gui/options.cpp:746 gui/options.cpp:747
msgid "Special dithering modes supported by some games"
msgstr "Nщhсny jсtщk tсmogatja a speciсlis сrnyalсsi mѓdokat"
-#: gui/options.cpp:760
+#: gui/options.cpp:758
#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2298
msgid "Fullscreen mode"
msgstr "Teljeskщpernyѕs mѓd:"
-#: gui/options.cpp:763
+#: gui/options.cpp:761
msgid "Aspect ratio correction"
msgstr "Kщpmщretarсny korrekciѓ"
-#: gui/options.cpp:763
+#: gui/options.cpp:761
msgid "Correct aspect ratio for 320x200 games"
msgstr "Helyes oldalarсny a 320x200 jсtщkokhoz"
-#: gui/options.cpp:771
+#: gui/options.cpp:769
msgid "Preferred Device:"
msgstr "Elsѕdleges eszkіz:"
-#: gui/options.cpp:771
+#: gui/options.cpp:769
msgid "Music Device:"
msgstr "Zene eszkіz:"
-#: gui/options.cpp:771 gui/options.cpp:773
+#: gui/options.cpp:769 gui/options.cpp:771
msgid "Specifies preferred sound device or sound card emulator"
msgstr "Elsѕdleges hangeszkіz vagy hang emulсtor beсllэtсsok"
-#: gui/options.cpp:771 gui/options.cpp:773 gui/options.cpp:774
+#: gui/options.cpp:769 gui/options.cpp:771 gui/options.cpp:772
msgid "Specifies output sound device or sound card emulator"
msgstr "Hangeszkіz vagy hangkсrtya emulсtor beсllэtсsok"
-#: gui/options.cpp:773
+#: gui/options.cpp:771
msgctxt "lowres"
msgid "Preferred Dev.:"
msgstr "Elsѕdleges eszk.:"
-#: gui/options.cpp:773
+#: gui/options.cpp:771
msgctxt "lowres"
msgid "Music Device:"
msgstr "Zene eszkіz:"
-#: gui/options.cpp:800
+#: gui/options.cpp:798
msgid "AdLib emulator:"
msgstr "AdLib emulсtor:"
-#: gui/options.cpp:800 gui/options.cpp:801
+#: gui/options.cpp:798 gui/options.cpp:799
msgid "AdLib is used for music in many games"
msgstr "AdLib meghajtѓt sok jсtщk hasznсlja zenщhez"
-#: gui/options.cpp:811
+#: gui/options.cpp:809
msgid "Output rate:"
msgstr "Kimeneti rсta:"
-#: gui/options.cpp:811 gui/options.cpp:812
+#: gui/options.cpp:809 gui/options.cpp:810
msgid ""
"Higher value specifies better sound quality but may be not supported by your "
"soundcard"
msgstr ""
"Nagyobb щrtщkek jobb hangminѕsщget adnak, de nem minden hangkсrtya tсmogatja"
-#: gui/options.cpp:822
+#: gui/options.cpp:820
msgid "GM Device:"
msgstr "GM Eszkіz:"
-#: gui/options.cpp:822
+#: gui/options.cpp:820
msgid "Specifies default sound device for General MIDI output"
msgstr "Alapщrtelmezett hangeszkіz General MIDI kimenethez"
-#: gui/options.cpp:833
+#: gui/options.cpp:831
msgid "Don't use General MIDI music"
msgstr "Ne hasznсlj General MIDI zenщt"
-#: gui/options.cpp:844 gui/options.cpp:910
+#: gui/options.cpp:842 gui/options.cpp:908
msgid "Use first available device"
msgstr "Elsѕ elщrhetѕ eszkіz hasznсlata"
-#: gui/options.cpp:856
+#: gui/options.cpp:854
msgid "SoundFont:"
msgstr "SoundFont:"
-#: gui/options.cpp:856 gui/options.cpp:858 gui/options.cpp:859
+#: gui/options.cpp:854 gui/options.cpp:856 gui/options.cpp:857
msgid "SoundFont is supported by some audio cards, FluidSynth and Timidity"
msgstr ""
"Nщhсny hangkсrya, FluidSynth щs Timidyti tсmogatja a SoundFont betіltщsщt"
-#: gui/options.cpp:858
+#: gui/options.cpp:856
msgctxt "lowres"
msgid "SoundFont:"
msgstr "SoundFont:"
-#: gui/options.cpp:864
+#: gui/options.cpp:862
msgid "Mixed AdLib/MIDI mode"
msgstr "Vegyes AdLib/MIDI mѓd"
-#: gui/options.cpp:864
+#: gui/options.cpp:862
msgid "Use both MIDI and AdLib sound generation"
msgstr "MIDI щs AdLib hanggenerсtorok hasznсlata"
-#: gui/options.cpp:867
+#: gui/options.cpp:865
msgid "MIDI gain:"
msgstr "MIDI erѕsэtщs:"
-#: gui/options.cpp:874
+#: gui/options.cpp:872
msgid "FluidSynth Settings"
msgstr "FluidSynth Beсllэtсsa"
-#: gui/options.cpp:881
+#: gui/options.cpp:879
msgid "MT-32 Device:"
msgstr "MT-32 Eszkіz:"
-#: gui/options.cpp:881
+#: gui/options.cpp:879
msgid "Specifies default sound device for Roland MT-32/LAPC1/CM32l/CM64 output"
msgstr "Roland MT-32/LAPC1/CM32l/CM64 alapщrtelmezett hangeszkіzіk beсllэtсsa"
-#: gui/options.cpp:886
+#: gui/options.cpp:884
msgid "True Roland MT-32 (disable GM emulation)"
msgstr "Roland MT-32 Hardver (GM emulсciѓ tiltva)"
-#: gui/options.cpp:886 gui/options.cpp:888
+#: gui/options.cpp:884 gui/options.cpp:886
msgid ""
"Check if you want to use your real hardware Roland-compatible sound device "
"connected to your computer"
@@ -754,16 +784,16 @@ msgstr ""
"Jelіld be, ha hardveres Roland-Kompatibilis hangeszkіz van csatlakoztatva a "
"gщpedhez щs hasznсlni akarod"
-#: gui/options.cpp:888
+#: gui/options.cpp:886
msgctxt "lowres"
msgid "True Roland MT-32 (no GM emulation)"
msgstr "Roland MT-32 Hardver (GM emulсciѓ nincs)"
-#: gui/options.cpp:891
+#: gui/options.cpp:889
msgid "Roland GS Device (enable MT-32 mappings)"
msgstr "Roland GS eszkіz (MT-32 mapping engedщlyezщs)"
-#: gui/options.cpp:891
+#: gui/options.cpp:889
msgid ""
"Check if you want to enable patch mappings to emulate an MT-32 on a Roland "
"GS device"
@@ -771,173 +801,173 @@ msgstr ""
"Ellenѕrzщs ha engedщlyezni akarod az emulсlt MT-32 Folt lekщpezщst a Roland "
"GS eszkіzіn"
-#: gui/options.cpp:900
+#: gui/options.cpp:898
msgid "Don't use Roland MT-32 music"
msgstr "Ne hasznсlj Roland MT-32 zenщt"
-#: gui/options.cpp:927
+#: gui/options.cpp:925
msgid "Text and Speech:"
msgstr "Szіveg щs beszщd:"
-#: gui/options.cpp:931 gui/options.cpp:941
+#: gui/options.cpp:929 gui/options.cpp:939
msgid "Speech"
msgstr "Csak beszщd"
-#: gui/options.cpp:932 gui/options.cpp:942
+#: gui/options.cpp:930 gui/options.cpp:940
msgid "Subtitles"
msgstr "Csak felirat"
-#: gui/options.cpp:933
+#: gui/options.cpp:931
msgid "Both"
msgstr "Mind"
-#: gui/options.cpp:935
+#: gui/options.cpp:933
msgid "Subtitle speed:"
msgstr "Felirat sebessщg:"
-#: gui/options.cpp:937
+#: gui/options.cpp:935
msgctxt "lowres"
msgid "Text and Speech:"
msgstr "Felirat щs beszщd:"
-#: gui/options.cpp:941
+#: gui/options.cpp:939
msgid "Spch"
msgstr "Besz"
-#: gui/options.cpp:942
+#: gui/options.cpp:940
msgid "Subs"
msgstr "Text"
-#: gui/options.cpp:943
+#: gui/options.cpp:941
msgctxt "lowres"
msgid "Both"
msgstr "Mind"
-#: gui/options.cpp:943
+#: gui/options.cpp:941
msgid "Show subtitles and play speech"
msgstr "Hang щs feliratok megjelenэtщse"
-#: gui/options.cpp:945
+#: gui/options.cpp:943
msgctxt "lowres"
msgid "Subtitle speed:"
msgstr "Felirat sebessщg:"
-#: gui/options.cpp:961
+#: gui/options.cpp:959
msgid "Music volume:"
msgstr "Zene hangerѕ:"
-#: gui/options.cpp:963
+#: gui/options.cpp:961
msgctxt "lowres"
msgid "Music volume:"
msgstr "Zene hangerѕ:"
-#: gui/options.cpp:970
+#: gui/options.cpp:968
msgid "Mute All"
msgstr "жsszes nщmэtсsa"
-#: gui/options.cpp:973
+#: gui/options.cpp:971
msgid "SFX volume:"
msgstr "SFX hangerѕ:"
-#: gui/options.cpp:973 gui/options.cpp:975 gui/options.cpp:976
+#: gui/options.cpp:971 gui/options.cpp:973 gui/options.cpp:974
msgid "Special sound effects volume"
msgstr "Speciсlis hangeffektusok hangereje"
-#: gui/options.cpp:975
+#: gui/options.cpp:973
msgctxt "lowres"
msgid "SFX volume:"
msgstr "SFX hangerѕ:"
-#: gui/options.cpp:983
+#: gui/options.cpp:981
msgid "Speech volume:"
msgstr "Beszщd hangerѕ:"
-#: gui/options.cpp:985
+#: gui/options.cpp:983
msgctxt "lowres"
msgid "Speech volume:"
msgstr "Beszщd hangerѕ:"
-#: gui/options.cpp:1142
+#: gui/options.cpp:1140
msgid "Theme Path:"
msgstr "Tщma Mappa:"
-#: gui/options.cpp:1144
+#: gui/options.cpp:1142
msgctxt "lowres"
msgid "Theme Path:"
msgstr "Tщma Mappa:"
-#: gui/options.cpp:1150 gui/options.cpp:1152 gui/options.cpp:1153
+#: gui/options.cpp:1148 gui/options.cpp:1150 gui/options.cpp:1151
msgid "Specifies path to additional data used by all games or ScummVM"
msgstr "Minden jщtщk щs ScummVM kiegщszэtѕ fсjljainak mappсja:"
-#: gui/options.cpp:1159
+#: gui/options.cpp:1157
msgid "Plugins Path:"
msgstr "Plugin Mappa:"
-#: gui/options.cpp:1161
+#: gui/options.cpp:1159
msgctxt "lowres"
msgid "Plugins Path:"
msgstr "Plugin Mappa:"
-#: gui/options.cpp:1170 gui/fluidsynth-dialog.cpp:138
+#: gui/options.cpp:1168 gui/fluidsynth-dialog.cpp:138
msgid "Misc"
msgstr "Vegyes"
-#: gui/options.cpp:1172
+#: gui/options.cpp:1170
msgctxt "lowres"
msgid "Misc"
msgstr "Vegyes"
-#: gui/options.cpp:1174
+#: gui/options.cpp:1172
msgid "Theme:"
msgstr "Tщma:"
-#: gui/options.cpp:1178
+#: gui/options.cpp:1176
msgid "GUI Renderer:"
msgstr "GUI Renderelѕ:"
-#: gui/options.cpp:1190
+#: gui/options.cpp:1188
msgid "Autosave:"
msgstr "Automentщs:"
-#: gui/options.cpp:1192
+#: gui/options.cpp:1190
msgctxt "lowres"
msgid "Autosave:"
msgstr "Automentщs:"
-#: gui/options.cpp:1200
+#: gui/options.cpp:1198
msgid "Keys"
msgstr "Billentyћk"
-#: gui/options.cpp:1207
+#: gui/options.cpp:1205
msgid "GUI Language:"
msgstr "GUI nyelve:"
-#: gui/options.cpp:1207
+#: gui/options.cpp:1205
msgid "Language of ScummVM GUI"
msgstr "A ScummVM GUI nyelve"
-#: gui/options.cpp:1366
+#: gui/options.cpp:1364
msgid "You have to restart ScummVM before your changes will take effect."
msgstr "Indэtsd њjra a ScummVM-et a vсltozсsok щrvщnyesэtщsщhez."
-#: gui/options.cpp:1386
+#: gui/options.cpp:1384
msgid "The chosen directory cannot be written to. Please select another one."
msgstr "A kivсlasztott mappсba nem lehet эrni, vсlassz egy mсsikat"
-#: gui/options.cpp:1395
+#: gui/options.cpp:1393
msgid "Select directory for GUI themes"
msgstr "GUI tщma mappa kivсlasztсsa"
-#: gui/options.cpp:1405
+#: gui/options.cpp:1403
msgid "Select directory for extra files"
msgstr "Mappa vсlasztсs az extra fсjloknak"
-#: gui/options.cpp:1416
+#: gui/options.cpp:1414
msgid "Select directory for plugins"
msgstr "Plugin mappa kivсlasztсsa"
-#: gui/options.cpp:1469
+#: gui/options.cpp:1467
msgid ""
"The theme you selected does not support your current language. If you want "
"to use this theme you need to switch to another language first."
@@ -945,9 +975,31 @@ msgstr ""
"A kivсlasztott tщma nem tсmogatja a nyelvedet. Ha hasznсlni akarod ezt a "
"tщmсt, elѕszѕr vсlts сt egy mсsik nyelvre."
+#. I18N: You must leave "#" as is, only word 'next' is translatable
+#: gui/predictivedialog.cpp:87
+msgid "# next"
+msgstr "# kіvetkezѕ"
+
+#: gui/predictivedialog.cpp:88
+msgid "add"
+msgstr "hozzсad"
+
+#: gui/predictivedialog.cpp:92
+msgid "Delete char"
+msgstr "Karakter tіrlщs"
+
+#: gui/predictivedialog.cpp:96
+msgid "<"
+msgstr "<"
+
+#. I18N: Pre means 'Predictive', leave '*' as is
+#: gui/predictivedialog.cpp:98
+msgid "* Pre"
+msgstr "* Elѕzѕ"
+
#: gui/recorderdialog.cpp:64
msgid "Recorder or Playback Gameplay"
-msgstr ""
+msgstr "Jсtщkmenet felvщtel vagy lejсtszсs"
#: gui/recorderdialog.cpp:69 gui/recorderdialog.cpp:156
#: gui/saveload-dialog.cpp:220 gui/saveload-dialog.cpp:276
@@ -956,31 +1008,33 @@ msgstr "Tіrіl"
#: gui/recorderdialog.cpp:71
msgid "Record"
-msgstr ""
+msgstr "Felvщtel"
#: gui/recorderdialog.cpp:72
-#, fuzzy
msgid "Playback"
-msgstr "Jсtщk"
+msgstr "Visszajсtszсs"
#: gui/recorderdialog.cpp:74
msgid "Edit"
-msgstr ""
+msgstr "Javэt"
#: gui/recorderdialog.cpp:86 gui/recorderdialog.cpp:243
#: gui/recorderdialog.cpp:253
msgid "Author: "
-msgstr ""
+msgstr "Szerzѕ:"
#: gui/recorderdialog.cpp:87 gui/recorderdialog.cpp:244
#: gui/recorderdialog.cpp:254
msgid "Notes: "
-msgstr ""
+msgstr "Megjegyzщs:"
#: gui/recorderdialog.cpp:155
-#, fuzzy
msgid "Do you really want to delete this record?"
-msgstr "Biztos hogy tіrіlni akarod ezt a jсtщkсllсst?"
+msgstr "Biztos hogy tіrіlni akarod ezt a felvщtelt?"
+
+#: gui/recorderdialog.cpp:174
+msgid "Unknown Author"
+msgstr "Ismeretlen Szerzѕ"
#: gui/saveload-dialog.cpp:167
msgid "List view"
@@ -1281,7 +1335,7 @@ msgstr "Folytatсs"
#: engines/dialogs.cpp:87
msgid "~L~oad"
-msgstr "Betіltщs"
+msgstr "~B~etіltщs"
#: engines/dialogs.cpp:91
msgid "~S~ave"
@@ -1355,7 +1409,7 @@ msgstr "~O~K"
#: engines/dialogs.cpp:308 engines/mohawk/dialogs.cpp:110
#: engines/mohawk/dialogs.cpp:171 engines/tsage/dialogs.cpp:107
msgid "~C~ancel"
-msgstr "Mщgse"
+msgstr "~M~щgse"
#: engines/dialogs.cpp:311
msgid "~K~eys"
@@ -1428,14 +1482,18 @@ msgstr ""
msgid "Start anyway"
msgstr "Indэtсs эgy is"
-#: audio/fmopl.cpp:50
+#: audio/fmopl.cpp:62
msgid "MAME OPL emulator"
msgstr "MAME OPL emulсtor"
-#: audio/fmopl.cpp:52
+#: audio/fmopl.cpp:64
msgid "DOSBox OPL emulator"
msgstr "DOSBox OPL emulсtor"
+#: audio/fmopl.cpp:67
+msgid "ALSA Direct FM"
+msgstr "ALSA Direct FM"
+
#: audio/mididrv.cpp:209
#, c-format
msgid ""
@@ -1483,7 +1541,7 @@ msgstr "Nincs zene"
msgid "Amiga Audio Emulator"
msgstr "Amiga Audiѓ Emulсtor"
-#: audio/softsynth/adlib.cpp:2285
+#: audio/adlib.cpp:2291
msgid "AdLib Emulator"
msgstr "AdLib Emulсtor"
@@ -1550,7 +1608,7 @@ msgstr "ScummVM Fѕmenќ"
#: backends/platform/ds/arm9/source/dsoptions.cpp:63
msgid "~L~eft handed mode"
-msgstr "Balkezes mѓd:"
+msgstr "~B~alkezes mѓd"
#: backends/platform/ds/arm9/source/dsoptions.cpp:64
msgid "~I~ndy fight controls"
@@ -2011,7 +2069,7 @@ msgstr "Vсlassz egy billentyћt az 'Eszkіztсr rejtщs' mћvelethez"
#: backends/platform/wince/wince-sdl.cpp:542
msgid "Map Zoom Up action (optional)"
-msgstr "Nagyэtсs mћvelet (opcionсlis)"
+msgstr "Tщrkщp nagyэtсs mћvelet (opcionсlis)"
#: backends/platform/wince/wince-sdl.cpp:545
msgid "Map Zoom Down action (optional)"
@@ -2113,37 +2171,38 @@ msgstr "Kattintсs tiltva"
#: engines/agi/detection.cpp:147 engines/drascula/detection.cpp:302
#: engines/dreamweb/detection.cpp:47 engines/neverhood/detection.cpp:160
#: engines/sci/detection.cpp:394 engines/toltecs/detection.cpp:200
-#: engines/zvision/detection.cpp:246
+#: engines/zvision/detection_tables.h:51
msgid "Use original save/load screens"
msgstr "Eredeti ment/tіlt kщpernyѕk hasznсlata"
#: engines/agi/detection.cpp:148 engines/drascula/detection.cpp:303
#: engines/dreamweb/detection.cpp:48 engines/neverhood/detection.cpp:161
#: engines/sci/detection.cpp:395 engines/toltecs/detection.cpp:201
-#: engines/zvision/detection.cpp:247
msgid "Use the original save/load screens, instead of the ScummVM ones"
msgstr "Az eredeti mentщs/betіltщs kщpernyѕ hasznсlata a ScummVM kщpek helyett"
#: engines/agi/detection.cpp:157
-#, fuzzy
msgid "Use an alternative palette"
-msgstr "Alternatэv jсtщkintro hasznсlata (csak CD verziѓnсl)"
+msgstr "Alternatэv paletta hasznсlat"
#: engines/agi/detection.cpp:158
msgid ""
"Use an alternative palette, common for all Amiga games. This was the old "
"behavior"
msgstr ""
+"Alternatэv paletta hasznсlat, kіzіs minden Amiga jсtщknсl. Ez egy rщgi "
+"megoldсs"
#: engines/agi/detection.cpp:167
-#, fuzzy
msgid "Mouse support"
-msgstr "Сtugrсs tсmogatсs"
+msgstr "Egщr tсmogatсs"
#: engines/agi/detection.cpp:168
msgid ""
"Enables mouse support. Allows to use mouse for movement and in game menus."
msgstr ""
+"Egщrmѓd engщlyezve. Lehetѕvщ teszi az egщrrel mozgatсst jсtщkban щs "
+"jсtщkmenќkben."
#: engines/agi/saveload.cpp:816 engines/drascula/saveload.cpp:349
#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:886
@@ -2196,13 +2255,12 @@ msgid "Cutscene file '%s' not found!"
msgstr "'%s' сtvezetѕ fсjl nem talсlhatѓ"
#: engines/cge/detection.cpp:105 engines/cge2/detection.cpp:101
-#, fuzzy
msgid "Color Blind Mode"
-msgstr "Kattintсs Mѓd"
+msgstr "Szэnvak Mѓd"
#: engines/cge/detection.cpp:106 engines/cge2/detection.cpp:102
msgid "Enable Color Blind Mode by default"
-msgstr ""
+msgstr "Szinvak mѓd engedщlyezve alapщrtelmezett"
#: engines/drascula/saveload.cpp:47
msgid ""
@@ -2257,11 +2315,11 @@ msgstr "Jсtщk mentщs nem sikerќlt"
#: engines/hopkins/detection.cpp:76 engines/hopkins/detection.cpp:86
msgid "Gore Mode"
-msgstr ""
+msgstr "Gore Mѓd"
#: engines/hopkins/detection.cpp:77 engines/hopkins/detection.cpp:87
msgid "Enable Gore Mode when available"
-msgstr ""
+msgstr "Gore mѓd engedщlyezщs ha elщrhetѕ"
#. I18N: Studio audience adds an applause and cheering sounds whenever
#. Malcolm makes a joke.
@@ -2393,6 +2451,12 @@ msgid ""
"Do you wish to use this save game file with ScummVM?\n"
"\n"
msgstr ""
+"A kіvetkezѕ eredeti jсtщkmentщs fсjlt talсltam a jсtщkkіnyvtсrban:\n"
+"\n"
+"%s %s\n"
+"\n"
+"Akarod hogy ezt a jсtщkmentщs fсjlt hasznсlja a ScummVM?\n"
+"\n"
#: engines/kyra/saveload_eob.cpp:590
#, c-format
@@ -2400,6 +2464,8 @@ msgid ""
"A save game file was found in the specified slot %d. Overwrite?\n"
"\n"
msgstr ""
+"Jсtщkmentщs talсlhatѓ a vсlasztott %d slotban. Felќlэrjam?\n"
+"\n"
#: engines/kyra/saveload_eob.cpp:623
#, c-format
@@ -2411,6 +2477,11 @@ msgid ""
"'import_savefile'.\n"
"\n"
msgstr ""
+"%d eredeti jсtщkmentщs fсjlt sikeresen importсlta a\n"
+"ScummVM. Ha kщsѕbb manuсlisan akarod importсlni az eredeti jсtщkmentщseket\n"
+"meg kell nyitnod a ScummVM debug konzolt щs hasznсld az 'import_savefile' "
+"utasэtсst.\n"
+"\n"
#. I18N: Option for fast scene switching
#: engines/mohawk/dialogs.cpp:92 engines/mohawk/dialogs.cpp:167
@@ -2419,7 +2490,7 @@ msgstr "~Z~ip Mѓd aktivсlva"
#: engines/mohawk/dialogs.cpp:93
msgid "~T~ransitions Enabled"
-msgstr "Сtmenetek engedщlyezve"
+msgstr "~С~tmenetek engedщlyezve"
#. I18N: Drop book page
#: engines/mohawk/dialogs.cpp:95
@@ -2550,11 +2621,12 @@ msgstr "Alternatэv jсtщkintro hasznсlata (csak CD verziѓnсl)"
#: engines/sci/detection.cpp:374
msgid "Skip EGA dithering pass (full color backgrounds)"
-msgstr ""
+msgstr "EGA szэnmodulсciѓ сtugrсsa (Szэnes hсttereknщl)"
#: engines/sci/detection.cpp:375
msgid "Skip dithering pass in EGA games, graphics are shown with full colors"
msgstr ""
+"Szэnmodulсciѓ сtugrсsa EGA jсtщkoknсl, grafikсk teljes szэnben lсthatѓk"
#: engines/sci/detection.cpp:384
msgid "Prefer digital sound effects"
@@ -2625,15 +2697,13 @@ msgstr "Jсtщk szќnetel. SPACE a folytatсshoz."
#. "Moechten Sie wirklich neu starten? (J/N)J"
#. Will react to J as 'Yes'
#: engines/scumm/dialogs.cpp:183
-#, fuzzy
msgid "Are you sure you want to restart? (Y/N)Y"
-msgstr "Biztos hogy њjra akarod indэtani? (Y/N)"
+msgstr "Biztos hogy њjra akarod indэtani? (I/N)I"
#. I18N: you may specify 'Yes' symbol at the end of the line. See previous comment
#: engines/scumm/dialogs.cpp:185
-#, fuzzy
msgid "Are you sure you want to quit? (Y/N)Y"
-msgstr "Biztos hogy ki akarsz lщpni? (Y/N)"
+msgstr "Biztos hogy ki akarsz lщpni? (I/N)I"
#: engines/scumm/dialogs.cpp:190
msgid "Play"
@@ -2680,7 +2750,7 @@ msgstr "Jсtщk cэme)"
#. I18N: Previous page button
#: engines/scumm/dialogs.cpp:288
msgid "~P~revious"
-msgstr "Elѕzѕ"
+msgstr "~E~lѕzѕ"
#. I18N: Next page button
#: engines/scumm/dialogs.cpp:290
@@ -3141,25 +3211,24 @@ msgid "Third kid"
msgstr "Harmadik gyerek"
#: engines/scumm/help.cpp:292
-#, fuzzy
msgid "Toggle Inventory/IQ Points display"
-msgstr "Adatkщpernyѕ kapcsolѓ"
+msgstr "Leltсr/IQ pont kijelzѕ kapcsolѓ"
#: engines/scumm/help.cpp:293
msgid "Toggle Keyboard/Mouse Fighting (*)"
-msgstr ""
+msgstr "Billentyћzet/Egщr harc kapcsolѓ (*)"
#: engines/scumm/help.cpp:295
msgid "* Keyboard Fighting is always on,"
-msgstr ""
+msgstr "* Harc billentyћzetrѕl mindэg aktэv,"
#: engines/scumm/help.cpp:296
msgid " so despite the in-game message this"
-msgstr ""
+msgstr " so despite the in-game message this"
#: engines/scumm/help.cpp:297
msgid " actually toggles Mouse Fighting Off/On"
-msgstr ""
+msgstr " egщrrel harcolсs mѓd сtkapcsolсs Be/Ki"
#: engines/scumm/help.cpp:304
msgid "Fighting controls (numpad):"
@@ -3196,7 +3265,7 @@ msgstr "Alsѓ ќtщs"
#: engines/scumm/help.cpp:315
msgid "Sucker punch"
-msgstr ""
+msgstr "Vсratlan ќtщs"
#: engines/scumm/help.cpp:318
msgid "These are for Indy on left."
@@ -3254,6 +3323,22 @@ msgstr "Jobbra repќlщs"
msgid "Fly to lower right"
msgstr "Jobbra le repќlщs"
+#: engines/scumm/input.cpp:572
+msgid "Snap scroll on"
+msgstr "Finomgіrgetщs be"
+
+#: engines/scumm/input.cpp:574
+msgid "Snap scroll off"
+msgstr "Finomgіrgetщs ki"
+
+#: engines/scumm/input.cpp:587
+msgid "Music volume: "
+msgstr "Zene hangereje:"
+
+#: engines/scumm/input.cpp:604
+msgid "Subtitle speed: "
+msgstr "Felirat sebessщg:"
+
#: engines/scumm/scumm.cpp:1832
#, c-format
msgid ""
@@ -3264,27 +3349,30 @@ msgstr ""
"a %s hiсnyzik. AdLib-ot hasznсlok helyette."
#: engines/scumm/scumm.cpp:2644
-#, fuzzy
msgid ""
"Usually, Maniac Mansion would start now. But for that to work, the game "
"files for Maniac Mansion have to be in the 'Maniac' directory inside the "
"Tentacle game directory, and the game has to be added to ScummVM."
msgstr ""
-"Сltalсban a Maniac Mansion indulna itt. De a ScummVM most nem indэtja el. Ha "
-"jсtszani akarsz vele menj a ScummVM fѕmenќben a 'Jсtщk hozzсadсs' ra щs "
-"vсlaszd a 'Maniac' mappсt a 'Tentacle' kіnyvtсrсban."
+"Сltalсban a Maniac Mansion indulna most. De a mћkіdщshez a Maniac Mansion "
+"fсjljainak, a 'Maniac' mappсban kell lenni a Tentacle jсtщkmappсjсn belќl, "
+"щs a jсtщkot эgy adja hozzс a ScummVM a listсhoz."
#: engines/scumm/players/player_v3m.cpp:129
msgid ""
"Could not find the 'Loom' Macintosh executable to read the\n"
"instruments from. Music will be disabled."
msgstr ""
+"Nem talсlhatѓ a 'Loom' Macintosh futtatѓ сllomсny, hogy \n"
+"beolvassa a hangszereket. Zene le lessz tiltva."
#: engines/scumm/players/player_v5m.cpp:107
msgid ""
"Could not find the 'Monkey Island' Macintosh executable to read the\n"
"instruments from. Music will be disabled."
msgstr ""
+"Nem talсlhatѓ a 'Monkey Island' Macintosh futtatѓ сllomсny, hogy \n"
+"beolvassa a hangszereket. Zene le lessz tiltva."
#: engines/sky/compact.cpp:130
msgid ""
@@ -3400,46 +3488,48 @@ msgstr ""
#: engines/wintermute/detection.cpp:58
msgid "Show FPS-counter"
-msgstr ""
+msgstr "FPS szсmlсlѓ lсtszik"
#: engines/wintermute/detection.cpp:59
msgid "Show the current number of frames per second in the upper left corner"
msgstr ""
+"A jelenlegi mсsodpercenkщnti kщpkocka szсm kijelzщse a bal felsѕ sarokban"
+
+#: engines/zvision/detection_tables.h:52
+msgid "Use the original save/load screens instead of the ScummVM interface"
+msgstr "Hasznсld az eredeti mentщs/tіltщs kщpet a ScummVM felќlet helyett"
-#: engines/zvision/detection.cpp:256
+#: engines/zvision/detection_tables.h:61
msgid "Double FPS"
-msgstr ""
+msgstr "Dupla FPS"
-#: engines/zvision/detection.cpp:257
-msgid "Increase game FPS from 30 to 60"
-msgstr ""
+#: engines/zvision/detection_tables.h:62
+msgid "Increase framerate from 30 to 60 FPS"
+msgstr "Nіveli a kщpfrissэtщst 30 rѓl 60 FPS-re"
-#: engines/zvision/detection.cpp:266
-#, fuzzy
+#: engines/zvision/detection_tables.h:71
msgid "Enable Venus"
-msgstr "Helium mѓd engedщlyezve"
+msgstr "Venus engedщlyezve"
-#: engines/zvision/detection.cpp:267
+#: engines/zvision/detection_tables.h:72
msgid "Enable the Venus help system"
-msgstr ""
+msgstr "Venus sњgѓrendszer engedщlyezve"
-#: engines/zvision/detection.cpp:276
+#: engines/zvision/detection_tables.h:81
msgid "Disable animation while turning"
-msgstr ""
+msgstr "Animсciѓ tiltсs bekapcsolсs kіzben"
-#: engines/zvision/detection.cpp:277
-msgid "Disable animation while turning in panoramic mode"
-msgstr ""
+#: engines/zvision/detection_tables.h:82
+msgid "Disable animation while turning in panorama mode"
+msgstr "Animсciѓ tiltсsa panorсma mѓd bekapcsolсsa kіzben"
-#: engines/zvision/detection.cpp:286
-msgid "Use the hires MPEG movies"
-msgstr ""
+#: engines/zvision/detection_tables.h:91
+msgid "Use high resolution MPEG video"
+msgstr "Nagyfelbontсsњ MPEG videѓ hasznсlat"
-#: engines/zvision/detection.cpp:287
-#, fuzzy
-msgid ""
-"Use the hires MPEG movies of the DVD version, instead of the lowres AVI ones"
-msgstr "Alternatэv ezќst kurzorszett hasznсlata, a normсl arany helyett"
+#: engines/zvision/detection_tables.h:92
+msgid "Use MPEG video from the DVD version, instead of lower resolution AVI"
+msgstr "MPEG videѓt hasznсl DVD verziѓnсl, a kisebb felbontсsњ AVI helyett"
#~ msgid "EGA undithering"
#~ msgstr "EGA szinjavэtсs"
diff --git a/po/it_IT.po b/po/it_IT.po
index 5dfa8039b4..21c4341570 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.sf.net\n"
-"POT-Creation-Date: 2015-06-30 20:57+0100\n"
+"POT-Creation-Date: 2015-10-11 18:59+0100\n"
"PO-Revision-Date: 2014-07-03 17:59-0600\n"
"Last-Translator: Matteo 'Maff' Angelino <matteo.maff at gmail dot com>\n"
"Language-Team: Italian\n"
@@ -29,7 +29,7 @@ msgstr "Funzionalitр incluse:"
msgid "Available engines:"
msgstr "Motori disponibili:"
-#: gui/browser.cpp:68
+#: gui/browser.cpp:68 gui/browser_osx.mm:104
msgid "Show hidden files"
msgstr "Mostra file nascosti"
@@ -50,13 +50,14 @@ msgctxt "lowres"
msgid "Go up"
msgstr "Su"
-#: gui/browser.cpp:75 gui/chooser.cpp:46 gui/KeysDialog.cpp:43
-#: gui/launcher.cpp:351 gui/massadd.cpp:95 gui/options.cpp:1239
-#: gui/recorderdialog.cpp:70 gui/recorderdialog.cpp:156
-#: gui/saveload-dialog.cpp:216 gui/saveload-dialog.cpp:276
-#: gui/saveload-dialog.cpp:547 gui/saveload-dialog.cpp:931
-#: gui/themebrowser.cpp:55 gui/fluidsynth-dialog.cpp:152
-#: engines/engine.cpp:483 backends/platform/wii/options.cpp:48
+#: gui/browser.cpp:75 gui/chooser.cpp:46 gui/editrecorddialog.cpp:67
+#: gui/KeysDialog.cpp:43 gui/launcher.cpp:351 gui/massadd.cpp:95
+#: gui/options.cpp:1237 gui/predictivedialog.cpp:74 gui/recorderdialog.cpp:70
+#: gui/recorderdialog.cpp:156 gui/saveload-dialog.cpp:216
+#: gui/saveload-dialog.cpp:276 gui/saveload-dialog.cpp:547
+#: gui/saveload-dialog.cpp:931 gui/themebrowser.cpp:55
+#: gui/fluidsynth-dialog.cpp:152 engines/engine.cpp:483
+#: backends/platform/wii/options.cpp:48
#: backends/events/default/default-events.cpp:196
#: backends/events/default/default-events.cpp:218
#: engines/drascula/saveload.cpp:49 engines/parallaction/saveload.cpp:274
@@ -64,10 +65,27 @@ msgstr "Su"
msgid "Cancel"
msgstr "Annulla"
-#: gui/browser.cpp:76 gui/chooser.cpp:47 gui/themebrowser.cpp:56
+#: gui/browser.cpp:76 gui/browser_osx.mm:103 gui/chooser.cpp:47
+#: gui/themebrowser.cpp:56
msgid "Choose"
msgstr "Scegli"
+#: gui/editrecorddialog.cpp:58
+msgid "Author:"
+msgstr ""
+
+#: gui/editrecorddialog.cpp:59 gui/launcher.cpp:204
+msgid "Name:"
+msgstr "Nome:"
+
+#: gui/editrecorddialog.cpp:60
+msgid "Notes:"
+msgstr ""
+
+#: gui/editrecorddialog.cpp:68 gui/predictivedialog.cpp:75
+msgid "Ok"
+msgstr ""
+
#: gui/gui-manager.cpp:117 backends/keymapper/remap-dialog.cpp:53
#: engines/scumm/help.cpp:126 engines/scumm/help.cpp:141
#: engines/scumm/help.cpp:166 engines/scumm/help.cpp:192
@@ -100,7 +118,7 @@ msgid "Map"
msgstr "Mappa"
#: gui/KeysDialog.cpp:42 gui/launcher.cpp:352 gui/launcher.cpp:1048
-#: gui/launcher.cpp:1052 gui/massadd.cpp:92 gui/options.cpp:1240
+#: gui/launcher.cpp:1052 gui/massadd.cpp:92 gui/options.cpp:1238
#: gui/saveload-dialog.cpp:932 gui/fluidsynth-dialog.cpp:153
#: engines/engine.cpp:402 engines/engine.cpp:413
#: backends/platform/wii/options.cpp:47
@@ -162,10 +180,6 @@ msgctxt "lowres"
msgid "ID:"
msgstr "ID:"
-#: gui/launcher.cpp:204
-msgid "Name:"
-msgstr "Nome:"
-
#: gui/launcher.cpp:204 gui/launcher.cpp:206 gui/launcher.cpp:207
msgid "Full title of the game"
msgstr "Titolo completo del gioco"
@@ -187,7 +201,7 @@ msgstr ""
"Lingua del gioco. Un gioco inglese non potrр risultare tradotto in italiano"
#: gui/launcher.cpp:212 gui/launcher.cpp:226 gui/options.cpp:87
-#: gui/options.cpp:737 gui/options.cpp:750 gui/options.cpp:1210
+#: gui/options.cpp:735 gui/options.cpp:748 gui/options.cpp:1208
#: audio/null.cpp:41
msgid "<default>"
msgstr "<predefinito>"
@@ -209,11 +223,11 @@ msgstr "Piattaf.:"
msgid "Engine"
msgstr "Motore"
-#: gui/launcher.cpp:245 gui/options.cpp:1073 gui/options.cpp:1090
+#: gui/launcher.cpp:245 gui/options.cpp:1071 gui/options.cpp:1088
msgid "Graphics"
msgstr "Grafica"
-#: gui/launcher.cpp:245 gui/options.cpp:1073 gui/options.cpp:1090
+#: gui/launcher.cpp:245 gui/options.cpp:1071 gui/options.cpp:1088
msgid "GFX"
msgstr "Grafica"
@@ -226,7 +240,7 @@ msgctxt "lowres"
msgid "Override global graphic settings"
msgstr "Ignora le impostazioni grafiche globali"
-#: gui/launcher.cpp:257 gui/options.cpp:1096
+#: gui/launcher.cpp:257 gui/options.cpp:1094
msgid "Audio"
msgstr "Audio"
@@ -239,11 +253,11 @@ msgctxt "lowres"
msgid "Override global audio settings"
msgstr "Ignora le impostazioni audio globali"
-#: gui/launcher.cpp:271 gui/options.cpp:1101
+#: gui/launcher.cpp:271 gui/options.cpp:1099
msgid "Volume"
msgstr "Volume"
-#: gui/launcher.cpp:273 gui/options.cpp:1103
+#: gui/launcher.cpp:273 gui/options.cpp:1101
msgctxt "lowres"
msgid "Volume"
msgstr "Volume"
@@ -257,7 +271,7 @@ msgctxt "lowres"
msgid "Override global volume settings"
msgstr "Ignora le impostazioni globali di volume"
-#: gui/launcher.cpp:286 gui/options.cpp:1111
+#: gui/launcher.cpp:286 gui/options.cpp:1109
msgid "MIDI"
msgstr "MIDI"
@@ -270,7 +284,7 @@ msgctxt "lowres"
msgid "Override global MIDI settings"
msgstr "Ignora le impostazioni MIDI globali"
-#: gui/launcher.cpp:300 gui/options.cpp:1117
+#: gui/launcher.cpp:300 gui/options.cpp:1115
msgid "MT-32"
msgstr "MT-32"
@@ -283,11 +297,11 @@ msgctxt "lowres"
msgid "Override global MT-32 settings"
msgstr "Ignora le impostazioni MT-32 globali"
-#: gui/launcher.cpp:314 gui/options.cpp:1124
+#: gui/launcher.cpp:314 gui/options.cpp:1122
msgid "Paths"
msgstr "Percorsi"
-#: gui/launcher.cpp:316 gui/options.cpp:1126
+#: gui/launcher.cpp:316 gui/options.cpp:1124
msgctxt "lowres"
msgid "Paths"
msgstr "Perc."
@@ -301,7 +315,7 @@ msgctxt "lowres"
msgid "Game Path:"
msgstr "Perc. gioco:"
-#: gui/launcher.cpp:330 gui/options.cpp:1150
+#: gui/launcher.cpp:330 gui/options.cpp:1148
msgid "Extra Path:"
msgstr "Percorso extra:"
@@ -309,42 +323,42 @@ msgstr "Percorso extra:"
msgid "Specifies path to additional data used by the game"
msgstr "Specifica il percorso di ulteriori dati usati dal gioco"
-#: gui/launcher.cpp:332 gui/options.cpp:1152
+#: gui/launcher.cpp:332 gui/options.cpp:1150
msgctxt "lowres"
msgid "Extra Path:"
msgstr "Perc. extra:"
-#: gui/launcher.cpp:339 gui/options.cpp:1134
+#: gui/launcher.cpp:339 gui/options.cpp:1132
msgid "Save Path:"
msgstr "Salvataggi:"
#: gui/launcher.cpp:339 gui/launcher.cpp:341 gui/launcher.cpp:342
-#: gui/options.cpp:1134 gui/options.cpp:1136 gui/options.cpp:1137
+#: gui/options.cpp:1132 gui/options.cpp:1134 gui/options.cpp:1135
msgid "Specifies where your saved games are put"
msgstr "Specifica dove archiviare i salvataggi"
-#: gui/launcher.cpp:341 gui/options.cpp:1136
+#: gui/launcher.cpp:341 gui/options.cpp:1134
msgctxt "lowres"
msgid "Save Path:"
msgstr "Salvataggi:"
#: gui/launcher.cpp:360 gui/launcher.cpp:459 gui/launcher.cpp:517
-#: gui/launcher.cpp:571 gui/options.cpp:1145 gui/options.cpp:1153
-#: gui/options.cpp:1162 gui/options.cpp:1277 gui/options.cpp:1283
-#: gui/options.cpp:1291 gui/options.cpp:1321 gui/options.cpp:1327
-#: gui/options.cpp:1334 gui/options.cpp:1427 gui/options.cpp:1430
-#: gui/options.cpp:1442
+#: gui/launcher.cpp:571 gui/options.cpp:1143 gui/options.cpp:1151
+#: gui/options.cpp:1160 gui/options.cpp:1275 gui/options.cpp:1281
+#: gui/options.cpp:1289 gui/options.cpp:1319 gui/options.cpp:1325
+#: gui/options.cpp:1332 gui/options.cpp:1425 gui/options.cpp:1428
+#: gui/options.cpp:1440
msgctxt "path"
msgid "None"
msgstr "Nessuno"
#: gui/launcher.cpp:365 gui/launcher.cpp:465 gui/launcher.cpp:575
-#: gui/options.cpp:1271 gui/options.cpp:1315 gui/options.cpp:1433
+#: gui/options.cpp:1269 gui/options.cpp:1313 gui/options.cpp:1431
#: backends/platform/wii/options.cpp:56
msgid "Default"
msgstr "Predefinito"
-#: gui/launcher.cpp:510 gui/options.cpp:1436
+#: gui/launcher.cpp:510 gui/options.cpp:1434
msgid "Select SoundFont"
msgstr "Seleziona SoundFont"
@@ -356,7 +370,7 @@ msgstr "Seleziona la cartella contenente i file di gioco"
msgid "Select additional game directory"
msgstr "Seleziona la cartella di gioco aggiuntiva"
-#: gui/launcher.cpp:559 gui/options.cpp:1379
+#: gui/launcher.cpp:559 gui/options.cpp:1377
msgid "Select directory for saved games"
msgstr "Seleziona la cartella dei salvataggi"
@@ -557,6 +571,24 @@ msgstr "%d cartelle analizzate..."
msgid "Discovered %d new games, ignored %d previously added games ..."
msgstr "Rilevati %d nuovi giochi, ignorati %d giochi aggiunti in precedenza..."
+#: gui/onscreendialog.cpp:101 gui/onscreendialog.cpp:103
+msgid "Stop"
+msgstr ""
+
+#: gui/onscreendialog.cpp:106
+msgid "Edit record description"
+msgstr ""
+
+#: gui/onscreendialog.cpp:108
+#, fuzzy
+msgid "Switch to Game"
+msgstr "Sposta"
+
+#: gui/onscreendialog.cpp:110
+#, fuzzy
+msgid "Fast replay"
+msgstr "Modalitр veloce"
+
#: gui/options.cpp:85
msgid "Never"
msgstr "Mai"
@@ -597,8 +629,8 @@ msgstr "44 kHz"
msgid "48 kHz"
msgstr "48 kHz"
-#: gui/options.cpp:255 gui/options.cpp:481 gui/options.cpp:582
-#: gui/options.cpp:651 gui/options.cpp:859
+#: gui/options.cpp:255 gui/options.cpp:479 gui/options.cpp:580
+#: gui/options.cpp:649 gui/options.cpp:857
msgctxt "soundfont"
msgid "None"
msgstr "Nessuno"
@@ -619,72 +651,72 @@ msgstr "impossibile modificare l'impostazione schermo intero"
msgid "the aspect ratio setting could not be changed"
msgstr "impossibile modificare l'impostazione proporzioni"
-#: gui/options.cpp:734
+#: gui/options.cpp:732
msgid "Graphics mode:"
msgstr "Modalitр:"
-#: gui/options.cpp:748
+#: gui/options.cpp:746
msgid "Render mode:"
msgstr "Resa grafica:"
-#: gui/options.cpp:748 gui/options.cpp:749
+#: gui/options.cpp:746 gui/options.cpp:747
msgid "Special dithering modes supported by some games"
msgstr "Modalitр di resa grafica speciali supportate da alcuni giochi"
-#: gui/options.cpp:760
+#: gui/options.cpp:758
#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2298
msgid "Fullscreen mode"
msgstr "Modalitр a schermo intero"
-#: gui/options.cpp:763
+#: gui/options.cpp:761
msgid "Aspect ratio correction"
msgstr "Correzione proporzioni"
-#: gui/options.cpp:763
+#: gui/options.cpp:761
msgid "Correct aspect ratio for 320x200 games"
msgstr "Corregge le proporzioni dei giochi 320x200"
-#: gui/options.cpp:771
+#: gui/options.cpp:769
msgid "Preferred Device:"
msgstr "Disp. preferito:"
-#: gui/options.cpp:771
+#: gui/options.cpp:769
msgid "Music Device:"
msgstr "Dispositivo audio:"
-#: gui/options.cpp:771 gui/options.cpp:773
+#: gui/options.cpp:769 gui/options.cpp:771
msgid "Specifies preferred sound device or sound card emulator"
msgstr ""
"Specifica il dispositivo audio o l'emulatore della scheda audio preferiti"
-#: gui/options.cpp:771 gui/options.cpp:773 gui/options.cpp:774
+#: gui/options.cpp:769 gui/options.cpp:771 gui/options.cpp:772
msgid "Specifies output sound device or sound card emulator"
msgstr ""
"Specifica il dispositivo di output audio o l'emulatore della scheda audio"
-#: gui/options.cpp:773
+#: gui/options.cpp:771
msgctxt "lowres"
msgid "Preferred Dev.:"
msgstr "Disp. preferito:"
-#: gui/options.cpp:773
+#: gui/options.cpp:771
msgctxt "lowres"
msgid "Music Device:"
msgstr "Disposit. audio:"
-#: gui/options.cpp:800
+#: gui/options.cpp:798
msgid "AdLib emulator:"
msgstr "Emulatore AdLib:"
-#: gui/options.cpp:800 gui/options.cpp:801
+#: gui/options.cpp:798 gui/options.cpp:799
msgid "AdLib is used for music in many games"
msgstr "AdLib ш utilizzato per la musica in molti giochi"
-#: gui/options.cpp:811
+#: gui/options.cpp:809
msgid "Output rate:"
msgstr "Frequenza:"
-#: gui/options.cpp:811 gui/options.cpp:812
+#: gui/options.cpp:809 gui/options.cpp:810
msgid ""
"Higher value specifies better sound quality but may be not supported by your "
"soundcard"
@@ -692,66 +724,66 @@ msgstr ""
"Valori piљ alti restituiscono un suono di maggior qualitр, ma potrebbero non "
"essere supportati dalla tua scheda audio"
-#: gui/options.cpp:822
+#: gui/options.cpp:820
msgid "GM Device:"
msgstr "Dispositivo GM:"
-#: gui/options.cpp:822
+#: gui/options.cpp:820
msgid "Specifies default sound device for General MIDI output"
msgstr "Specifica il dispositivo audio predefinito per l'output General MIDI"
-#: gui/options.cpp:833
+#: gui/options.cpp:831
msgid "Don't use General MIDI music"
msgstr "Non utilizzare la musica General MIDI"
-#: gui/options.cpp:844 gui/options.cpp:910
+#: gui/options.cpp:842 gui/options.cpp:908
msgid "Use first available device"
msgstr "Utilizza il primo dispositivo disponibile"
-#: gui/options.cpp:856
+#: gui/options.cpp:854
msgid "SoundFont:"
msgstr "SoundFont:"
-#: gui/options.cpp:856 gui/options.cpp:858 gui/options.cpp:859
+#: gui/options.cpp:854 gui/options.cpp:856 gui/options.cpp:857
msgid "SoundFont is supported by some audio cards, FluidSynth and Timidity"
msgstr "SoundFont ш supportato da alcune schede audio, FluidSynth e Timidity"
-#: gui/options.cpp:858
+#: gui/options.cpp:856
msgctxt "lowres"
msgid "SoundFont:"
msgstr "SoundFont:"
-#: gui/options.cpp:864
+#: gui/options.cpp:862
msgid "Mixed AdLib/MIDI mode"
msgstr "Modalitр mista AdLib/MIDI"
-#: gui/options.cpp:864
+#: gui/options.cpp:862
msgid "Use both MIDI and AdLib sound generation"
msgstr "Utilizza generazione di suono sia MIDI che AdLib"
-#: gui/options.cpp:867
+#: gui/options.cpp:865
msgid "MIDI gain:"
msgstr "Guadagno MIDI:"
-#: gui/options.cpp:874
+#: gui/options.cpp:872
msgid "FluidSynth Settings"
msgstr "Impostazioni FluidSynth"
-#: gui/options.cpp:881
+#: gui/options.cpp:879
msgid "MT-32 Device:"
msgstr "Disposit. MT-32:"
-#: gui/options.cpp:881
+#: gui/options.cpp:879
msgid "Specifies default sound device for Roland MT-32/LAPC1/CM32l/CM64 output"
msgstr ""
"Specifica il dispositivo audio predefinito per l'output Roland MT-32/LAPC1/"
"CM32l/CM64"
-#: gui/options.cpp:886
+#: gui/options.cpp:884
msgid "True Roland MT-32 (disable GM emulation)"
msgstr "Roland MT-32 effettivo (disattiva emulazione GM)"
-#: gui/options.cpp:886 gui/options.cpp:888
+#: gui/options.cpp:884 gui/options.cpp:886
msgid ""
"Check if you want to use your real hardware Roland-compatible sound device "
"connected to your computer"
@@ -759,16 +791,16 @@ msgstr ""
"Seleziona se vuoi usare il dispositivo hardware audio compatibile con Roland "
"che ш connesso al tuo computer"
-#: gui/options.cpp:888
+#: gui/options.cpp:886
msgctxt "lowres"
msgid "True Roland MT-32 (no GM emulation)"
msgstr "Roland MT-32 effettivo (disat.emul.GM)"
-#: gui/options.cpp:891
+#: gui/options.cpp:889
msgid "Roland GS Device (enable MT-32 mappings)"
msgstr "Dispositivo Roland GS (attiva mappature MT-32)"
-#: gui/options.cpp:891
+#: gui/options.cpp:889
msgid ""
"Check if you want to enable patch mappings to emulate an MT-32 on a Roland "
"GS device"
@@ -776,173 +808,173 @@ msgstr ""
"Seleziona se vuoi attivare le mappature per emulare un MT-32 su un "
"dispositivo Roland GS"
-#: gui/options.cpp:900
+#: gui/options.cpp:898
msgid "Don't use Roland MT-32 music"
msgstr "Non utilizzare la musica Roland MT-32"
-#: gui/options.cpp:927
+#: gui/options.cpp:925
msgid "Text and Speech:"
msgstr "Testo e voci:"
-#: gui/options.cpp:931 gui/options.cpp:941
+#: gui/options.cpp:929 gui/options.cpp:939
msgid "Speech"
msgstr "Voci"
-#: gui/options.cpp:932 gui/options.cpp:942
+#: gui/options.cpp:930 gui/options.cpp:940
msgid "Subtitles"
msgstr "Sottotitoli"
-#: gui/options.cpp:933
+#: gui/options.cpp:931
msgid "Both"
msgstr "Entrambi"
-#: gui/options.cpp:935
+#: gui/options.cpp:933
msgid "Subtitle speed:"
msgstr "Velocitр testo:"
-#: gui/options.cpp:937
+#: gui/options.cpp:935
msgctxt "lowres"
msgid "Text and Speech:"
msgstr "Testo e voci:"
-#: gui/options.cpp:941
+#: gui/options.cpp:939
msgid "Spch"
msgstr "Voci"
-#: gui/options.cpp:942
+#: gui/options.cpp:940
msgid "Subs"
msgstr "Sub"
-#: gui/options.cpp:943
+#: gui/options.cpp:941
msgctxt "lowres"
msgid "Both"
msgstr "Entr."
-#: gui/options.cpp:943
+#: gui/options.cpp:941
msgid "Show subtitles and play speech"
msgstr "Mostra i sottotitoli e attiva le voci"
-#: gui/options.cpp:945
+#: gui/options.cpp:943
msgctxt "lowres"
msgid "Subtitle speed:"
msgstr "Velocitр testo:"
-#: gui/options.cpp:961
+#: gui/options.cpp:959
msgid "Music volume:"
msgstr "Volume musica:"
-#: gui/options.cpp:963
+#: gui/options.cpp:961
msgctxt "lowres"
msgid "Music volume:"
msgstr "Volume musica:"
-#: gui/options.cpp:970
+#: gui/options.cpp:968
msgid "Mute All"
msgstr "Disattiva audio"
-#: gui/options.cpp:973
+#: gui/options.cpp:971
msgid "SFX volume:"
msgstr "Volume effetti:"
-#: gui/options.cpp:973 gui/options.cpp:975 gui/options.cpp:976
+#: gui/options.cpp:971 gui/options.cpp:973 gui/options.cpp:974
msgid "Special sound effects volume"
msgstr "Volume degli effetti sonori"
-#: gui/options.cpp:975
+#: gui/options.cpp:973
msgctxt "lowres"
msgid "SFX volume:"
msgstr "Volume effetti:"
-#: gui/options.cpp:983
+#: gui/options.cpp:981
msgid "Speech volume:"
msgstr "Volume voci:"
-#: gui/options.cpp:985
+#: gui/options.cpp:983
msgctxt "lowres"
msgid "Speech volume:"
msgstr "Volume voci:"
-#: gui/options.cpp:1142
+#: gui/options.cpp:1140
msgid "Theme Path:"
msgstr "Percorso tema:"
-#: gui/options.cpp:1144
+#: gui/options.cpp:1142
msgctxt "lowres"
msgid "Theme Path:"
msgstr "Perc. tema:"
-#: gui/options.cpp:1150 gui/options.cpp:1152 gui/options.cpp:1153
+#: gui/options.cpp:1148 gui/options.cpp:1150 gui/options.cpp:1151
msgid "Specifies path to additional data used by all games or ScummVM"
msgstr "Specifica il percorso di ulteriori dati usati dai giochi o da ScummVM"
-#: gui/options.cpp:1159
+#: gui/options.cpp:1157
msgid "Plugins Path:"
msgstr "Percorso plugin:"
-#: gui/options.cpp:1161
+#: gui/options.cpp:1159
msgctxt "lowres"
msgid "Plugins Path:"
msgstr "Perc. plugin:"
-#: gui/options.cpp:1170 gui/fluidsynth-dialog.cpp:138
+#: gui/options.cpp:1168 gui/fluidsynth-dialog.cpp:138
msgid "Misc"
msgstr "Varie"
-#: gui/options.cpp:1172
+#: gui/options.cpp:1170
msgctxt "lowres"
msgid "Misc"
msgstr "Varie"
-#: gui/options.cpp:1174
+#: gui/options.cpp:1172
msgid "Theme:"
msgstr "Tema:"
-#: gui/options.cpp:1178
+#: gui/options.cpp:1176
msgid "GUI Renderer:"
msgstr "Renderer GUI:"
-#: gui/options.cpp:1190
+#: gui/options.cpp:1188
msgid "Autosave:"
msgstr "Autosalva:"
-#: gui/options.cpp:1192
+#: gui/options.cpp:1190
msgctxt "lowres"
msgid "Autosave:"
msgstr "Autosalva:"
-#: gui/options.cpp:1200
+#: gui/options.cpp:1198
msgid "Keys"
msgstr "Tasti"
-#: gui/options.cpp:1207
+#: gui/options.cpp:1205
msgid "GUI Language:"
msgstr "Lingua GUI:"
-#: gui/options.cpp:1207
+#: gui/options.cpp:1205
msgid "Language of ScummVM GUI"
msgstr "Lingua dell'interfaccia grafica di ScummVM"
-#: gui/options.cpp:1366
+#: gui/options.cpp:1364
msgid "You have to restart ScummVM before your changes will take effect."
msgstr "Devi riavviare ScummVM affinchщ le modifiche abbiano effetto."
-#: gui/options.cpp:1386
+#: gui/options.cpp:1384
msgid "The chosen directory cannot be written to. Please select another one."
msgstr "La cartella scelta ш in sola lettura. Si prega di sceglierne un'altra."
-#: gui/options.cpp:1395
+#: gui/options.cpp:1393
msgid "Select directory for GUI themes"
msgstr "Seleziona la cartella dei temi dell'interfaccia"
-#: gui/options.cpp:1405
+#: gui/options.cpp:1403
msgid "Select directory for extra files"
msgstr "Seleziona la cartella dei file aggiuntivi"
-#: gui/options.cpp:1416
+#: gui/options.cpp:1414
msgid "Select directory for plugins"
msgstr "Seleziona la cartella dei plugin"
-#: gui/options.cpp:1469
+#: gui/options.cpp:1467
msgid ""
"The theme you selected does not support your current language. If you want "
"to use this theme you need to switch to another language first."
@@ -950,6 +982,29 @@ msgstr ""
"Il tema che hai selezionato non supporta la lingua attuale. Se vuoi "
"utilizzare questo tema devi prima cambiare la lingua."
+#. I18N: You must leave "#" as is, only word 'next' is translatable
+#: gui/predictivedialog.cpp:87
+msgid "# next"
+msgstr ""
+
+#: gui/predictivedialog.cpp:88
+msgid "add"
+msgstr ""
+
+#: gui/predictivedialog.cpp:92
+#, fuzzy
+msgid "Delete char"
+msgstr "Elimina"
+
+#: gui/predictivedialog.cpp:96
+msgid "<"
+msgstr ""
+
+#. I18N: Pre means 'Predictive', leave '*' as is
+#: gui/predictivedialog.cpp:98
+msgid "* Pre"
+msgstr ""
+
#: gui/recorderdialog.cpp:64
msgid "Recorder or Playback Gameplay"
msgstr ""
@@ -987,6 +1042,11 @@ msgstr ""
msgid "Do you really want to delete this record?"
msgstr "Sei sicuro di voler eliminare questo salvataggio?"
+#: gui/recorderdialog.cpp:174
+#, fuzzy
+msgid "Unknown Author"
+msgstr "Errore sconosciuto"
+
#: gui/saveload-dialog.cpp:167
msgid "List view"
msgstr "Elenco"
@@ -1439,14 +1499,18 @@ msgstr ""
msgid "Start anyway"
msgstr "Avvia comunque"
-#: audio/fmopl.cpp:50
+#: audio/fmopl.cpp:62
msgid "MAME OPL emulator"
msgstr "Emulatore OPL MAME"
-#: audio/fmopl.cpp:52
+#: audio/fmopl.cpp:64
msgid "DOSBox OPL emulator"
msgstr "Emulatore OPL DOSBox"
+#: audio/fmopl.cpp:67
+msgid "ALSA Direct FM"
+msgstr ""
+
#: audio/mididrv.cpp:209
#, c-format
msgid ""
@@ -1496,7 +1560,7 @@ msgstr "Nessuna musica"
msgid "Amiga Audio Emulator"
msgstr "Emulatore audio Amiga"
-#: audio/softsynth/adlib.cpp:2285
+#: audio/adlib.cpp:2291
msgid "AdLib Emulator"
msgstr "Emulatore AdLib"
@@ -2128,14 +2192,13 @@ msgstr "Clic disattivato"
#: engines/agi/detection.cpp:147 engines/drascula/detection.cpp:302
#: engines/dreamweb/detection.cpp:47 engines/neverhood/detection.cpp:160
#: engines/sci/detection.cpp:394 engines/toltecs/detection.cpp:200
-#: engines/zvision/detection.cpp:246
+#: engines/zvision/detection_tables.h:51
msgid "Use original save/load screens"
msgstr "Usa schermate di salvataggio originali"
#: engines/agi/detection.cpp:148 engines/drascula/detection.cpp:303
#: engines/dreamweb/detection.cpp:48 engines/neverhood/detection.cpp:161
#: engines/sci/detection.cpp:395 engines/toltecs/detection.cpp:201
-#: engines/zvision/detection.cpp:247
msgid "Use the original save/load screens, instead of the ScummVM ones"
msgstr ""
"Usa le schermate originali di salvataggio e caricamento, al posto di quelle "
@@ -3275,6 +3338,25 @@ msgstr "Vola a destra"
msgid "Fly to lower right"
msgstr "Vola in basso a destra"
+#: engines/scumm/input.cpp:572
+#, fuzzy
+msgid "Snap scroll on"
+msgstr "Scorrimento morbido"
+
+#: engines/scumm/input.cpp:574
+msgid "Snap scroll off"
+msgstr ""
+
+#: engines/scumm/input.cpp:587
+#, fuzzy
+msgid "Music volume: "
+msgstr "Volume musica:"
+
+#: engines/scumm/input.cpp:604
+#, fuzzy
+msgid "Subtitle speed: "
+msgstr "Velocitр testo:"
+
#: engines/scumm/scumm.cpp:1832
#, c-format
msgid ""
@@ -3431,39 +3513,46 @@ msgstr ""
msgid "Show the current number of frames per second in the upper left corner"
msgstr ""
-#: engines/zvision/detection.cpp:256
+#: engines/zvision/detection_tables.h:52
+#, fuzzy
+msgid "Use the original save/load screens instead of the ScummVM interface"
+msgstr ""
+"Usa le schermate originali di salvataggio e caricamento, al posto di quelle "
+"di ScummVM"
+
+#: engines/zvision/detection_tables.h:61
msgid "Double FPS"
msgstr ""
-#: engines/zvision/detection.cpp:257
-msgid "Increase game FPS from 30 to 60"
+#: engines/zvision/detection_tables.h:62
+msgid "Increase framerate from 30 to 60 FPS"
msgstr ""
-#: engines/zvision/detection.cpp:266
+#: engines/zvision/detection_tables.h:71
#, fuzzy
msgid "Enable Venus"
msgstr "Attiva la modalitр elio"
-#: engines/zvision/detection.cpp:267
+#: engines/zvision/detection_tables.h:72
+#, fuzzy
msgid "Enable the Venus help system"
-msgstr ""
+msgstr "Attiva la modalitр elio"
-#: engines/zvision/detection.cpp:276
+#: engines/zvision/detection_tables.h:81
msgid "Disable animation while turning"
msgstr ""
-#: engines/zvision/detection.cpp:277
-msgid "Disable animation while turning in panoramic mode"
+#: engines/zvision/detection_tables.h:82
+msgid "Disable animation while turning in panorama mode"
msgstr ""
-#: engines/zvision/detection.cpp:286
-msgid "Use the hires MPEG movies"
+#: engines/zvision/detection_tables.h:91
+msgid "Use high resolution MPEG video"
msgstr ""
-#: engines/zvision/detection.cpp:287
+#: engines/zvision/detection_tables.h:92
#, fuzzy
-msgid ""
-"Use the hires MPEG movies of the DVD version, instead of the lowres AVI ones"
+msgid "Use MPEG video from the DVD version, instead of lower resolution AVI"
msgstr ""
"Usa il set alternativo di cursori d'argento al posto di quelli normali d'oro"
diff --git a/po/nb_NO.po b/po/nb_NO.po
index 1c73957a54..086cb488a7 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.sf.net\n"
-"POT-Creation-Date: 2015-06-30 20:57+0100\n"
+"POT-Creation-Date: 2015-10-11 18:59+0100\n"
"PO-Revision-Date: 2014-07-11 00:02+0100\n"
"Last-Translator: Einar Johan Trјan Sјmхen <einarjohants@gmail.com>\n"
"Language-Team: somaen <einarjohants@gmail.com>\n"
@@ -32,7 +32,7 @@ msgstr "Funksjoner innkompilert:"
msgid "Available engines:"
msgstr "Tilgjengelige motorer:"
-#: gui/browser.cpp:68
+#: gui/browser.cpp:68 gui/browser_osx.mm:104
msgid "Show hidden files"
msgstr "Vis skjulte filer"
@@ -53,13 +53,14 @@ msgctxt "lowres"
msgid "Go up"
msgstr "Oppover"
-#: gui/browser.cpp:75 gui/chooser.cpp:46 gui/KeysDialog.cpp:43
-#: gui/launcher.cpp:351 gui/massadd.cpp:95 gui/options.cpp:1239
-#: gui/recorderdialog.cpp:70 gui/recorderdialog.cpp:156
-#: gui/saveload-dialog.cpp:216 gui/saveload-dialog.cpp:276
-#: gui/saveload-dialog.cpp:547 gui/saveload-dialog.cpp:931
-#: gui/themebrowser.cpp:55 gui/fluidsynth-dialog.cpp:152
-#: engines/engine.cpp:483 backends/platform/wii/options.cpp:48
+#: gui/browser.cpp:75 gui/chooser.cpp:46 gui/editrecorddialog.cpp:67
+#: gui/KeysDialog.cpp:43 gui/launcher.cpp:351 gui/massadd.cpp:95
+#: gui/options.cpp:1237 gui/predictivedialog.cpp:74 gui/recorderdialog.cpp:70
+#: gui/recorderdialog.cpp:156 gui/saveload-dialog.cpp:216
+#: gui/saveload-dialog.cpp:276 gui/saveload-dialog.cpp:547
+#: gui/saveload-dialog.cpp:931 gui/themebrowser.cpp:55
+#: gui/fluidsynth-dialog.cpp:152 engines/engine.cpp:483
+#: backends/platform/wii/options.cpp:48
#: backends/events/default/default-events.cpp:196
#: backends/events/default/default-events.cpp:218
#: engines/drascula/saveload.cpp:49 engines/parallaction/saveload.cpp:274
@@ -67,10 +68,27 @@ msgstr "Oppover"
msgid "Cancel"
msgstr "Avbryt"
-#: gui/browser.cpp:76 gui/chooser.cpp:47 gui/themebrowser.cpp:56
+#: gui/browser.cpp:76 gui/browser_osx.mm:103 gui/chooser.cpp:47
+#: gui/themebrowser.cpp:56
msgid "Choose"
msgstr "Velg"
+#: gui/editrecorddialog.cpp:58
+msgid "Author:"
+msgstr ""
+
+#: gui/editrecorddialog.cpp:59 gui/launcher.cpp:204
+msgid "Name:"
+msgstr "Navn:"
+
+#: gui/editrecorddialog.cpp:60
+msgid "Notes:"
+msgstr ""
+
+#: gui/editrecorddialog.cpp:68 gui/predictivedialog.cpp:75
+msgid "Ok"
+msgstr ""
+
#: gui/gui-manager.cpp:117 backends/keymapper/remap-dialog.cpp:53
#: engines/scumm/help.cpp:126 engines/scumm/help.cpp:141
#: engines/scumm/help.cpp:166 engines/scumm/help.cpp:192
@@ -103,7 +121,7 @@ msgid "Map"
msgstr "Koble"
#: gui/KeysDialog.cpp:42 gui/launcher.cpp:352 gui/launcher.cpp:1048
-#: gui/launcher.cpp:1052 gui/massadd.cpp:92 gui/options.cpp:1240
+#: gui/launcher.cpp:1052 gui/massadd.cpp:92 gui/options.cpp:1238
#: gui/saveload-dialog.cpp:932 gui/fluidsynth-dialog.cpp:153
#: engines/engine.cpp:402 engines/engine.cpp:413
#: backends/platform/wii/options.cpp:47
@@ -165,10 +183,6 @@ msgctxt "lowres"
msgid "ID:"
msgstr "ID:"
-#: gui/launcher.cpp:204
-msgid "Name:"
-msgstr "Navn:"
-
#: gui/launcher.cpp:204 gui/launcher.cpp:206 gui/launcher.cpp:207
msgid "Full title of the game"
msgstr "Full spilltittel"
@@ -191,7 +205,7 @@ msgstr ""
"versjon"
#: gui/launcher.cpp:212 gui/launcher.cpp:226 gui/options.cpp:87
-#: gui/options.cpp:737 gui/options.cpp:750 gui/options.cpp:1210
+#: gui/options.cpp:735 gui/options.cpp:748 gui/options.cpp:1208
#: audio/null.cpp:41
msgid "<default>"
msgstr "<standard>"
@@ -213,11 +227,11 @@ msgstr "Plattform:"
msgid "Engine"
msgstr "Motor"
-#: gui/launcher.cpp:245 gui/options.cpp:1073 gui/options.cpp:1090
+#: gui/launcher.cpp:245 gui/options.cpp:1071 gui/options.cpp:1088
msgid "Graphics"
msgstr "Grafikk"
-#: gui/launcher.cpp:245 gui/options.cpp:1073 gui/options.cpp:1090
+#: gui/launcher.cpp:245 gui/options.cpp:1071 gui/options.cpp:1088
msgid "GFX"
msgstr "GFX"
@@ -230,7 +244,7 @@ msgctxt "lowres"
msgid "Override global graphic settings"
msgstr "Overstyr globale grafikkinstillinger"
-#: gui/launcher.cpp:257 gui/options.cpp:1096
+#: gui/launcher.cpp:257 gui/options.cpp:1094
msgid "Audio"
msgstr "Lyd"
@@ -243,11 +257,11 @@ msgctxt "lowres"
msgid "Override global audio settings"
msgstr "Overstyr globale lydinstillinger"
-#: gui/launcher.cpp:271 gui/options.cpp:1101
+#: gui/launcher.cpp:271 gui/options.cpp:1099
msgid "Volume"
msgstr "Volum"
-#: gui/launcher.cpp:273 gui/options.cpp:1103
+#: gui/launcher.cpp:273 gui/options.cpp:1101
msgctxt "lowres"
msgid "Volume"
msgstr "Volum"
@@ -261,7 +275,7 @@ msgctxt "lowres"
msgid "Override global volume settings"
msgstr "Overstyr globale voluminstillinger"
-#: gui/launcher.cpp:286 gui/options.cpp:1111
+#: gui/launcher.cpp:286 gui/options.cpp:1109
msgid "MIDI"
msgstr "MIDI"
@@ -274,7 +288,7 @@ msgctxt "lowres"
msgid "Override global MIDI settings"
msgstr "Overstyr globale MIDI-instillinger"
-#: gui/launcher.cpp:300 gui/options.cpp:1117
+#: gui/launcher.cpp:300 gui/options.cpp:1115
msgid "MT-32"
msgstr "MT-32"
@@ -287,11 +301,11 @@ msgctxt "lowres"
msgid "Override global MT-32 settings"
msgstr "Overstyr globale MT-32-instillinger"
-#: gui/launcher.cpp:314 gui/options.cpp:1124
+#: gui/launcher.cpp:314 gui/options.cpp:1122
msgid "Paths"
msgstr "Sti"
-#: gui/launcher.cpp:316 gui/options.cpp:1126
+#: gui/launcher.cpp:316 gui/options.cpp:1124
msgctxt "lowres"
msgid "Paths"
msgstr "Sti"
@@ -305,7 +319,7 @@ msgctxt "lowres"
msgid "Game Path:"
msgstr "Spillsti:"
-#: gui/launcher.cpp:330 gui/options.cpp:1150
+#: gui/launcher.cpp:330 gui/options.cpp:1148
msgid "Extra Path:"
msgstr "Ekstrasti:"
@@ -313,42 +327,42 @@ msgstr "Ekstrasti:"
msgid "Specifies path to additional data used by the game"
msgstr "Bestemmer sti til ytterligere data brukt av spillet"
-#: gui/launcher.cpp:332 gui/options.cpp:1152
+#: gui/launcher.cpp:332 gui/options.cpp:1150
msgctxt "lowres"
msgid "Extra Path:"
msgstr "Ekstrasti:"
-#: gui/launcher.cpp:339 gui/options.cpp:1134
+#: gui/launcher.cpp:339 gui/options.cpp:1132
msgid "Save Path:"
msgstr "Lagringssti:"
#: gui/launcher.cpp:339 gui/launcher.cpp:341 gui/launcher.cpp:342
-#: gui/options.cpp:1134 gui/options.cpp:1136 gui/options.cpp:1137
+#: gui/options.cpp:1132 gui/options.cpp:1134 gui/options.cpp:1135
msgid "Specifies where your saved games are put"
msgstr "Bestemmer sti til lagrede spill"
-#: gui/launcher.cpp:341 gui/options.cpp:1136
+#: gui/launcher.cpp:341 gui/options.cpp:1134
msgctxt "lowres"
msgid "Save Path:"
msgstr "Lagringssti:"
#: gui/launcher.cpp:360 gui/launcher.cpp:459 gui/launcher.cpp:517
-#: gui/launcher.cpp:571 gui/options.cpp:1145 gui/options.cpp:1153
-#: gui/options.cpp:1162 gui/options.cpp:1277 gui/options.cpp:1283
-#: gui/options.cpp:1291 gui/options.cpp:1321 gui/options.cpp:1327
-#: gui/options.cpp:1334 gui/options.cpp:1427 gui/options.cpp:1430
-#: gui/options.cpp:1442
+#: gui/launcher.cpp:571 gui/options.cpp:1143 gui/options.cpp:1151
+#: gui/options.cpp:1160 gui/options.cpp:1275 gui/options.cpp:1281
+#: gui/options.cpp:1289 gui/options.cpp:1319 gui/options.cpp:1325
+#: gui/options.cpp:1332 gui/options.cpp:1425 gui/options.cpp:1428
+#: gui/options.cpp:1440
msgctxt "path"
msgid "None"
msgstr "Ingen"
#: gui/launcher.cpp:365 gui/launcher.cpp:465 gui/launcher.cpp:575
-#: gui/options.cpp:1271 gui/options.cpp:1315 gui/options.cpp:1433
+#: gui/options.cpp:1269 gui/options.cpp:1313 gui/options.cpp:1431
#: backends/platform/wii/options.cpp:56
msgid "Default"
msgstr "Standard"
-#: gui/launcher.cpp:510 gui/options.cpp:1436
+#: gui/launcher.cpp:510 gui/options.cpp:1434
msgid "Select SoundFont"
msgstr "Velg SoundFont"
@@ -360,7 +374,7 @@ msgstr "Velg mappe med spilldata"
msgid "Select additional game directory"
msgstr "Velg mappe med ytterligere data"
-#: gui/launcher.cpp:559 gui/options.cpp:1379
+#: gui/launcher.cpp:559 gui/options.cpp:1377
msgid "Select directory for saved games"
msgstr "Velg mappe for lagrede spill"
@@ -560,6 +574,24 @@ msgid "Discovered %d new games, ignored %d previously added games ..."
msgstr ""
"Fant %d nye spill, ignorerte %d spill som har blitt lagt til tidligere..."
+#: gui/onscreendialog.cpp:101 gui/onscreendialog.cpp:103
+msgid "Stop"
+msgstr ""
+
+#: gui/onscreendialog.cpp:106
+msgid "Edit record description"
+msgstr ""
+
+#: gui/onscreendialog.cpp:108
+#, fuzzy
+msgid "Switch to Game"
+msgstr "Bytt"
+
+#: gui/onscreendialog.cpp:110
+#, fuzzy
+msgid "Fast replay"
+msgstr "Rask modus"
+
#: gui/options.cpp:85
msgid "Never"
msgstr "Aldri"
@@ -600,8 +632,8 @@ msgstr "44 kHz"
msgid "48 kHz"
msgstr "48 kHz"
-#: gui/options.cpp:255 gui/options.cpp:481 gui/options.cpp:582
-#: gui/options.cpp:651 gui/options.cpp:859
+#: gui/options.cpp:255 gui/options.cpp:479 gui/options.cpp:580
+#: gui/options.cpp:649 gui/options.cpp:857
msgctxt "soundfont"
msgid "None"
msgstr "Ingen"
@@ -622,70 +654,70 @@ msgstr "fullskjermsinnstillingen kunne ikke endres"
msgid "the aspect ratio setting could not be changed"
msgstr "aspektrate-innstillingen kunne ikke endres"
-#: gui/options.cpp:734
+#: gui/options.cpp:732
msgid "Graphics mode:"
msgstr "Grafikkmodus:"
-#: gui/options.cpp:748
+#: gui/options.cpp:746
msgid "Render mode:"
msgstr "Tegnemodus:"
-#: gui/options.cpp:748 gui/options.cpp:749
+#: gui/options.cpp:746 gui/options.cpp:747
msgid "Special dithering modes supported by some games"
msgstr "Spesiel dithering-modus stјttet av enkelte spill"
-#: gui/options.cpp:760
+#: gui/options.cpp:758
#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2298
msgid "Fullscreen mode"
msgstr "Fullskjermsmodus"
-#: gui/options.cpp:763
+#: gui/options.cpp:761
msgid "Aspect ratio correction"
msgstr "Aspekt-rate korrigering"
-#: gui/options.cpp:763
+#: gui/options.cpp:761
msgid "Correct aspect ratio for 320x200 games"
msgstr "Korriger aspekt-rate for 320x200-spill"
-#: gui/options.cpp:771
+#: gui/options.cpp:769
msgid "Preferred Device:"
msgstr "Foretrukket enhet:"
-#: gui/options.cpp:771
+#: gui/options.cpp:769
msgid "Music Device:"
msgstr "Musikkenhet:"
-#: gui/options.cpp:771 gui/options.cpp:773
+#: gui/options.cpp:769 gui/options.cpp:771
msgid "Specifies preferred sound device or sound card emulator"
msgstr "Velger foretrukket lydenhet eller lydkort-emulator"
-#: gui/options.cpp:771 gui/options.cpp:773 gui/options.cpp:774
+#: gui/options.cpp:769 gui/options.cpp:771 gui/options.cpp:772
msgid "Specifies output sound device or sound card emulator"
msgstr "Velger ut-lydenhet eller lydkortemulator"
-#: gui/options.cpp:773
+#: gui/options.cpp:771
msgctxt "lowres"
msgid "Preferred Dev.:"
msgstr "Foretrukket enh.:"
-#: gui/options.cpp:773
+#: gui/options.cpp:771
msgctxt "lowres"
msgid "Music Device:"
msgstr "Musikkenhet:"
-#: gui/options.cpp:800
+#: gui/options.cpp:798
msgid "AdLib emulator:"
msgstr "AdLib-emulator:"
-#: gui/options.cpp:800 gui/options.cpp:801
+#: gui/options.cpp:798 gui/options.cpp:799
msgid "AdLib is used for music in many games"
msgstr "AdLib brukes til musikk i mange spill"
-#: gui/options.cpp:811
+#: gui/options.cpp:809
msgid "Output rate:"
msgstr "Utrate:"
-#: gui/options.cpp:811 gui/options.cpp:812
+#: gui/options.cpp:809 gui/options.cpp:810
msgid ""
"Higher value specifies better sound quality but may be not supported by your "
"soundcard"
@@ -693,64 +725,64 @@ msgstr ""
"Hјyere verdier gir bedre lydkvalitet, men stјttes kanskje ikke av ditt "
"lydkort "
-#: gui/options.cpp:822
+#: gui/options.cpp:820
msgid "GM Device:"
msgstr "GM-enhet:"
-#: gui/options.cpp:822
+#: gui/options.cpp:820
msgid "Specifies default sound device for General MIDI output"
msgstr "Velger standard lydenhet for General MIDI-utdata"
-#: gui/options.cpp:833
+#: gui/options.cpp:831
msgid "Don't use General MIDI music"
msgstr "Ikke bruk General MIDI-musikk"
-#: gui/options.cpp:844 gui/options.cpp:910
+#: gui/options.cpp:842 gui/options.cpp:908
msgid "Use first available device"
msgstr "Bruk fјrste tilgjengelige enhet"
-#: gui/options.cpp:856
+#: gui/options.cpp:854
msgid "SoundFont:"
msgstr "SoundFont:"
-#: gui/options.cpp:856 gui/options.cpp:858 gui/options.cpp:859
+#: gui/options.cpp:854 gui/options.cpp:856 gui/options.cpp:857
msgid "SoundFont is supported by some audio cards, FluidSynth and Timidity"
msgstr "SoundFont stјttes ikke av enkelte lydkort, FluidSynth og Timidity"
-#: gui/options.cpp:858
+#: gui/options.cpp:856
msgctxt "lowres"
msgid "SoundFont:"
msgstr "SoundFont:"
-#: gui/options.cpp:864
+#: gui/options.cpp:862
msgid "Mixed AdLib/MIDI mode"
msgstr "Mikset AdLib/MIDI-modus"
-#: gui/options.cpp:864
+#: gui/options.cpp:862
msgid "Use both MIDI and AdLib sound generation"
msgstr "Bruk bхde MIDI- og AdLib- lydgenerering"
-#: gui/options.cpp:867
+#: gui/options.cpp:865
msgid "MIDI gain:"
msgstr "MIDI gain:"
-#: gui/options.cpp:874
+#: gui/options.cpp:872
msgid "FluidSynth Settings"
msgstr "FluidSynth-instillinger"
-#: gui/options.cpp:881
+#: gui/options.cpp:879
msgid "MT-32 Device:"
msgstr "MT-32 Enhet:"
-#: gui/options.cpp:881
+#: gui/options.cpp:879
msgid "Specifies default sound device for Roland MT-32/LAPC1/CM32l/CM64 output"
msgstr "Velger standard lydenhet for Roland MT-32/LAPC1/CM32I/CM64-avspilling"
-#: gui/options.cpp:886
+#: gui/options.cpp:884
msgid "True Roland MT-32 (disable GM emulation)"
msgstr "Ekte Roland MT-32 (deaktiver GM-emulering)"
-#: gui/options.cpp:886 gui/options.cpp:888
+#: gui/options.cpp:884 gui/options.cpp:886
msgid ""
"Check if you want to use your real hardware Roland-compatible sound device "
"connected to your computer"
@@ -758,188 +790,188 @@ msgstr ""
"Velg hvis du har et ekte Roland-kompatible lydkort tilkoblet maskinen, og "
"vil bruke dette."
-#: gui/options.cpp:888
+#: gui/options.cpp:886
msgctxt "lowres"
msgid "True Roland MT-32 (no GM emulation)"
msgstr "Ekte Roland MT-32 (deaktiver GM-emulering)"
-#: gui/options.cpp:891
+#: gui/options.cpp:889
msgid "Roland GS Device (enable MT-32 mappings)"
msgstr "Roland GS Modus (aktiver MT32-mapping)"
-#: gui/options.cpp:891
+#: gui/options.cpp:889
msgid ""
"Check if you want to enable patch mappings to emulate an MT-32 on a Roland "
"GS device"
msgstr ""
-#: gui/options.cpp:900
+#: gui/options.cpp:898
msgid "Don't use Roland MT-32 music"
msgstr "Ikke bruk Roland MT-32-musikk"
-#: gui/options.cpp:927
+#: gui/options.cpp:925
msgid "Text and Speech:"
msgstr "Tekst og Tale:"
-#: gui/options.cpp:931 gui/options.cpp:941
+#: gui/options.cpp:929 gui/options.cpp:939
msgid "Speech"
msgstr "Tale"
-#: gui/options.cpp:932 gui/options.cpp:942
+#: gui/options.cpp:930 gui/options.cpp:940
msgid "Subtitles"
msgstr "Undertekster"
-#: gui/options.cpp:933
+#: gui/options.cpp:931
msgid "Both"
msgstr "Begge"
-#: gui/options.cpp:935
+#: gui/options.cpp:933
msgid "Subtitle speed:"
msgstr "Teksthastighet:"
-#: gui/options.cpp:937
+#: gui/options.cpp:935
msgctxt "lowres"
msgid "Text and Speech:"
msgstr "Tekst og Tale:"
-#: gui/options.cpp:941
+#: gui/options.cpp:939
msgid "Spch"
msgstr "Tale"
-#: gui/options.cpp:942
+#: gui/options.cpp:940
msgid "Subs"
msgstr "Tekst"
-#: gui/options.cpp:943
+#: gui/options.cpp:941
msgctxt "lowres"
msgid "Both"
msgstr "Begge"
-#: gui/options.cpp:943
+#: gui/options.cpp:941
msgid "Show subtitles and play speech"
msgstr "Vis undertekster, og spill av tale"
-#: gui/options.cpp:945
+#: gui/options.cpp:943
msgctxt "lowres"
msgid "Subtitle speed:"
msgstr "Underteksthastighet:"
-#: gui/options.cpp:961
+#: gui/options.cpp:959
msgid "Music volume:"
msgstr "Musikkvolum:"
-#: gui/options.cpp:963
+#: gui/options.cpp:961
msgctxt "lowres"
msgid "Music volume:"
msgstr "Musikkvolum:"
-#: gui/options.cpp:970
+#: gui/options.cpp:968
msgid "Mute All"
msgstr "Demp alle"
-#: gui/options.cpp:973
+#: gui/options.cpp:971
msgid "SFX volume:"
msgstr "Lydeffektvolum:"
-#: gui/options.cpp:973 gui/options.cpp:975 gui/options.cpp:976
+#: gui/options.cpp:971 gui/options.cpp:973 gui/options.cpp:974
msgid "Special sound effects volume"
msgstr "Volum for spesielle lydeffekter"
-#: gui/options.cpp:975
+#: gui/options.cpp:973
msgctxt "lowres"
msgid "SFX volume:"
msgstr "Lydeffektvolum:"
-#: gui/options.cpp:983
+#: gui/options.cpp:981
msgid "Speech volume:"
msgstr "Talevolum:"
-#: gui/options.cpp:985
+#: gui/options.cpp:983
msgctxt "lowres"
msgid "Speech volume:"
msgstr "Talevolum:"
-#: gui/options.cpp:1142
+#: gui/options.cpp:1140
msgid "Theme Path:"
msgstr "Temasti:"
-#: gui/options.cpp:1144
+#: gui/options.cpp:1142
msgctxt "lowres"
msgid "Theme Path:"
msgstr "Temasti:"
-#: gui/options.cpp:1150 gui/options.cpp:1152 gui/options.cpp:1153
+#: gui/options.cpp:1148 gui/options.cpp:1150 gui/options.cpp:1151
msgid "Specifies path to additional data used by all games or ScummVM"
msgstr "Velger sti for ytterligere data brukt av alle spill eller ScummVM"
-#: gui/options.cpp:1159
+#: gui/options.cpp:1157
msgid "Plugins Path:"
msgstr "Pluginsti:"
-#: gui/options.cpp:1161
+#: gui/options.cpp:1159
msgctxt "lowres"
msgid "Plugins Path:"
msgstr "Pluginsti:"
-#: gui/options.cpp:1170 gui/fluidsynth-dialog.cpp:138
+#: gui/options.cpp:1168 gui/fluidsynth-dialog.cpp:138
msgid "Misc"
msgstr "Diverse"
-#: gui/options.cpp:1172
+#: gui/options.cpp:1170
msgctxt "lowres"
msgid "Misc"
msgstr "Div"
-#: gui/options.cpp:1174
+#: gui/options.cpp:1172
msgid "Theme:"
msgstr "Tema:"
-#: gui/options.cpp:1178
+#: gui/options.cpp:1176
msgid "GUI Renderer:"
msgstr "GUI-tegner:"
-#: gui/options.cpp:1190
+#: gui/options.cpp:1188
msgid "Autosave:"
msgstr "Autolagre:"
-#: gui/options.cpp:1192
+#: gui/options.cpp:1190
msgctxt "lowres"
msgid "Autosave:"
msgstr "Autolagre:"
-#: gui/options.cpp:1200
+#: gui/options.cpp:1198
msgid "Keys"
msgstr "Taster"
-#: gui/options.cpp:1207
+#: gui/options.cpp:1205
msgid "GUI Language:"
msgstr "GUI-sprхk:"
-#: gui/options.cpp:1207
+#: gui/options.cpp:1205
msgid "Language of ScummVM GUI"
msgstr "Sprхk i ScummVM-GUIet"
-#: gui/options.cpp:1366
+#: gui/options.cpp:1364
msgid "You have to restart ScummVM before your changes will take effect."
msgstr "Du mх starte ScummVM pх nytt for at endringene skal tre i kraft. "
-#: gui/options.cpp:1386
+#: gui/options.cpp:1384
msgid "The chosen directory cannot be written to. Please select another one."
msgstr "Den valgte mappen kan ikke skrives til. Vennligst velg en annen."
-#: gui/options.cpp:1395
+#: gui/options.cpp:1393
msgid "Select directory for GUI themes"
msgstr "Velg mappe for GUI-temaer"
-#: gui/options.cpp:1405
+#: gui/options.cpp:1403
msgid "Select directory for extra files"
msgstr "Velg mappe for ytterligere filer"
-#: gui/options.cpp:1416
+#: gui/options.cpp:1414
msgid "Select directory for plugins"
msgstr "Velg mappe for plugins"
-#: gui/options.cpp:1469
+#: gui/options.cpp:1467
msgid ""
"The theme you selected does not support your current language. If you want "
"to use this theme you need to switch to another language first."
@@ -947,6 +979,29 @@ msgstr ""
"Temaet du valgte stјtter ikke det aktive sprхket. Hvis du vil bruke dette "
"temaet, mх du bytte til et annet sprхk fјrst."
+#. I18N: You must leave "#" as is, only word 'next' is translatable
+#: gui/predictivedialog.cpp:87
+msgid "# next"
+msgstr ""
+
+#: gui/predictivedialog.cpp:88
+msgid "add"
+msgstr ""
+
+#: gui/predictivedialog.cpp:92
+#, fuzzy
+msgid "Delete char"
+msgstr "Slett"
+
+#: gui/predictivedialog.cpp:96
+msgid "<"
+msgstr ""
+
+#. I18N: Pre means 'Predictive', leave '*' as is
+#: gui/predictivedialog.cpp:98
+msgid "* Pre"
+msgstr ""
+
#: gui/recorderdialog.cpp:64
msgid "Recorder or Playback Gameplay"
msgstr ""
@@ -984,6 +1039,11 @@ msgstr ""
msgid "Do you really want to delete this record?"
msgstr "Vil du virkelig slette dette lagrede spillet?"
+#: gui/recorderdialog.cpp:174
+#, fuzzy
+msgid "Unknown Author"
+msgstr "Ukjent feil"
+
#: gui/saveload-dialog.cpp:167
msgid "List view"
msgstr "Listevisning"
@@ -1432,14 +1492,18 @@ msgstr ""
msgid "Start anyway"
msgstr "Start allikevel"
-#: audio/fmopl.cpp:50
+#: audio/fmopl.cpp:62
msgid "MAME OPL emulator"
msgstr "MAME OPL emulator"
-#: audio/fmopl.cpp:52
+#: audio/fmopl.cpp:64
msgid "DOSBox OPL emulator"
msgstr "DOSBox OPL emulator"
+#: audio/fmopl.cpp:67
+msgid "ALSA Direct FM"
+msgstr ""
+
#: audio/mididrv.cpp:209
#, c-format
msgid ""
@@ -1489,7 +1553,7 @@ msgstr "Ingen musikk"
msgid "Amiga Audio Emulator"
msgstr "Amiga Lydemulator"
-#: audio/softsynth/adlib.cpp:2285
+#: audio/adlib.cpp:2291
msgid "AdLib Emulator"
msgstr "AdLib Emulator"
@@ -2122,14 +2186,13 @@ msgstr "Klikking deaktivert"
#: engines/agi/detection.cpp:147 engines/drascula/detection.cpp:302
#: engines/dreamweb/detection.cpp:47 engines/neverhood/detection.cpp:160
#: engines/sci/detection.cpp:394 engines/toltecs/detection.cpp:200
-#: engines/zvision/detection.cpp:246
+#: engines/zvision/detection_tables.h:51
msgid "Use original save/load screens"
msgstr "Bruk originale lagre/laste-skjermer"
#: engines/agi/detection.cpp:148 engines/drascula/detection.cpp:303
#: engines/dreamweb/detection.cpp:48 engines/neverhood/detection.cpp:161
#: engines/sci/detection.cpp:395 engines/toltecs/detection.cpp:201
-#: engines/zvision/detection.cpp:247
msgid "Use the original save/load screens, instead of the ScummVM ones"
msgstr "Bruk de originale lagre/laste-skjermene, istedenfor ScummVM-variantene"
@@ -3265,6 +3328,25 @@ msgstr "Fly til hјyre"
msgid "Fly to lower right"
msgstr "Fly til nedre hјyre"
+#: engines/scumm/input.cpp:572
+#, fuzzy
+msgid "Snap scroll on"
+msgstr "Myk scrolling"
+
+#: engines/scumm/input.cpp:574
+msgid "Snap scroll off"
+msgstr ""
+
+#: engines/scumm/input.cpp:587
+#, fuzzy
+msgid "Music volume: "
+msgstr "Musikkvolum:"
+
+#: engines/scumm/input.cpp:604
+#, fuzzy
+msgid "Subtitle speed: "
+msgstr "Teksthastighet:"
+
#: engines/scumm/scumm.cpp:1832
#, c-format
msgid ""
@@ -3413,39 +3495,44 @@ msgstr ""
msgid "Show the current number of frames per second in the upper left corner"
msgstr ""
-#: engines/zvision/detection.cpp:256
+#: engines/zvision/detection_tables.h:52
+#, fuzzy
+msgid "Use the original save/load screens instead of the ScummVM interface"
+msgstr "Bruk de originale lagre/laste-skjermene, istedenfor ScummVM-variantene"
+
+#: engines/zvision/detection_tables.h:61
msgid "Double FPS"
msgstr ""
-#: engines/zvision/detection.cpp:257
-msgid "Increase game FPS from 30 to 60"
+#: engines/zvision/detection_tables.h:62
+msgid "Increase framerate from 30 to 60 FPS"
msgstr ""
-#: engines/zvision/detection.cpp:266
+#: engines/zvision/detection_tables.h:71
#, fuzzy
msgid "Enable Venus"
msgstr "Aktiver helium-modus"
-#: engines/zvision/detection.cpp:267
+#: engines/zvision/detection_tables.h:72
+#, fuzzy
msgid "Enable the Venus help system"
-msgstr ""
+msgstr "Aktiver helium-modus"
-#: engines/zvision/detection.cpp:276
+#: engines/zvision/detection_tables.h:81
msgid "Disable animation while turning"
msgstr ""
-#: engines/zvision/detection.cpp:277
-msgid "Disable animation while turning in panoramic mode"
+#: engines/zvision/detection_tables.h:82
+msgid "Disable animation while turning in panorama mode"
msgstr ""
-#: engines/zvision/detection.cpp:286
-msgid "Use the hires MPEG movies"
+#: engines/zvision/detection_tables.h:91
+msgid "Use high resolution MPEG video"
msgstr ""
-#: engines/zvision/detection.cpp:287
+#: engines/zvision/detection_tables.h:92
#, fuzzy
-msgid ""
-"Use the hires MPEG movies of the DVD version, instead of the lowres AVI ones"
+msgid "Use MPEG video from the DVD version, instead of lower resolution AVI"
msgstr ""
"Bruk det alternative settet med sјlvmuspekere, istedenfor de normale gylne."
diff --git a/po/nl_NL.po b/po/nl_NL.po
index 970ff6ce8b..0f4548951d 100644
--- a/po/nl_NL.po
+++ b/po/nl_NL.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ScummVM 1.8.0git\n"
"Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n"
-"POT-Creation-Date: 2015-06-30 20:57+0100\n"
+"POT-Creation-Date: 2015-10-11 18:59+0100\n"
"PO-Revision-Date: 2014-11-25 20:46+0100\n"
"Last-Translator: Ben Castricum <scummvm@bencastricum.nl>\n"
"Language-Team: Ben Castricum <scummvm@bencastricum.nl>\n"
@@ -32,7 +32,7 @@ msgstr "Features meegecompileerd:"
msgid "Available engines:"
msgstr "Beschikbare engines:"
-#: gui/browser.cpp:68
+#: gui/browser.cpp:68 gui/browser_osx.mm:104
msgid "Show hidden files"
msgstr "Toon verborgen bestanden"
@@ -53,13 +53,14 @@ msgctxt "lowres"
msgid "Go up"
msgstr "Ga omhoog"
-#: gui/browser.cpp:75 gui/chooser.cpp:46 gui/KeysDialog.cpp:43
-#: gui/launcher.cpp:351 gui/massadd.cpp:95 gui/options.cpp:1239
-#: gui/recorderdialog.cpp:70 gui/recorderdialog.cpp:156
-#: gui/saveload-dialog.cpp:216 gui/saveload-dialog.cpp:276
-#: gui/saveload-dialog.cpp:547 gui/saveload-dialog.cpp:931
-#: gui/themebrowser.cpp:55 gui/fluidsynth-dialog.cpp:152
-#: engines/engine.cpp:483 backends/platform/wii/options.cpp:48
+#: gui/browser.cpp:75 gui/chooser.cpp:46 gui/editrecorddialog.cpp:67
+#: gui/KeysDialog.cpp:43 gui/launcher.cpp:351 gui/massadd.cpp:95
+#: gui/options.cpp:1237 gui/predictivedialog.cpp:74 gui/recorderdialog.cpp:70
+#: gui/recorderdialog.cpp:156 gui/saveload-dialog.cpp:216
+#: gui/saveload-dialog.cpp:276 gui/saveload-dialog.cpp:547
+#: gui/saveload-dialog.cpp:931 gui/themebrowser.cpp:55
+#: gui/fluidsynth-dialog.cpp:152 engines/engine.cpp:483
+#: backends/platform/wii/options.cpp:48
#: backends/events/default/default-events.cpp:196
#: backends/events/default/default-events.cpp:218
#: engines/drascula/saveload.cpp:49 engines/parallaction/saveload.cpp:274
@@ -67,10 +68,27 @@ msgstr "Ga omhoog"
msgid "Cancel"
msgstr "Annuleren"
-#: gui/browser.cpp:76 gui/chooser.cpp:47 gui/themebrowser.cpp:56
+#: gui/browser.cpp:76 gui/browser_osx.mm:103 gui/chooser.cpp:47
+#: gui/themebrowser.cpp:56
msgid "Choose"
msgstr "Selecteer"
+#: gui/editrecorddialog.cpp:58
+msgid "Author:"
+msgstr ""
+
+#: gui/editrecorddialog.cpp:59 gui/launcher.cpp:204
+msgid "Name:"
+msgstr "Naam:"
+
+#: gui/editrecorddialog.cpp:60
+msgid "Notes:"
+msgstr ""
+
+#: gui/editrecorddialog.cpp:68 gui/predictivedialog.cpp:75
+msgid "Ok"
+msgstr ""
+
#: gui/gui-manager.cpp:117 backends/keymapper/remap-dialog.cpp:53
#: engines/scumm/help.cpp:126 engines/scumm/help.cpp:141
#: engines/scumm/help.cpp:166 engines/scumm/help.cpp:192
@@ -103,7 +121,7 @@ msgid "Map"
msgstr "Koppel"
#: gui/KeysDialog.cpp:42 gui/launcher.cpp:352 gui/launcher.cpp:1048
-#: gui/launcher.cpp:1052 gui/massadd.cpp:92 gui/options.cpp:1240
+#: gui/launcher.cpp:1052 gui/massadd.cpp:92 gui/options.cpp:1238
#: gui/saveload-dialog.cpp:932 gui/fluidsynth-dialog.cpp:153
#: engines/engine.cpp:402 engines/engine.cpp:413
#: backends/platform/wii/options.cpp:47
@@ -165,10 +183,6 @@ msgctxt "lowres"
msgid "ID:"
msgstr "ID:"
-#: gui/launcher.cpp:204
-msgid "Name:"
-msgstr "Naam:"
-
#: gui/launcher.cpp:204 gui/launcher.cpp:206 gui/launcher.cpp:207
msgid "Full title of the game"
msgstr "Volledige titel van het spel"
@@ -191,7 +205,7 @@ msgstr ""
"Nederlandse."
#: gui/launcher.cpp:212 gui/launcher.cpp:226 gui/options.cpp:87
-#: gui/options.cpp:737 gui/options.cpp:750 gui/options.cpp:1210
+#: gui/options.cpp:735 gui/options.cpp:748 gui/options.cpp:1208
#: audio/null.cpp:41
msgid "<default>"
msgstr "<standaard>"
@@ -213,11 +227,11 @@ msgstr "Platform:"
msgid "Engine"
msgstr "Engine"
-#: gui/launcher.cpp:245 gui/options.cpp:1073 gui/options.cpp:1090
+#: gui/launcher.cpp:245 gui/options.cpp:1071 gui/options.cpp:1088
msgid "Graphics"
msgstr "Beeld"
-#: gui/launcher.cpp:245 gui/options.cpp:1073 gui/options.cpp:1090
+#: gui/launcher.cpp:245 gui/options.cpp:1071 gui/options.cpp:1088
msgid "GFX"
msgstr "GFX"
@@ -230,7 +244,7 @@ msgctxt "lowres"
msgid "Override global graphic settings"
msgstr "Negeer algemene grafische instellingen"
-#: gui/launcher.cpp:257 gui/options.cpp:1096
+#: gui/launcher.cpp:257 gui/options.cpp:1094
msgid "Audio"
msgstr "Geluid"
@@ -243,11 +257,11 @@ msgctxt "lowres"
msgid "Override global audio settings"
msgstr "Negeer algemene audio instellingen"
-#: gui/launcher.cpp:271 gui/options.cpp:1101
+#: gui/launcher.cpp:271 gui/options.cpp:1099
msgid "Volume"
msgstr "Volume"
-#: gui/launcher.cpp:273 gui/options.cpp:1103
+#: gui/launcher.cpp:273 gui/options.cpp:1101
msgctxt "lowres"
msgid "Volume"
msgstr "Volume"
@@ -261,7 +275,7 @@ msgctxt "lowres"
msgid "Override global volume settings"
msgstr "Negeer algemene volume instellingen"
-#: gui/launcher.cpp:286 gui/options.cpp:1111
+#: gui/launcher.cpp:286 gui/options.cpp:1109
msgid "MIDI"
msgstr "MIDI"
@@ -274,7 +288,7 @@ msgctxt "lowres"
msgid "Override global MIDI settings"
msgstr "Negeer algemene MIDI instellingen"
-#: gui/launcher.cpp:300 gui/options.cpp:1117
+#: gui/launcher.cpp:300 gui/options.cpp:1115
msgid "MT-32"
msgstr "MT-32"
@@ -287,11 +301,11 @@ msgctxt "lowres"
msgid "Override global MT-32 settings"
msgstr "Negeer algemene MT-32 instellingen"
-#: gui/launcher.cpp:314 gui/options.cpp:1124
+#: gui/launcher.cpp:314 gui/options.cpp:1122
msgid "Paths"
msgstr "Paden"
-#: gui/launcher.cpp:316 gui/options.cpp:1126
+#: gui/launcher.cpp:316 gui/options.cpp:1124
msgctxt "lowres"
msgid "Paths"
msgstr "Paden"
@@ -305,7 +319,7 @@ msgctxt "lowres"
msgid "Game Path:"
msgstr "Spel Pad:"
-#: gui/launcher.cpp:330 gui/options.cpp:1150
+#: gui/launcher.cpp:330 gui/options.cpp:1148
msgid "Extra Path:"
msgstr "Extra Pad:"
@@ -313,42 +327,42 @@ msgstr "Extra Pad:"
msgid "Specifies path to additional data used by the game"
msgstr "Specificeer pad naar additionele data voor het spel"
-#: gui/launcher.cpp:332 gui/options.cpp:1152
+#: gui/launcher.cpp:332 gui/options.cpp:1150
msgctxt "lowres"
msgid "Extra Path:"
msgstr "Extra Pad:"
-#: gui/launcher.cpp:339 gui/options.cpp:1134
+#: gui/launcher.cpp:339 gui/options.cpp:1132
msgid "Save Path:"
msgstr "Bewaar Pad:"
#: gui/launcher.cpp:339 gui/launcher.cpp:341 gui/launcher.cpp:342
-#: gui/options.cpp:1134 gui/options.cpp:1136 gui/options.cpp:1137
+#: gui/options.cpp:1132 gui/options.cpp:1134 gui/options.cpp:1135
msgid "Specifies where your saved games are put"
msgstr "Bepaalt waar opgeslagen spellen worden bewaard."
-#: gui/launcher.cpp:341 gui/options.cpp:1136
+#: gui/launcher.cpp:341 gui/options.cpp:1134
msgctxt "lowres"
msgid "Save Path:"
msgstr "Bewaar Pad:"
#: gui/launcher.cpp:360 gui/launcher.cpp:459 gui/launcher.cpp:517
-#: gui/launcher.cpp:571 gui/options.cpp:1145 gui/options.cpp:1153
-#: gui/options.cpp:1162 gui/options.cpp:1277 gui/options.cpp:1283
-#: gui/options.cpp:1291 gui/options.cpp:1321 gui/options.cpp:1327
-#: gui/options.cpp:1334 gui/options.cpp:1427 gui/options.cpp:1430
-#: gui/options.cpp:1442
+#: gui/launcher.cpp:571 gui/options.cpp:1143 gui/options.cpp:1151
+#: gui/options.cpp:1160 gui/options.cpp:1275 gui/options.cpp:1281
+#: gui/options.cpp:1289 gui/options.cpp:1319 gui/options.cpp:1325
+#: gui/options.cpp:1332 gui/options.cpp:1425 gui/options.cpp:1428
+#: gui/options.cpp:1440
msgctxt "path"
msgid "None"
msgstr "Geen"
#: gui/launcher.cpp:365 gui/launcher.cpp:465 gui/launcher.cpp:575
-#: gui/options.cpp:1271 gui/options.cpp:1315 gui/options.cpp:1433
+#: gui/options.cpp:1269 gui/options.cpp:1313 gui/options.cpp:1431
#: backends/platform/wii/options.cpp:56
msgid "Default"
msgstr "Standaard"
-#: gui/launcher.cpp:510 gui/options.cpp:1436
+#: gui/launcher.cpp:510 gui/options.cpp:1434
msgid "Select SoundFont"
msgstr "Selecteer SoundFont"
@@ -360,7 +374,7 @@ msgstr "Selecteer map met speldata"
msgid "Select additional game directory"
msgstr "Selecteer additionele speldatamap"
-#: gui/launcher.cpp:559 gui/options.cpp:1379
+#: gui/launcher.cpp:559 gui/options.cpp:1377
msgid "Select directory for saved games"
msgstr "Selecteer map voor opgeslagen spellen"
@@ -565,6 +579,24 @@ msgstr ""
"%d nieuwe spellen ontdekt, %d spellen die al eerder waren toegevoegd "
"genegeerd ..."
+#: gui/onscreendialog.cpp:101 gui/onscreendialog.cpp:103
+msgid "Stop"
+msgstr ""
+
+#: gui/onscreendialog.cpp:106
+msgid "Edit record description"
+msgstr ""
+
+#: gui/onscreendialog.cpp:108
+#, fuzzy
+msgid "Switch to Game"
+msgstr "Schakel"
+
+#: gui/onscreendialog.cpp:110
+#, fuzzy
+msgid "Fast replay"
+msgstr "Snelle modus"
+
#: gui/options.cpp:85
msgid "Never"
msgstr "Nooit"
@@ -605,8 +637,8 @@ msgstr "44 kHz"
msgid "48 kHz"
msgstr "48 kHz"
-#: gui/options.cpp:255 gui/options.cpp:481 gui/options.cpp:582
-#: gui/options.cpp:651 gui/options.cpp:859
+#: gui/options.cpp:255 gui/options.cpp:479 gui/options.cpp:580
+#: gui/options.cpp:649 gui/options.cpp:857
msgctxt "soundfont"
msgid "None"
msgstr "Geen"
@@ -627,70 +659,70 @@ msgstr "de volledig-scherminstelling kon niet veranderd worden"
msgid "the aspect ratio setting could not be changed"
msgstr "de pixelverhoudinginstelling kon niet veranderd worden"
-#: gui/options.cpp:734
+#: gui/options.cpp:732
msgid "Graphics mode:"
msgstr "Grafische modus:"
-#: gui/options.cpp:748
+#: gui/options.cpp:746
msgid "Render mode:"
msgstr "Render modus:"
-#: gui/options.cpp:748 gui/options.cpp:749
+#: gui/options.cpp:746 gui/options.cpp:747
msgid "Special dithering modes supported by some games"
msgstr "Speciale ditheringmodi die door sommige games ondersteund worden."
-#: gui/options.cpp:760
+#: gui/options.cpp:758
#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2298
msgid "Fullscreen mode"
msgstr "Volledig-scherm modus"
-#: gui/options.cpp:763
+#: gui/options.cpp:761
msgid "Aspect ratio correction"
msgstr "Pixelverhoudingcorrectie"
-#: gui/options.cpp:763
+#: gui/options.cpp:761
msgid "Correct aspect ratio for 320x200 games"
msgstr "Corrigeer de pixelverhouding voor 320x200 spellen."
-#: gui/options.cpp:771
+#: gui/options.cpp:769
msgid "Preferred Device:"
msgstr "Voorkeursapparaat:"
-#: gui/options.cpp:771
+#: gui/options.cpp:769
msgid "Music Device:"
msgstr "Muziekapparaat:"
-#: gui/options.cpp:771 gui/options.cpp:773
+#: gui/options.cpp:769 gui/options.cpp:771
msgid "Specifies preferred sound device or sound card emulator"
msgstr "Specificeert het voorkeurs geluidsapparaat of geluidskaartemulator"
-#: gui/options.cpp:771 gui/options.cpp:773 gui/options.cpp:774
+#: gui/options.cpp:769 gui/options.cpp:771 gui/options.cpp:772
msgid "Specifies output sound device or sound card emulator"
msgstr "Specificeert geluidsapparaat of geluidskaartemulator"
-#: gui/options.cpp:773
+#: gui/options.cpp:771
msgctxt "lowres"
msgid "Preferred Dev.:"
msgstr "Voorkeursapparaat:"
-#: gui/options.cpp:773
+#: gui/options.cpp:771
msgctxt "lowres"
msgid "Music Device:"
msgstr "Muziekapparaat:"
-#: gui/options.cpp:800
+#: gui/options.cpp:798
msgid "AdLib emulator:"
msgstr "AdLib emulator:"
-#: gui/options.cpp:800 gui/options.cpp:801
+#: gui/options.cpp:798 gui/options.cpp:799
msgid "AdLib is used for music in many games"
msgstr "AdLib word in vele spelen voor muziek gebruikt"
-#: gui/options.cpp:811
+#: gui/options.cpp:809
msgid "Output rate:"
msgstr "Output snelheid:"
-#: gui/options.cpp:811 gui/options.cpp:812
+#: gui/options.cpp:809 gui/options.cpp:810
msgid ""
"Higher value specifies better sound quality but may be not supported by your "
"soundcard"
@@ -698,67 +730,67 @@ msgstr ""
"Hogere waarden geven betere geluidskwaliteit maar worden mogelijk niet "
"ondersteund door uw geluidskaart."
-#: gui/options.cpp:822
+#: gui/options.cpp:820
msgid "GM Device:"
msgstr "GM Apparaat:"
-#: gui/options.cpp:822
+#: gui/options.cpp:820
msgid "Specifies default sound device for General MIDI output"
msgstr "Specificeert het standaard geluidsapparaat voor General MIDI"
-#: gui/options.cpp:833
+#: gui/options.cpp:831
msgid "Don't use General MIDI music"
msgstr "Geen General MIDI muziek gebruiken"
-#: gui/options.cpp:844 gui/options.cpp:910
+#: gui/options.cpp:842 gui/options.cpp:908
msgid "Use first available device"
msgstr "Gebruik eerst beschikbare apparaat"
-#: gui/options.cpp:856
+#: gui/options.cpp:854
msgid "SoundFont:"
msgstr "SoundFont:"
-#: gui/options.cpp:856 gui/options.cpp:858 gui/options.cpp:859
+#: gui/options.cpp:854 gui/options.cpp:856 gui/options.cpp:857
msgid "SoundFont is supported by some audio cards, FluidSynth and Timidity"
msgstr ""
"SoundFont wordt ondersteund door FluidSynth en Timidity en sommige "
"geluidskaarten."
-#: gui/options.cpp:858
+#: gui/options.cpp:856
msgctxt "lowres"
msgid "SoundFont:"
msgstr "SoundFont:"
-#: gui/options.cpp:864
+#: gui/options.cpp:862
msgid "Mixed AdLib/MIDI mode"
msgstr "Gemengde AdLib/MIDI modus"
-#: gui/options.cpp:864
+#: gui/options.cpp:862
msgid "Use both MIDI and AdLib sound generation"
msgstr "Gebruik zowel MIDI als AdLib geluid"
-#: gui/options.cpp:867
+#: gui/options.cpp:865
msgid "MIDI gain:"
msgstr "MIDI gain:"
-#: gui/options.cpp:874
+#: gui/options.cpp:872
msgid "FluidSynth Settings"
msgstr "FluidSynth Instellingen"
-#: gui/options.cpp:881
+#: gui/options.cpp:879
msgid "MT-32 Device:"
msgstr "MT-32 Apparaat:"
-#: gui/options.cpp:881
+#: gui/options.cpp:879
msgid "Specifies default sound device for Roland MT-32/LAPC1/CM32l/CM64 output"
msgstr ""
"Specificeert het standaard geluidsapparaat voor Roland MT-32/LAPC1/CM32l/CM64"
-#: gui/options.cpp:886
+#: gui/options.cpp:884
msgid "True Roland MT-32 (disable GM emulation)"
msgstr "Waarheidsgetrouwe Roland MT-32 (GM emulatie uitschakelen)"
-#: gui/options.cpp:886 gui/options.cpp:888
+#: gui/options.cpp:884 gui/options.cpp:886
msgid ""
"Check if you want to use your real hardware Roland-compatible sound device "
"connected to your computer"
@@ -766,16 +798,16 @@ msgstr ""
"Selecteer als u een hardware Roland-compatible geluidsapparaat gekoppeld aan "
"uw computer wilt gebruiken"
-#: gui/options.cpp:888
+#: gui/options.cpp:886
msgctxt "lowres"
msgid "True Roland MT-32 (no GM emulation)"
msgstr "Echte Roland MT-32 (geen GM emulatie)"
-#: gui/options.cpp:891
+#: gui/options.cpp:889
msgid "Roland GS Device (enable MT-32 mappings)"
msgstr "Roland GS Device (met MT-32 mappings)"
-#: gui/options.cpp:891
+#: gui/options.cpp:889
msgid ""
"Check if you want to enable patch mappings to emulate an MT-32 on a Roland "
"GS device"
@@ -783,175 +815,175 @@ msgstr ""
"Selecteer dit als u patchmappings wilt om een MT-32 op een Roland GS "
"apparaat te emuleren."
-#: gui/options.cpp:900
+#: gui/options.cpp:898
msgid "Don't use Roland MT-32 music"
msgstr "Geen Roland MT-32 muziek gebruiken"
-#: gui/options.cpp:927
+#: gui/options.cpp:925
msgid "Text and Speech:"
msgstr "Spraak en/of tekst:"
-#: gui/options.cpp:931 gui/options.cpp:941
+#: gui/options.cpp:929 gui/options.cpp:939
msgid "Speech"
msgstr "Spraak"
-#: gui/options.cpp:932 gui/options.cpp:942
+#: gui/options.cpp:930 gui/options.cpp:940
msgid "Subtitles"
msgstr "Tekst"
-#: gui/options.cpp:933
+#: gui/options.cpp:931
msgid "Both"
msgstr "Beide"
-#: gui/options.cpp:935
+#: gui/options.cpp:933
msgid "Subtitle speed:"
msgstr "Snelheid tekst:"
-#: gui/options.cpp:937
+#: gui/options.cpp:935
msgctxt "lowres"
msgid "Text and Speech:"
msgstr "Spraak en/of text:"
-#: gui/options.cpp:941
+#: gui/options.cpp:939
msgid "Spch"
msgstr "Sprk"
-#: gui/options.cpp:942
+#: gui/options.cpp:940
msgid "Subs"
msgstr "Text"
-#: gui/options.cpp:943
+#: gui/options.cpp:941
msgctxt "lowres"
msgid "Both"
msgstr "Beide"
-#: gui/options.cpp:943
+#: gui/options.cpp:941
msgid "Show subtitles and play speech"
msgstr "Toon tekst en speel spraak af"
-#: gui/options.cpp:945
+#: gui/options.cpp:943
msgctxt "lowres"
msgid "Subtitle speed:"
msgstr "Snelheid text:"
-#: gui/options.cpp:961
+#: gui/options.cpp:959
msgid "Music volume:"
msgstr "Muziek volume:"
-#: gui/options.cpp:963
+#: gui/options.cpp:961
msgctxt "lowres"
msgid "Music volume:"
msgstr "Muziek volume:"
-#: gui/options.cpp:970
+#: gui/options.cpp:968
msgid "Mute All"
msgstr "Alles Dempen"
-#: gui/options.cpp:973
+#: gui/options.cpp:971
msgid "SFX volume:"
msgstr "SFX volume:"
-#: gui/options.cpp:973 gui/options.cpp:975 gui/options.cpp:976
+#: gui/options.cpp:971 gui/options.cpp:973 gui/options.cpp:974
msgid "Special sound effects volume"
msgstr "Volume voor speciale geluidseffecten"
-#: gui/options.cpp:975
+#: gui/options.cpp:973
msgctxt "lowres"
msgid "SFX volume:"
msgstr "SFX volume:"
-#: gui/options.cpp:983
+#: gui/options.cpp:981
msgid "Speech volume:"
msgstr "Spraak volume:"
-#: gui/options.cpp:985
+#: gui/options.cpp:983
msgctxt "lowres"
msgid "Speech volume:"
msgstr "Spraak volume:"
-#: gui/options.cpp:1142
+#: gui/options.cpp:1140
msgid "Theme Path:"
msgstr "Thema Pad:"
-#: gui/options.cpp:1144
+#: gui/options.cpp:1142
msgctxt "lowres"
msgid "Theme Path:"
msgstr "Thema Pad:"
-#: gui/options.cpp:1150 gui/options.cpp:1152 gui/options.cpp:1153
+#: gui/options.cpp:1148 gui/options.cpp:1150 gui/options.cpp:1151
msgid "Specifies path to additional data used by all games or ScummVM"
msgstr ""
"Specificeert het pad for aanvullende data voor ScummVM zelf of de spellen."
-#: gui/options.cpp:1159
+#: gui/options.cpp:1157
msgid "Plugins Path:"
msgstr "Plugins Pad:"
-#: gui/options.cpp:1161
+#: gui/options.cpp:1159
msgctxt "lowres"
msgid "Plugins Path:"
msgstr "Plugins Pad:"
-#: gui/options.cpp:1170 gui/fluidsynth-dialog.cpp:138
+#: gui/options.cpp:1168 gui/fluidsynth-dialog.cpp:138
msgid "Misc"
msgstr "Misc"
-#: gui/options.cpp:1172
+#: gui/options.cpp:1170
msgctxt "lowres"
msgid "Misc"
msgstr "Misc"
-#: gui/options.cpp:1174
+#: gui/options.cpp:1172
msgid "Theme:"
msgstr "Thema:"
-#: gui/options.cpp:1178
+#: gui/options.cpp:1176
msgid "GUI Renderer:"
msgstr "GUI Renderer:"
-#: gui/options.cpp:1190
+#: gui/options.cpp:1188
msgid "Autosave:"
msgstr "Autosave:"
-#: gui/options.cpp:1192
+#: gui/options.cpp:1190
msgctxt "lowres"
msgid "Autosave:"
msgstr "Autosave:"
-#: gui/options.cpp:1200
+#: gui/options.cpp:1198
msgid "Keys"
msgstr "Toetsen"
-#: gui/options.cpp:1207
+#: gui/options.cpp:1205
msgid "GUI Language:"
msgstr "GUI Taal:"
-#: gui/options.cpp:1207
+#: gui/options.cpp:1205
msgid "Language of ScummVM GUI"
msgstr "Taal van de ScummVM GUI"
-#: gui/options.cpp:1366
+#: gui/options.cpp:1364
msgid "You have to restart ScummVM before your changes will take effect."
msgstr "U dient ScummVM opnieuw op te starten om de wijzigingen te activeren."
-#: gui/options.cpp:1386
+#: gui/options.cpp:1384
msgid "The chosen directory cannot be written to. Please select another one."
msgstr ""
"Er kan niet worden geschreven in de gekozen map. Selecteer a.u.b. een andere."
-#: gui/options.cpp:1395
+#: gui/options.cpp:1393
msgid "Select directory for GUI themes"
msgstr "Selecteer map voor GUI themas"
-#: gui/options.cpp:1405
+#: gui/options.cpp:1403
msgid "Select directory for extra files"
msgstr "Selecteer map voor extra bestanden"
-#: gui/options.cpp:1416
+#: gui/options.cpp:1414
msgid "Select directory for plugins"
msgstr "Selecteer map voor plugins"
-#: gui/options.cpp:1469
+#: gui/options.cpp:1467
msgid ""
"The theme you selected does not support your current language. If you want "
"to use this theme you need to switch to another language first."
@@ -959,6 +991,29 @@ msgstr ""
"De thema die u heeft geselecteerd ondersteund uw gekozen taal niet. Als u "
"dit thema wilt gebruiken dient u eerst een andere taal te selecteren."
+#. I18N: You must leave "#" as is, only word 'next' is translatable
+#: gui/predictivedialog.cpp:87
+msgid "# next"
+msgstr ""
+
+#: gui/predictivedialog.cpp:88
+msgid "add"
+msgstr ""
+
+#: gui/predictivedialog.cpp:92
+#, fuzzy
+msgid "Delete char"
+msgstr "Verwijderen"
+
+#: gui/predictivedialog.cpp:96
+msgid "<"
+msgstr ""
+
+#. I18N: Pre means 'Predictive', leave '*' as is
+#: gui/predictivedialog.cpp:98
+msgid "* Pre"
+msgstr ""
+
#: gui/recorderdialog.cpp:64
msgid "Recorder or Playback Gameplay"
msgstr ""
@@ -996,6 +1051,11 @@ msgstr ""
msgid "Do you really want to delete this record?"
msgstr "Wilt u dit opgeslagen spel echt verwijderen?"
+#: gui/recorderdialog.cpp:174
+#, fuzzy
+msgid "Unknown Author"
+msgstr "Onbekende fout"
+
#: gui/saveload-dialog.cpp:167
msgid "List view"
msgstr "Lijstopmaak"
@@ -1449,14 +1509,18 @@ msgstr ""
msgid "Start anyway"
msgstr "Evengoed starten"
-#: audio/fmopl.cpp:50
+#: audio/fmopl.cpp:62
msgid "MAME OPL emulator"
msgstr "MAME OPL emulator"
-#: audio/fmopl.cpp:52
+#: audio/fmopl.cpp:64
msgid "DOSBox OPL emulator"
msgstr "DOSBox OPL emulator"
+#: audio/fmopl.cpp:67
+msgid "ALSA Direct FM"
+msgstr ""
+
#: audio/mididrv.cpp:209
#, c-format
msgid ""
@@ -1506,7 +1570,7 @@ msgstr "Geen muziek"
msgid "Amiga Audio Emulator"
msgstr "Amiga Audio Emulator"
-#: audio/softsynth/adlib.cpp:2285
+#: audio/adlib.cpp:2291
msgid "AdLib Emulator"
msgstr "AdLib Emulator"
@@ -2140,14 +2204,13 @@ msgstr "Klikken Uitgeschakeld"
#: engines/agi/detection.cpp:147 engines/drascula/detection.cpp:302
#: engines/dreamweb/detection.cpp:47 engines/neverhood/detection.cpp:160
#: engines/sci/detection.cpp:394 engines/toltecs/detection.cpp:200
-#: engines/zvision/detection.cpp:246
+#: engines/zvision/detection_tables.h:51
msgid "Use original save/load screens"
msgstr "Gebruik originele opslaan/laad schermen"
#: engines/agi/detection.cpp:148 engines/drascula/detection.cpp:303
#: engines/dreamweb/detection.cpp:48 engines/neverhood/detection.cpp:161
#: engines/sci/detection.cpp:395 engines/toltecs/detection.cpp:201
-#: engines/zvision/detection.cpp:247
msgid "Use the original save/load screens, instead of the ScummVM ones"
msgstr ""
"Gebruik de originele opslaan/laden schermen, in plaats van die van ScummVM"
@@ -3301,6 +3364,25 @@ msgstr "Vlieg naar rechts"
msgid "Fly to lower right"
msgstr "Vlieg naar rechts omlaag"
+#: engines/scumm/input.cpp:572
+#, fuzzy
+msgid "Snap scroll on"
+msgstr "Vloeiend scrollen"
+
+#: engines/scumm/input.cpp:574
+msgid "Snap scroll off"
+msgstr ""
+
+#: engines/scumm/input.cpp:587
+#, fuzzy
+msgid "Music volume: "
+msgstr "Muziek volume:"
+
+#: engines/scumm/input.cpp:604
+#, fuzzy
+msgid "Subtitle speed: "
+msgstr "Snelheid tekst:"
+
#: engines/scumm/scumm.cpp:1832
#, c-format
msgid ""
@@ -3458,39 +3540,45 @@ msgstr "Toon FPS-teller"
msgid "Show the current number of frames per second in the upper left corner"
msgstr "Toon de huidige Frames Per Second teller in de linkerbovenhoek"
-#: engines/zvision/detection.cpp:256
+#: engines/zvision/detection_tables.h:52
+#, fuzzy
+msgid "Use the original save/load screens instead of the ScummVM interface"
+msgstr ""
+"Gebruik de originele opslaan/laden schermen, in plaats van die van ScummVM"
+
+#: engines/zvision/detection_tables.h:61
msgid "Double FPS"
msgstr ""
-#: engines/zvision/detection.cpp:257
-msgid "Increase game FPS from 30 to 60"
+#: engines/zvision/detection_tables.h:62
+msgid "Increase framerate from 30 to 60 FPS"
msgstr ""
-#: engines/zvision/detection.cpp:266
+#: engines/zvision/detection_tables.h:71
#, fuzzy
msgid "Enable Venus"
msgstr "Helium-modus aangezet"
-#: engines/zvision/detection.cpp:267
+#: engines/zvision/detection_tables.h:72
+#, fuzzy
msgid "Enable the Venus help system"
-msgstr ""
+msgstr "Helium-modus aangezet"
-#: engines/zvision/detection.cpp:276
+#: engines/zvision/detection_tables.h:81
msgid "Disable animation while turning"
msgstr ""
-#: engines/zvision/detection.cpp:277
-msgid "Disable animation while turning in panoramic mode"
+#: engines/zvision/detection_tables.h:82
+msgid "Disable animation while turning in panorama mode"
msgstr ""
-#: engines/zvision/detection.cpp:286
-msgid "Use the hires MPEG movies"
+#: engines/zvision/detection_tables.h:91
+msgid "Use high resolution MPEG video"
msgstr ""
-#: engines/zvision/detection.cpp:287
+#: engines/zvision/detection_tables.h:92
#, fuzzy
-msgid ""
-"Use the hires MPEG movies of the DVD version, instead of the lowres AVI ones"
+msgid "Use MPEG video from the DVD version, instead of lower resolution AVI"
msgstr ""
"Gebruik de alternative set van zilveren cursors, in plaats van de normale "
"gouden"
diff --git a/po/nn_NO.po b/po/nn_NO.po
index 2741620b8e..a6af5e4b60 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.sf.net\n"
-"POT-Creation-Date: 2015-06-30 20:57+0100\n"
+"POT-Creation-Date: 2015-10-11 18:59+0100\n"
"PO-Revision-Date: 2014-07-11 00:04+0100\n"
"Last-Translator: Einar Johan Trјan Sјmхen <einarjohants@gmail.com>\n"
"Language-Team: somaen <einarjohants@gmail.com>\n"
@@ -32,7 +32,7 @@ msgstr "Funksjonar innkompilert:"
msgid "Available engines:"
msgstr "Tilgjengelege motorar:"
-#: gui/browser.cpp:68
+#: gui/browser.cpp:68 gui/browser_osx.mm:104
msgid "Show hidden files"
msgstr "Vis skjulte filer"
@@ -53,13 +53,14 @@ msgctxt "lowres"
msgid "Go up"
msgstr "Oppover"
-#: gui/browser.cpp:75 gui/chooser.cpp:46 gui/KeysDialog.cpp:43
-#: gui/launcher.cpp:351 gui/massadd.cpp:95 gui/options.cpp:1239
-#: gui/recorderdialog.cpp:70 gui/recorderdialog.cpp:156
-#: gui/saveload-dialog.cpp:216 gui/saveload-dialog.cpp:276
-#: gui/saveload-dialog.cpp:547 gui/saveload-dialog.cpp:931
-#: gui/themebrowser.cpp:55 gui/fluidsynth-dialog.cpp:152
-#: engines/engine.cpp:483 backends/platform/wii/options.cpp:48
+#: gui/browser.cpp:75 gui/chooser.cpp:46 gui/editrecorddialog.cpp:67
+#: gui/KeysDialog.cpp:43 gui/launcher.cpp:351 gui/massadd.cpp:95
+#: gui/options.cpp:1237 gui/predictivedialog.cpp:74 gui/recorderdialog.cpp:70
+#: gui/recorderdialog.cpp:156 gui/saveload-dialog.cpp:216
+#: gui/saveload-dialog.cpp:276 gui/saveload-dialog.cpp:547
+#: gui/saveload-dialog.cpp:931 gui/themebrowser.cpp:55
+#: gui/fluidsynth-dialog.cpp:152 engines/engine.cpp:483
+#: backends/platform/wii/options.cpp:48
#: backends/events/default/default-events.cpp:196
#: backends/events/default/default-events.cpp:218
#: engines/drascula/saveload.cpp:49 engines/parallaction/saveload.cpp:274
@@ -67,10 +68,27 @@ msgstr "Oppover"
msgid "Cancel"
msgstr "Avbryt"
-#: gui/browser.cpp:76 gui/chooser.cpp:47 gui/themebrowser.cpp:56
+#: gui/browser.cpp:76 gui/browser_osx.mm:103 gui/chooser.cpp:47
+#: gui/themebrowser.cpp:56
msgid "Choose"
msgstr "Vel"
+#: gui/editrecorddialog.cpp:58
+msgid "Author:"
+msgstr ""
+
+#: gui/editrecorddialog.cpp:59 gui/launcher.cpp:204
+msgid "Name:"
+msgstr "Namn:"
+
+#: gui/editrecorddialog.cpp:60
+msgid "Notes:"
+msgstr ""
+
+#: gui/editrecorddialog.cpp:68 gui/predictivedialog.cpp:75
+msgid "Ok"
+msgstr ""
+
#: gui/gui-manager.cpp:117 backends/keymapper/remap-dialog.cpp:53
#: engines/scumm/help.cpp:126 engines/scumm/help.cpp:141
#: engines/scumm/help.cpp:166 engines/scumm/help.cpp:192
@@ -103,7 +121,7 @@ msgid "Map"
msgstr "Kople"
#: gui/KeysDialog.cpp:42 gui/launcher.cpp:352 gui/launcher.cpp:1048
-#: gui/launcher.cpp:1052 gui/massadd.cpp:92 gui/options.cpp:1240
+#: gui/launcher.cpp:1052 gui/massadd.cpp:92 gui/options.cpp:1238
#: gui/saveload-dialog.cpp:932 gui/fluidsynth-dialog.cpp:153
#: engines/engine.cpp:402 engines/engine.cpp:413
#: backends/platform/wii/options.cpp:47
@@ -165,10 +183,6 @@ msgctxt "lowres"
msgid "ID:"
msgstr "ID:"
-#: gui/launcher.cpp:204
-msgid "Name:"
-msgstr "Namn:"
-
#: gui/launcher.cpp:204 gui/launcher.cpp:206 gui/launcher.cpp:207
msgid "Full title of the game"
msgstr "Full speltittel:"
@@ -191,7 +205,7 @@ msgstr ""
"engelsk versjon"
#: gui/launcher.cpp:212 gui/launcher.cpp:226 gui/options.cpp:87
-#: gui/options.cpp:737 gui/options.cpp:750 gui/options.cpp:1210
+#: gui/options.cpp:735 gui/options.cpp:748 gui/options.cpp:1208
#: audio/null.cpp:41
msgid "<default>"
msgstr "<standard>"
@@ -213,11 +227,11 @@ msgstr "Plattform:"
msgid "Engine"
msgstr "Motor"
-#: gui/launcher.cpp:245 gui/options.cpp:1073 gui/options.cpp:1090
+#: gui/launcher.cpp:245 gui/options.cpp:1071 gui/options.cpp:1088
msgid "Graphics"
msgstr "Grafikk"
-#: gui/launcher.cpp:245 gui/options.cpp:1073 gui/options.cpp:1090
+#: gui/launcher.cpp:245 gui/options.cpp:1071 gui/options.cpp:1088
msgid "GFX"
msgstr "GFX"
@@ -230,7 +244,7 @@ msgctxt "lowres"
msgid "Override global graphic settings"
msgstr "Overstyr globale grafikkinstillingar"
-#: gui/launcher.cpp:257 gui/options.cpp:1096
+#: gui/launcher.cpp:257 gui/options.cpp:1094
msgid "Audio"
msgstr "Lyd"
@@ -243,11 +257,11 @@ msgctxt "lowres"
msgid "Override global audio settings"
msgstr "Overstyr globale lydinstillingar"
-#: gui/launcher.cpp:271 gui/options.cpp:1101
+#: gui/launcher.cpp:271 gui/options.cpp:1099
msgid "Volume"
msgstr "Volum"
-#: gui/launcher.cpp:273 gui/options.cpp:1103
+#: gui/launcher.cpp:273 gui/options.cpp:1101
msgctxt "lowres"
msgid "Volume"
msgstr "Volum"
@@ -261,7 +275,7 @@ msgctxt "lowres"
msgid "Override global volume settings"
msgstr "Overstyr globale voluminstillingar"
-#: gui/launcher.cpp:286 gui/options.cpp:1111
+#: gui/launcher.cpp:286 gui/options.cpp:1109
msgid "MIDI"
msgstr "MIDI"
@@ -274,7 +288,7 @@ msgctxt "lowres"
msgid "Override global MIDI settings"
msgstr "Overstyr globale MIDI-instillingar"
-#: gui/launcher.cpp:300 gui/options.cpp:1117
+#: gui/launcher.cpp:300 gui/options.cpp:1115
msgid "MT-32"
msgstr "MT-32"
@@ -287,11 +301,11 @@ msgctxt "lowres"
msgid "Override global MT-32 settings"
msgstr "Overstyr globale MT-32-instillingar"
-#: gui/launcher.cpp:314 gui/options.cpp:1124
+#: gui/launcher.cpp:314 gui/options.cpp:1122
msgid "Paths"
msgstr "Stiar"
-#: gui/launcher.cpp:316 gui/options.cpp:1126
+#: gui/launcher.cpp:316 gui/options.cpp:1124
msgctxt "lowres"
msgid "Paths"
msgstr "Stiar"
@@ -305,7 +319,7 @@ msgctxt "lowres"
msgid "Game Path:"
msgstr "Spelsti:"
-#: gui/launcher.cpp:330 gui/options.cpp:1150
+#: gui/launcher.cpp:330 gui/options.cpp:1148
msgid "Extra Path:"
msgstr "Ekstrasti:"
@@ -313,42 +327,42 @@ msgstr "Ekstrasti:"
msgid "Specifies path to additional data used by the game"
msgstr ""
-#: gui/launcher.cpp:332 gui/options.cpp:1152
+#: gui/launcher.cpp:332 gui/options.cpp:1150
msgctxt "lowres"
msgid "Extra Path:"
msgstr "Ekstrasti:"
-#: gui/launcher.cpp:339 gui/options.cpp:1134
+#: gui/launcher.cpp:339 gui/options.cpp:1132
msgid "Save Path:"
msgstr "Lagringssti:"
#: gui/launcher.cpp:339 gui/launcher.cpp:341 gui/launcher.cpp:342
-#: gui/options.cpp:1134 gui/options.cpp:1136 gui/options.cpp:1137
+#: gui/options.cpp:1132 gui/options.cpp:1134 gui/options.cpp:1135
msgid "Specifies where your saved games are put"
msgstr ""
-#: gui/launcher.cpp:341 gui/options.cpp:1136
+#: gui/launcher.cpp:341 gui/options.cpp:1134
msgctxt "lowres"
msgid "Save Path:"
msgstr "Lagringssti:"
#: gui/launcher.cpp:360 gui/launcher.cpp:459 gui/launcher.cpp:517
-#: gui/launcher.cpp:571 gui/options.cpp:1145 gui/options.cpp:1153
-#: gui/options.cpp:1162 gui/options.cpp:1277 gui/options.cpp:1283
-#: gui/options.cpp:1291 gui/options.cpp:1321 gui/options.cpp:1327
-#: gui/options.cpp:1334 gui/options.cpp:1427 gui/options.cpp:1430
-#: gui/options.cpp:1442
+#: gui/launcher.cpp:571 gui/options.cpp:1143 gui/options.cpp:1151
+#: gui/options.cpp:1160 gui/options.cpp:1275 gui/options.cpp:1281
+#: gui/options.cpp:1289 gui/options.cpp:1319 gui/options.cpp:1325
+#: gui/options.cpp:1332 gui/options.cpp:1425 gui/options.cpp:1428
+#: gui/options.cpp:1440
msgctxt "path"
msgid "None"
msgstr "Ingen"
#: gui/launcher.cpp:365 gui/launcher.cpp:465 gui/launcher.cpp:575
-#: gui/options.cpp:1271 gui/options.cpp:1315 gui/options.cpp:1433
+#: gui/options.cpp:1269 gui/options.cpp:1313 gui/options.cpp:1431
#: backends/platform/wii/options.cpp:56
msgid "Default"
msgstr "Standard"
-#: gui/launcher.cpp:510 gui/options.cpp:1436
+#: gui/launcher.cpp:510 gui/options.cpp:1434
msgid "Select SoundFont"
msgstr "Vel SoundFont"
@@ -361,7 +375,7 @@ msgstr "Vel mappe med speldata"
msgid "Select additional game directory"
msgstr "Vel mappe med speldata"
-#: gui/launcher.cpp:559 gui/options.cpp:1379
+#: gui/launcher.cpp:559 gui/options.cpp:1377
msgid "Select directory for saved games"
msgstr "Vel mappe for lagra spel"
@@ -558,6 +572,24 @@ msgstr "Sјkt i %d mappar ..."
msgid "Discovered %d new games, ignored %d previously added games ..."
msgstr "Oppdaga %d nye spel ..."
+#: gui/onscreendialog.cpp:101 gui/onscreendialog.cpp:103
+msgid "Stop"
+msgstr ""
+
+#: gui/onscreendialog.cpp:106
+msgid "Edit record description"
+msgstr ""
+
+#: gui/onscreendialog.cpp:108
+#, fuzzy
+msgid "Switch to Game"
+msgstr "Bytt"
+
+#: gui/onscreendialog.cpp:110
+#, fuzzy
+msgid "Fast replay"
+msgstr "Rask modus"
+
#: gui/options.cpp:85
msgid "Never"
msgstr "Aldri"
@@ -598,8 +630,8 @@ msgstr "44 kHz"
msgid "48 kHz"
msgstr "48 kHz"
-#: gui/options.cpp:255 gui/options.cpp:481 gui/options.cpp:582
-#: gui/options.cpp:651 gui/options.cpp:859
+#: gui/options.cpp:255 gui/options.cpp:479 gui/options.cpp:580
+#: gui/options.cpp:649 gui/options.cpp:857
msgctxt "soundfont"
msgid "None"
msgstr "Ingen"
@@ -620,72 +652,72 @@ msgstr "Fullskjerminstillinga kunne ikkje endrast"
msgid "the aspect ratio setting could not be changed"
msgstr ""
-#: gui/options.cpp:734
+#: gui/options.cpp:732
msgid "Graphics mode:"
msgstr "Grafikkmodus:"
-#: gui/options.cpp:748
+#: gui/options.cpp:746
msgid "Render mode:"
msgstr "Teiknemodus:"
-#: gui/options.cpp:748 gui/options.cpp:749
+#: gui/options.cpp:746 gui/options.cpp:747
msgid "Special dithering modes supported by some games"
msgstr "Spesielle dithering-modus som stјttast av nokre spel"
-#: gui/options.cpp:760
+#: gui/options.cpp:758
#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2298
msgid "Fullscreen mode"
msgstr "Fullskjermsmodus"
-#: gui/options.cpp:763
+#: gui/options.cpp:761
msgid "Aspect ratio correction"
msgstr "Aspekt-korrigering"
-#: gui/options.cpp:763
+#: gui/options.cpp:761
msgid "Correct aspect ratio for 320x200 games"
msgstr "Rett opp aspekt for 320x200 spel"
-#: gui/options.cpp:771
+#: gui/options.cpp:769
msgid "Preferred Device:"
msgstr "Fјretrukken eining:"
-#: gui/options.cpp:771
+#: gui/options.cpp:769
msgid "Music Device:"
msgstr "Musikkeining:"
-#: gui/options.cpp:771 gui/options.cpp:773
+#: gui/options.cpp:769 gui/options.cpp:771
msgid "Specifies preferred sound device or sound card emulator"
msgstr ""
-#: gui/options.cpp:771 gui/options.cpp:773 gui/options.cpp:774
+#: gui/options.cpp:769 gui/options.cpp:771 gui/options.cpp:772
msgid "Specifies output sound device or sound card emulator"
msgstr ""
-#: gui/options.cpp:773
+#: gui/options.cpp:771
#, fuzzy
msgctxt "lowres"
msgid "Preferred Dev.:"
msgstr "Fјretrukken eining:"
-#: gui/options.cpp:773
+#: gui/options.cpp:771
#, fuzzy
msgctxt "lowres"
msgid "Music Device:"
msgstr "Ingen musikk"
-#: gui/options.cpp:800
+#: gui/options.cpp:798
msgid "AdLib emulator:"
msgstr "AdLib emulator:"
-#: gui/options.cpp:800 gui/options.cpp:801
+#: gui/options.cpp:798 gui/options.cpp:799
msgid "AdLib is used for music in many games"
msgstr "AdLib nyttast til musikk i mange spel"
-#: gui/options.cpp:811
+#: gui/options.cpp:809
msgid "Output rate:"
msgstr ""
-#: gui/options.cpp:811 gui/options.cpp:812
+#: gui/options.cpp:809 gui/options.cpp:810
msgid ""
"Higher value specifies better sound quality but may be not supported by your "
"soundcard"
@@ -693,252 +725,252 @@ msgstr ""
"Hјgare verdier gir betre lydkvalitet, men stјttast kanskje ikkje av "
"lydkortet ditt"
-#: gui/options.cpp:822
+#: gui/options.cpp:820
msgid "GM Device:"
msgstr "GM Eining:"
-#: gui/options.cpp:822
+#: gui/options.cpp:820
msgid "Specifies default sound device for General MIDI output"
msgstr ""
-#: gui/options.cpp:833
+#: gui/options.cpp:831
msgid "Don't use General MIDI music"
msgstr "Ikkje nytt General MIDI musikk"
-#: gui/options.cpp:844 gui/options.cpp:910
+#: gui/options.cpp:842 gui/options.cpp:908
msgid "Use first available device"
msgstr "Nytt fјrste tilgjengelege eining"
-#: gui/options.cpp:856
+#: gui/options.cpp:854
msgid "SoundFont:"
msgstr "SoundFont:"
-#: gui/options.cpp:856 gui/options.cpp:858 gui/options.cpp:859
+#: gui/options.cpp:854 gui/options.cpp:856 gui/options.cpp:857
msgid "SoundFont is supported by some audio cards, FluidSynth and Timidity"
msgstr "SoundFont stјttast av enkelte lydkort, FluidSynth og Timidity"
-#: gui/options.cpp:858
+#: gui/options.cpp:856
msgctxt "lowres"
msgid "SoundFont:"
msgstr "SoundFont:"
-#: gui/options.cpp:864
+#: gui/options.cpp:862
msgid "Mixed AdLib/MIDI mode"
msgstr "Blanda AdLib/MIDI-modus"
-#: gui/options.cpp:864
+#: gui/options.cpp:862
msgid "Use both MIDI and AdLib sound generation"
msgstr "Nytt bхe MIDI og AdLib lydskaping"
-#: gui/options.cpp:867
+#: gui/options.cpp:865
msgid "MIDI gain:"
msgstr "MIDI gain:"
-#: gui/options.cpp:874
+#: gui/options.cpp:872
msgid "FluidSynth Settings"
msgstr "FluidSynth instillingar"
-#: gui/options.cpp:881
+#: gui/options.cpp:879
msgid "MT-32 Device:"
msgstr "MT-32 Eining:"
-#: gui/options.cpp:881
+#: gui/options.cpp:879
msgid "Specifies default sound device for Roland MT-32/LAPC1/CM32l/CM64 output"
msgstr ""
-#: gui/options.cpp:886
+#: gui/options.cpp:884
msgid "True Roland MT-32 (disable GM emulation)"
msgstr "Ekte Roland MT-32 (deaktiver GM-emulering)"
-#: gui/options.cpp:886 gui/options.cpp:888
+#: gui/options.cpp:884 gui/options.cpp:886
msgid ""
"Check if you want to use your real hardware Roland-compatible sound device "
"connected to your computer"
msgstr ""
-#: gui/options.cpp:888
+#: gui/options.cpp:886
msgctxt "lowres"
msgid "True Roland MT-32 (no GM emulation)"
msgstr "Ekte Roland MT-32 (ingen GS-emulering)"
-#: gui/options.cpp:891
+#: gui/options.cpp:889
#, fuzzy
msgid "Roland GS Device (enable MT-32 mappings)"
msgstr "Ekte Roland MT-32 (deaktiver GM-emulering)"
-#: gui/options.cpp:891
+#: gui/options.cpp:889
msgid ""
"Check if you want to enable patch mappings to emulate an MT-32 on a Roland "
"GS device"
msgstr ""
-#: gui/options.cpp:900
+#: gui/options.cpp:898
msgid "Don't use Roland MT-32 music"
msgstr "Ikkje nytt Roland MT-32 musikk"
-#: gui/options.cpp:927
+#: gui/options.cpp:925
msgid "Text and Speech:"
msgstr "Tekst og Tale:"
-#: gui/options.cpp:931 gui/options.cpp:941
+#: gui/options.cpp:929 gui/options.cpp:939
msgid "Speech"
msgstr "Tale"
-#: gui/options.cpp:932 gui/options.cpp:942
+#: gui/options.cpp:930 gui/options.cpp:940
msgid "Subtitles"
msgstr "Teksting"
-#: gui/options.cpp:933
+#: gui/options.cpp:931
msgid "Both"
msgstr "Begge"
-#: gui/options.cpp:935
+#: gui/options.cpp:933
msgid "Subtitle speed:"
msgstr "Undertekstfart:"
-#: gui/options.cpp:937
+#: gui/options.cpp:935
msgctxt "lowres"
msgid "Text and Speech:"
msgstr "Tekst og Tale:"
-#: gui/options.cpp:941
+#: gui/options.cpp:939
msgid "Spch"
msgstr "Tale"
-#: gui/options.cpp:942
+#: gui/options.cpp:940
msgid "Subs"
msgstr "Tekst"
-#: gui/options.cpp:943
+#: gui/options.cpp:941
msgctxt "lowres"
msgid "Both"
msgstr "Bхe"
-#: gui/options.cpp:943
+#: gui/options.cpp:941
msgid "Show subtitles and play speech"
msgstr "Vis teksting og spel av tale"
-#: gui/options.cpp:945
+#: gui/options.cpp:943
msgctxt "lowres"
msgid "Subtitle speed:"
msgstr "Undertekstfart:"
-#: gui/options.cpp:961
+#: gui/options.cpp:959
msgid "Music volume:"
msgstr "Musikkvolum:"
-#: gui/options.cpp:963
+#: gui/options.cpp:961
msgctxt "lowres"
msgid "Music volume:"
msgstr "Musikkvolum:"
-#: gui/options.cpp:970
+#: gui/options.cpp:968
msgid "Mute All"
msgstr "Demp alle"
-#: gui/options.cpp:973
+#: gui/options.cpp:971
msgid "SFX volume:"
msgstr "Lydeffektvolum:"
-#: gui/options.cpp:973 gui/options.cpp:975 gui/options.cpp:976
+#: gui/options.cpp:971 gui/options.cpp:973 gui/options.cpp:974
msgid "Special sound effects volume"
msgstr ""
-#: gui/options.cpp:975
+#: gui/options.cpp:973
msgctxt "lowres"
msgid "SFX volume:"
msgstr "Lydeffektvolum:"
-#: gui/options.cpp:983
+#: gui/options.cpp:981
msgid "Speech volume:"
msgstr "Talevolum:"
-#: gui/options.cpp:985
+#: gui/options.cpp:983
msgctxt "lowres"
msgid "Speech volume:"
msgstr "Talevolum:"
-#: gui/options.cpp:1142
+#: gui/options.cpp:1140
msgid "Theme Path:"
msgstr "Temasti:"
-#: gui/options.cpp:1144
+#: gui/options.cpp:1142
msgctxt "lowres"
msgid "Theme Path:"
msgstr "Temasti:"
-#: gui/options.cpp:1150 gui/options.cpp:1152 gui/options.cpp:1153
+#: gui/options.cpp:1148 gui/options.cpp:1150 gui/options.cpp:1151
msgid "Specifies path to additional data used by all games or ScummVM"
msgstr ""
-#: gui/options.cpp:1159
+#: gui/options.cpp:1157
msgid "Plugins Path:"
msgstr "Pluginsti:"
-#: gui/options.cpp:1161
+#: gui/options.cpp:1159
msgctxt "lowres"
msgid "Plugins Path:"
msgstr "Pluginsti:"
-#: gui/options.cpp:1170 gui/fluidsynth-dialog.cpp:138
+#: gui/options.cpp:1168 gui/fluidsynth-dialog.cpp:138
msgid "Misc"
msgstr "Diverse"
-#: gui/options.cpp:1172
+#: gui/options.cpp:1170
msgctxt "lowres"
msgid "Misc"
msgstr "Div"
-#: gui/options.cpp:1174
+#: gui/options.cpp:1172
msgid "Theme:"
msgstr "Tema:"
-#: gui/options.cpp:1178
+#: gui/options.cpp:1176
msgid "GUI Renderer:"
msgstr "GUI-teiknar:"
-#: gui/options.cpp:1190
+#: gui/options.cpp:1188
msgid "Autosave:"
msgstr "Autolagre:"
-#: gui/options.cpp:1192
+#: gui/options.cpp:1190
msgctxt "lowres"
msgid "Autosave:"
msgstr "Autolagre:"
-#: gui/options.cpp:1200
+#: gui/options.cpp:1198
msgid "Keys"
msgstr "Tastar"
-#: gui/options.cpp:1207
+#: gui/options.cpp:1205
msgid "GUI Language:"
msgstr "GUI-sprхk:"
-#: gui/options.cpp:1207
+#: gui/options.cpp:1205
msgid "Language of ScummVM GUI"
msgstr "Sprхk i ScummVM-GUIet"
-#: gui/options.cpp:1366
+#: gui/options.cpp:1364
msgid "You have to restart ScummVM before your changes will take effect."
msgstr "Du mх starte ScummVM pх nytt for at endringane skal tre i kraft."
-#: gui/options.cpp:1386
+#: gui/options.cpp:1384
msgid "The chosen directory cannot be written to. Please select another one."
msgstr "Den velde mappa kan ikkje skrivast til. Vennlegst vel ein annan."
-#: gui/options.cpp:1395
+#: gui/options.cpp:1393
msgid "Select directory for GUI themes"
msgstr "Vel ei mappe for GUI-tema:"
-#: gui/options.cpp:1405
+#: gui/options.cpp:1403
msgid "Select directory for extra files"
msgstr "Vel ei mappe for ekstra filer"
-#: gui/options.cpp:1416
+#: gui/options.cpp:1414
msgid "Select directory for plugins"
msgstr "Vel ei mappe for plugins"
-#: gui/options.cpp:1469
+#: gui/options.cpp:1467
msgid ""
"The theme you selected does not support your current language. If you want "
"to use this theme you need to switch to another language first."
@@ -946,6 +978,29 @@ msgstr ""
"Temaet du har valt stјttar ikkje det aktive sprхket. Om du vil nytte dette "
"temaet mх du bytte til eit anna sprхk fјrst."
+#. I18N: You must leave "#" as is, only word 'next' is translatable
+#: gui/predictivedialog.cpp:87
+msgid "# next"
+msgstr ""
+
+#: gui/predictivedialog.cpp:88
+msgid "add"
+msgstr ""
+
+#: gui/predictivedialog.cpp:92
+#, fuzzy
+msgid "Delete char"
+msgstr "Slett"
+
+#: gui/predictivedialog.cpp:96
+msgid "<"
+msgstr ""
+
+#. I18N: Pre means 'Predictive', leave '*' as is
+#: gui/predictivedialog.cpp:98
+msgid "* Pre"
+msgstr ""
+
#: gui/recorderdialog.cpp:64
msgid "Recorder or Playback Gameplay"
msgstr ""
@@ -983,6 +1038,11 @@ msgstr ""
msgid "Do you really want to delete this record?"
msgstr "Vil du verkeleg slette det lagra spelet?"
+#: gui/recorderdialog.cpp:174
+#, fuzzy
+msgid "Unknown Author"
+msgstr "Ukjend feil"
+
#: gui/saveload-dialog.cpp:167
msgid "List view"
msgstr "Listevisning"
@@ -1415,14 +1475,18 @@ msgstr ""
msgid "Start anyway"
msgstr "Start allikevel"
-#: audio/fmopl.cpp:50
+#: audio/fmopl.cpp:62
msgid "MAME OPL emulator"
msgstr "MAME OPL emulator"
-#: audio/fmopl.cpp:52
+#: audio/fmopl.cpp:64
msgid "DOSBox OPL emulator"
msgstr "DOSBox OPL emulator"
+#: audio/fmopl.cpp:67
+msgid "ALSA Direct FM"
+msgstr ""
+
#: audio/mididrv.cpp:209
#, c-format
msgid ""
@@ -1464,7 +1528,7 @@ msgstr "Ingen musikk"
msgid "Amiga Audio Emulator"
msgstr "Amiga Lydemulator"
-#: audio/softsynth/adlib.cpp:2285
+#: audio/adlib.cpp:2291
msgid "AdLib Emulator"
msgstr "AdLib Emulator"
@@ -2116,14 +2180,13 @@ msgstr "Klikking Deaktivert"
#: engines/agi/detection.cpp:147 engines/drascula/detection.cpp:302
#: engines/dreamweb/detection.cpp:47 engines/neverhood/detection.cpp:160
#: engines/sci/detection.cpp:394 engines/toltecs/detection.cpp:200
-#: engines/zvision/detection.cpp:246
+#: engines/zvision/detection_tables.h:51
msgid "Use original save/load screens"
msgstr "Nytt opprinnelege skjermar for lagring/lasting"
#: engines/agi/detection.cpp:148 engines/drascula/detection.cpp:303
#: engines/dreamweb/detection.cpp:48 engines/neverhood/detection.cpp:161
#: engines/sci/detection.cpp:395 engines/toltecs/detection.cpp:201
-#: engines/zvision/detection.cpp:247
msgid "Use the original save/load screens, instead of the ScummVM ones"
msgstr ""
@@ -3247,6 +3310,25 @@ msgstr "Fly til hјgre"
msgid "Fly to lower right"
msgstr "Fly til nedre hјgre"
+#: engines/scumm/input.cpp:572
+#, fuzzy
+msgid "Snap scroll on"
+msgstr "Bla liste ned"
+
+#: engines/scumm/input.cpp:574
+msgid "Snap scroll off"
+msgstr ""
+
+#: engines/scumm/input.cpp:587
+#, fuzzy
+msgid "Music volume: "
+msgstr "Musikkvolum:"
+
+#: engines/scumm/input.cpp:604
+#, fuzzy
+msgid "Subtitle speed: "
+msgstr "Undertekstfart:"
+
#: engines/scumm/scumm.cpp:1832
#, c-format
msgid ""
@@ -3381,39 +3463,44 @@ msgstr ""
msgid "Show the current number of frames per second in the upper left corner"
msgstr ""
-#: engines/zvision/detection.cpp:256
+#: engines/zvision/detection_tables.h:52
+#, fuzzy
+msgid "Use the original save/load screens instead of the ScummVM interface"
+msgstr "Nytt opprinnelege skjermar for lagring/lasting"
+
+#: engines/zvision/detection_tables.h:61
msgid "Double FPS"
msgstr ""
-#: engines/zvision/detection.cpp:257
-msgid "Increase game FPS from 30 to 60"
+#: engines/zvision/detection_tables.h:62
+msgid "Increase framerate from 30 to 60 FPS"
msgstr ""
-#: engines/zvision/detection.cpp:266
+#: engines/zvision/detection_tables.h:71
#, fuzzy
msgid "Enable Venus"
msgstr "Grafikkmodus:"
-#: engines/zvision/detection.cpp:267
+#: engines/zvision/detection_tables.h:72
+#, fuzzy
msgid "Enable the Venus help system"
-msgstr ""
+msgstr "Grafikkmodus:"
-#: engines/zvision/detection.cpp:276
+#: engines/zvision/detection_tables.h:81
msgid "Disable animation while turning"
msgstr ""
-#: engines/zvision/detection.cpp:277
-msgid "Disable animation while turning in panoramic mode"
+#: engines/zvision/detection_tables.h:82
+msgid "Disable animation while turning in panorama mode"
msgstr ""
-#: engines/zvision/detection.cpp:286
-msgid "Use the hires MPEG movies"
+#: engines/zvision/detection_tables.h:91
+msgid "Use high resolution MPEG video"
msgstr ""
-#: engines/zvision/detection.cpp:287
+#: engines/zvision/detection_tables.h:92
#, fuzzy
-msgid ""
-"Use the hires MPEG movies of the DVD version, instead of the lowres AVI ones"
+msgid "Use MPEG video from the DVD version, instead of lower resolution AVI"
msgstr "Nytt det alternative settet med sјlvpeikarar, istaden for dei gylne"
#~ msgctxt "lowres"
diff --git a/po/pl_PL.po b/po/pl_PL.po
index c131023dfc..477ecb6e69 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.sf.net\n"
-"POT-Creation-Date: 2015-06-30 20:57+0100\n"
+"POT-Creation-Date: 2015-10-11 18:59+0100\n"
"PO-Revision-Date: 2014-07-02 12:28+0100\n"
"Last-Translator: MichaГ ZiБbkowski <mziab@o2.pl>\n"
"Language-Team: Grajpopolsku.pl <grajpopolsku@gmail.com>\n"
@@ -33,7 +33,7 @@ msgstr "Wkompilowane funkcje:"
msgid "Available engines:"
msgstr "Dostъpne silniki:"
-#: gui/browser.cpp:68
+#: gui/browser.cpp:68 gui/browser_osx.mm:104
msgid "Show hidden files"
msgstr "PokaП ukryte pliki"
@@ -54,13 +54,14 @@ msgctxt "lowres"
msgid "Go up"
msgstr "W gѓrъ"
-#: gui/browser.cpp:75 gui/chooser.cpp:46 gui/KeysDialog.cpp:43
-#: gui/launcher.cpp:351 gui/massadd.cpp:95 gui/options.cpp:1239
-#: gui/recorderdialog.cpp:70 gui/recorderdialog.cpp:156
-#: gui/saveload-dialog.cpp:216 gui/saveload-dialog.cpp:276
-#: gui/saveload-dialog.cpp:547 gui/saveload-dialog.cpp:931
-#: gui/themebrowser.cpp:55 gui/fluidsynth-dialog.cpp:152
-#: engines/engine.cpp:483 backends/platform/wii/options.cpp:48
+#: gui/browser.cpp:75 gui/chooser.cpp:46 gui/editrecorddialog.cpp:67
+#: gui/KeysDialog.cpp:43 gui/launcher.cpp:351 gui/massadd.cpp:95
+#: gui/options.cpp:1237 gui/predictivedialog.cpp:74 gui/recorderdialog.cpp:70
+#: gui/recorderdialog.cpp:156 gui/saveload-dialog.cpp:216
+#: gui/saveload-dialog.cpp:276 gui/saveload-dialog.cpp:547
+#: gui/saveload-dialog.cpp:931 gui/themebrowser.cpp:55
+#: gui/fluidsynth-dialog.cpp:152 engines/engine.cpp:483
+#: backends/platform/wii/options.cpp:48
#: backends/events/default/default-events.cpp:196
#: backends/events/default/default-events.cpp:218
#: engines/drascula/saveload.cpp:49 engines/parallaction/saveload.cpp:274
@@ -68,10 +69,27 @@ msgstr "W gѓrъ"
msgid "Cancel"
msgstr "Anuluj"
-#: gui/browser.cpp:76 gui/chooser.cpp:47 gui/themebrowser.cpp:56
+#: gui/browser.cpp:76 gui/browser_osx.mm:103 gui/chooser.cpp:47
+#: gui/themebrowser.cpp:56
msgid "Choose"
msgstr "Wybierz"
+#: gui/editrecorddialog.cpp:58
+msgid "Author:"
+msgstr ""
+
+#: gui/editrecorddialog.cpp:59 gui/launcher.cpp:204
+msgid "Name:"
+msgstr "Nazwa:"
+
+#: gui/editrecorddialog.cpp:60
+msgid "Notes:"
+msgstr ""
+
+#: gui/editrecorddialog.cpp:68 gui/predictivedialog.cpp:75
+msgid "Ok"
+msgstr ""
+
#: gui/gui-manager.cpp:117 backends/keymapper/remap-dialog.cpp:53
#: engines/scumm/help.cpp:126 engines/scumm/help.cpp:141
#: engines/scumm/help.cpp:166 engines/scumm/help.cpp:192
@@ -104,7 +122,7 @@ msgid "Map"
msgstr "Przypisz"
#: gui/KeysDialog.cpp:42 gui/launcher.cpp:352 gui/launcher.cpp:1048
-#: gui/launcher.cpp:1052 gui/massadd.cpp:92 gui/options.cpp:1240
+#: gui/launcher.cpp:1052 gui/massadd.cpp:92 gui/options.cpp:1238
#: gui/saveload-dialog.cpp:932 gui/fluidsynth-dialog.cpp:153
#: engines/engine.cpp:402 engines/engine.cpp:413
#: backends/platform/wii/options.cpp:47
@@ -166,10 +184,6 @@ msgctxt "lowres"
msgid "ID:"
msgstr "ID:"
-#: gui/launcher.cpp:204
-msgid "Name:"
-msgstr "Nazwa:"
-
#: gui/launcher.cpp:204 gui/launcher.cpp:206 gui/launcher.cpp:207
msgid "Full title of the game"
msgstr "PeГny tytuГ gry:"
@@ -190,7 +204,7 @@ msgid ""
msgstr "Jъzyk gry. Nie zmieni to hiszpaёskiej wersji gry w angielskБ."
#: gui/launcher.cpp:212 gui/launcher.cpp:226 gui/options.cpp:87
-#: gui/options.cpp:737 gui/options.cpp:750 gui/options.cpp:1210
+#: gui/options.cpp:735 gui/options.cpp:748 gui/options.cpp:1208
#: audio/null.cpp:41
msgid "<default>"
msgstr "<domyЖlne>"
@@ -212,11 +226,11 @@ msgstr "Platforma:"
msgid "Engine"
msgstr "Silnik"
-#: gui/launcher.cpp:245 gui/options.cpp:1073 gui/options.cpp:1090
+#: gui/launcher.cpp:245 gui/options.cpp:1071 gui/options.cpp:1088
msgid "Graphics"
msgstr "Grafika"
-#: gui/launcher.cpp:245 gui/options.cpp:1073 gui/options.cpp:1090
+#: gui/launcher.cpp:245 gui/options.cpp:1071 gui/options.cpp:1088
msgid "GFX"
msgstr "Grafika"
@@ -229,7 +243,7 @@ msgctxt "lowres"
msgid "Override global graphic settings"
msgstr "UПyj wГasnych ustawieё grafiki"
-#: gui/launcher.cpp:257 gui/options.cpp:1096
+#: gui/launcher.cpp:257 gui/options.cpp:1094
msgid "Audio"
msgstr "DМwiъk"
@@ -242,11 +256,11 @@ msgctxt "lowres"
msgid "Override global audio settings"
msgstr "UПyj wГasnych ustawieё dМwiъku"
-#: gui/launcher.cpp:271 gui/options.cpp:1101
+#: gui/launcher.cpp:271 gui/options.cpp:1099
msgid "Volume"
msgstr "GГoЖnoЖц"
-#: gui/launcher.cpp:273 gui/options.cpp:1103
+#: gui/launcher.cpp:273 gui/options.cpp:1101
msgctxt "lowres"
msgid "Volume"
msgstr "GГoЖnoЖц"
@@ -260,7 +274,7 @@ msgctxt "lowres"
msgid "Override global volume settings"
msgstr "UПyj wГasnych ustawieё gГoЖnoЖci"
-#: gui/launcher.cpp:286 gui/options.cpp:1111
+#: gui/launcher.cpp:286 gui/options.cpp:1109
msgid "MIDI"
msgstr "MIDI"
@@ -273,7 +287,7 @@ msgctxt "lowres"
msgid "Override global MIDI settings"
msgstr "UПyj wГasnych ustawieё MIDI"
-#: gui/launcher.cpp:300 gui/options.cpp:1117
+#: gui/launcher.cpp:300 gui/options.cpp:1115
msgid "MT-32"
msgstr "MT-32"
@@ -286,11 +300,11 @@ msgctxt "lowres"
msgid "Override global MT-32 settings"
msgstr "UПyj wГasnych ustawieё MT-32"
-#: gui/launcher.cpp:314 gui/options.cpp:1124
+#: gui/launcher.cpp:314 gui/options.cpp:1122
msgid "Paths"
msgstr "ІcieПki"
-#: gui/launcher.cpp:316 gui/options.cpp:1126
+#: gui/launcher.cpp:316 gui/options.cpp:1124
msgctxt "lowres"
msgid "Paths"
msgstr "ІcieПki"
@@ -304,7 +318,7 @@ msgctxt "lowres"
msgid "Game Path:"
msgstr "ІcieПka gry:"
-#: gui/launcher.cpp:330 gui/options.cpp:1150
+#: gui/launcher.cpp:330 gui/options.cpp:1148
msgid "Extra Path:"
msgstr "Іc. dodatkѓw:"
@@ -312,42 +326,42 @@ msgstr "Іc. dodatkѓw:"
msgid "Specifies path to additional data used by the game"
msgstr "OkreЖla ЖcieПkъ dodatkowych danych gry"
-#: gui/launcher.cpp:332 gui/options.cpp:1152
+#: gui/launcher.cpp:332 gui/options.cpp:1150
msgctxt "lowres"
msgid "Extra Path:"
msgstr "Іc. dodatkѓw:"
-#: gui/launcher.cpp:339 gui/options.cpp:1134
+#: gui/launcher.cpp:339 gui/options.cpp:1132
msgid "Save Path:"
msgstr "ІcieПka zapisѓw:"
#: gui/launcher.cpp:339 gui/launcher.cpp:341 gui/launcher.cpp:342
-#: gui/options.cpp:1134 gui/options.cpp:1136 gui/options.cpp:1137
+#: gui/options.cpp:1132 gui/options.cpp:1134 gui/options.cpp:1135
msgid "Specifies where your saved games are put"
msgstr "OkreЖla gdzie zapisywaц stan gry"
-#: gui/launcher.cpp:341 gui/options.cpp:1136
+#: gui/launcher.cpp:341 gui/options.cpp:1134
msgctxt "lowres"
msgid "Save Path:"
msgstr "ІcieПka zapisѓw:"
#: gui/launcher.cpp:360 gui/launcher.cpp:459 gui/launcher.cpp:517
-#: gui/launcher.cpp:571 gui/options.cpp:1145 gui/options.cpp:1153
-#: gui/options.cpp:1162 gui/options.cpp:1277 gui/options.cpp:1283
-#: gui/options.cpp:1291 gui/options.cpp:1321 gui/options.cpp:1327
-#: gui/options.cpp:1334 gui/options.cpp:1427 gui/options.cpp:1430
-#: gui/options.cpp:1442
+#: gui/launcher.cpp:571 gui/options.cpp:1143 gui/options.cpp:1151
+#: gui/options.cpp:1160 gui/options.cpp:1275 gui/options.cpp:1281
+#: gui/options.cpp:1289 gui/options.cpp:1319 gui/options.cpp:1325
+#: gui/options.cpp:1332 gui/options.cpp:1425 gui/options.cpp:1428
+#: gui/options.cpp:1440
msgctxt "path"
msgid "None"
msgstr "Brak"
#: gui/launcher.cpp:365 gui/launcher.cpp:465 gui/launcher.cpp:575
-#: gui/options.cpp:1271 gui/options.cpp:1315 gui/options.cpp:1433
+#: gui/options.cpp:1269 gui/options.cpp:1313 gui/options.cpp:1431
#: backends/platform/wii/options.cpp:56
msgid "Default"
msgstr "DomyЖlnie"
-#: gui/launcher.cpp:510 gui/options.cpp:1436
+#: gui/launcher.cpp:510 gui/options.cpp:1434
msgid "Select SoundFont"
msgstr "Wybierz SoundFont"
@@ -359,7 +373,7 @@ msgstr "Wybierz katalog z plikami gry"
msgid "Select additional game directory"
msgstr "Wybierz dodatkowy katalog gry"
-#: gui/launcher.cpp:559 gui/options.cpp:1379
+#: gui/launcher.cpp:559 gui/options.cpp:1377
msgid "Select directory for saved games"
msgstr "Wybierz katalog dla zapisѓw"
@@ -555,6 +569,24 @@ msgstr "Przeskanowano %d katalogѓw ..."
msgid "Discovered %d new games, ignored %d previously added games ..."
msgstr "Wykryto %d nowych gier, zignorowano %d poprzednio dodanych..."
+#: gui/onscreendialog.cpp:101 gui/onscreendialog.cpp:103
+msgid "Stop"
+msgstr ""
+
+#: gui/onscreendialog.cpp:106
+msgid "Edit record description"
+msgstr ""
+
+#: gui/onscreendialog.cpp:108
+#, fuzzy
+msgid "Switch to Game"
+msgstr "PrzeГБcz"
+
+#: gui/onscreendialog.cpp:110
+#, fuzzy
+msgid "Fast replay"
+msgstr "Tryb szybki"
+
#: gui/options.cpp:85
msgid "Never"
msgstr "Nigdy"
@@ -595,8 +627,8 @@ msgstr "44 kHz"
msgid "48 kHz"
msgstr "48 kHz"
-#: gui/options.cpp:255 gui/options.cpp:481 gui/options.cpp:582
-#: gui/options.cpp:651 gui/options.cpp:859
+#: gui/options.cpp:255 gui/options.cpp:479 gui/options.cpp:580
+#: gui/options.cpp:649 gui/options.cpp:857
msgctxt "soundfont"
msgid "None"
msgstr "Brak"
@@ -617,70 +649,70 @@ msgstr "nie udaГo siъ zmieniц trybu peГnoekranowego"
msgid "the aspect ratio setting could not be changed"
msgstr "nie udaГo siъ zmieniц formatu obrazu"
-#: gui/options.cpp:734
+#: gui/options.cpp:732
msgid "Graphics mode:"
msgstr "Tryb grafiki:"
-#: gui/options.cpp:748
+#: gui/options.cpp:746
msgid "Render mode:"
msgstr "Renderer:"
-#: gui/options.cpp:748 gui/options.cpp:749
+#: gui/options.cpp:746 gui/options.cpp:747
msgid "Special dithering modes supported by some games"
msgstr "Specjalne tryby ditheringu wspierane przez niektѓre gry"
-#: gui/options.cpp:760
+#: gui/options.cpp:758
#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2298
msgid "Fullscreen mode"
msgstr "PeГny ekran"
-#: gui/options.cpp:763
+#: gui/options.cpp:761
msgid "Aspect ratio correction"
msgstr "Korekcja formatu obrazu"
-#: gui/options.cpp:763
+#: gui/options.cpp:761
msgid "Correct aspect ratio for 320x200 games"
msgstr "Korekcja formatu obrazu dla gier 320x200"
-#: gui/options.cpp:771
+#: gui/options.cpp:769
msgid "Preferred Device:"
msgstr "Pref. urzБdzenie:"
-#: gui/options.cpp:771
+#: gui/options.cpp:769
msgid "Music Device:"
msgstr "Urz. muzyczne:"
-#: gui/options.cpp:771 gui/options.cpp:773
+#: gui/options.cpp:769 gui/options.cpp:771
msgid "Specifies preferred sound device or sound card emulator"
msgstr "OkreЖla preferowane urzБdzenie dМwiъkowe lub emulator karty dМwiъkowej"
-#: gui/options.cpp:771 gui/options.cpp:773 gui/options.cpp:774
+#: gui/options.cpp:769 gui/options.cpp:771 gui/options.cpp:772
msgid "Specifies output sound device or sound card emulator"
msgstr "OkreЖla wyjЖciowe urzБdzenie dМwiъkowe lub emulator karty dМwiъkowej"
-#: gui/options.cpp:773
+#: gui/options.cpp:771
msgctxt "lowres"
msgid "Preferred Dev.:"
msgstr "Pref. urzБdzenie:"
-#: gui/options.cpp:773
+#: gui/options.cpp:771
msgctxt "lowres"
msgid "Music Device:"
msgstr "Urz. muzyczne:"
-#: gui/options.cpp:800
+#: gui/options.cpp:798
msgid "AdLib emulator:"
msgstr "Emulator AdLib:"
-#: gui/options.cpp:800 gui/options.cpp:801
+#: gui/options.cpp:798 gui/options.cpp:799
msgid "AdLib is used for music in many games"
msgstr "AdLib jest uПywany do muzyki w wielu grach"
-#: gui/options.cpp:811
+#: gui/options.cpp:809
msgid "Output rate:"
msgstr "Czъst. wyj.:"
-#: gui/options.cpp:811 gui/options.cpp:812
+#: gui/options.cpp:809 gui/options.cpp:810
msgid ""
"Higher value specifies better sound quality but may be not supported by your "
"soundcard"
@@ -688,67 +720,67 @@ msgstr ""
"WyПsze wartoЖci dajБ lepszБ jakoЖц dМwiъku, ale mogБ byц nieobsГugiwane "
"przez twojБ kartъ dМwiъkowБ"
-#: gui/options.cpp:822
+#: gui/options.cpp:820
msgid "GM Device:"
msgstr "UrzБdzenie GM:"
-#: gui/options.cpp:822
+#: gui/options.cpp:820
msgid "Specifies default sound device for General MIDI output"
msgstr "OkreЖla domyЖlne urzБdzenie dМwiъkowe dla wyjЖcia General MIDI"
-#: gui/options.cpp:833
+#: gui/options.cpp:831
msgid "Don't use General MIDI music"
msgstr "Nie uПywaj muzyki General MIDI"
-#: gui/options.cpp:844 gui/options.cpp:910
+#: gui/options.cpp:842 gui/options.cpp:908
msgid "Use first available device"
msgstr "UПyj pierwszego dostъpnego urzБdzenia"
-#: gui/options.cpp:856
+#: gui/options.cpp:854
msgid "SoundFont:"
msgstr "SoundFont:"
-#: gui/options.cpp:856 gui/options.cpp:858 gui/options.cpp:859
+#: gui/options.cpp:854 gui/options.cpp:856 gui/options.cpp:857
msgid "SoundFont is supported by some audio cards, FluidSynth and Timidity"
msgstr ""
"SoundFont jest wspierany przez niektѓre karty dМwiъkowe, FluidSynth i "
"Timidity"
-#: gui/options.cpp:858
+#: gui/options.cpp:856
msgctxt "lowres"
msgid "SoundFont:"
msgstr "SoundFont:"
-#: gui/options.cpp:864
+#: gui/options.cpp:862
msgid "Mixed AdLib/MIDI mode"
msgstr "Tryb miksowanego AdLib/MIDI"
-#: gui/options.cpp:864
+#: gui/options.cpp:862
msgid "Use both MIDI and AdLib sound generation"
msgstr "UПywaj obu generatorѓw dМwiъku, MIDI i AdLib, jednoczeЖnie"
-#: gui/options.cpp:867
+#: gui/options.cpp:865
msgid "MIDI gain:"
msgstr "Wzm. MIDI:"
-#: gui/options.cpp:874
+#: gui/options.cpp:872
msgid "FluidSynth Settings"
msgstr "Ustawienia FluidSynth"
-#: gui/options.cpp:881
+#: gui/options.cpp:879
msgid "MT-32 Device:"
msgstr "UrzБdzenie MT-32:"
-#: gui/options.cpp:881
+#: gui/options.cpp:879
msgid "Specifies default sound device for Roland MT-32/LAPC1/CM32l/CM64 output"
msgstr ""
"OkreЖla domyЖlne urzБdzenie dМwiъku dla wyjЖcia Roland MT-32/LAPC1/CM32l/CM64"
-#: gui/options.cpp:886
+#: gui/options.cpp:884
msgid "True Roland MT-32 (disable GM emulation)"
msgstr "Prawdziwy Roland MT-32 (wyГБcz emulacjъ GM)"
-#: gui/options.cpp:886 gui/options.cpp:888
+#: gui/options.cpp:884 gui/options.cpp:886
msgid ""
"Check if you want to use your real hardware Roland-compatible sound device "
"connected to your computer"
@@ -756,16 +788,16 @@ msgstr ""
"Zaznacz, jeЖli chcesz uПywaц swojej prawdziwej karty kompatybilnej z Roland "
"podГБczonej do twojego komputera"
-#: gui/options.cpp:888
+#: gui/options.cpp:886
msgctxt "lowres"
msgid "True Roland MT-32 (no GM emulation)"
msgstr "Prawdziwy Roland MT-32 (brak emulacji GM)"
-#: gui/options.cpp:891
+#: gui/options.cpp:889
msgid "Roland GS Device (enable MT-32 mappings)"
msgstr "Roland w trybie GS (wГБcz mapowanie MT-32)"
-#: gui/options.cpp:891
+#: gui/options.cpp:889
msgid ""
"Check if you want to enable patch mappings to emulate an MT-32 on a Roland "
"GS device"
@@ -773,173 +805,173 @@ msgstr ""
"Zaznacz, jeЖli chcesz wГБczyц Гatki mapowania pozwalajБce na emulacjъ MT-32 "
"na urzБdzeniu Roland GS"
-#: gui/options.cpp:900
+#: gui/options.cpp:898
msgid "Don't use Roland MT-32 music"
msgstr "Nie uПywaj muzyki Roland MT-32"
-#: gui/options.cpp:927
+#: gui/options.cpp:925
msgid "Text and Speech:"
msgstr "Tekst i mowa:"
-#: gui/options.cpp:931 gui/options.cpp:941
+#: gui/options.cpp:929 gui/options.cpp:939
msgid "Speech"
msgstr "Mowa"
-#: gui/options.cpp:932 gui/options.cpp:942
+#: gui/options.cpp:930 gui/options.cpp:940
msgid "Subtitles"
msgstr "Napisy"
-#: gui/options.cpp:933
+#: gui/options.cpp:931
msgid "Both"
msgstr "Oba"
-#: gui/options.cpp:935
+#: gui/options.cpp:933
msgid "Subtitle speed:"
msgstr "Prъd. napisѓw:"
-#: gui/options.cpp:937
+#: gui/options.cpp:935
msgctxt "lowres"
msgid "Text and Speech:"
msgstr "Tekst i mowa:"
-#: gui/options.cpp:941
+#: gui/options.cpp:939
msgid "Spch"
msgstr "Mowa"
-#: gui/options.cpp:942
+#: gui/options.cpp:940
msgid "Subs"
msgstr "Napisy"
-#: gui/options.cpp:943
+#: gui/options.cpp:941
msgctxt "lowres"
msgid "Both"
msgstr "Oba"
-#: gui/options.cpp:943
+#: gui/options.cpp:941
msgid "Show subtitles and play speech"
msgstr "WyЖwietlaj napisy i odtwarzaj mowъ"
-#: gui/options.cpp:945
+#: gui/options.cpp:943
msgctxt "lowres"
msgid "Subtitle speed:"
msgstr "Prъd. napisѓw:"
-#: gui/options.cpp:961
+#: gui/options.cpp:959
msgid "Music volume:"
msgstr "GГoЖnoЖц muzyki:"
-#: gui/options.cpp:963
+#: gui/options.cpp:961
msgctxt "lowres"
msgid "Music volume:"
msgstr "GГoЖnoЖц muzyki:"
-#: gui/options.cpp:970
+#: gui/options.cpp:968
msgid "Mute All"
msgstr "Wycisz"
-#: gui/options.cpp:973
+#: gui/options.cpp:971
msgid "SFX volume:"
msgstr "GГ. efekt. dМw.:"
-#: gui/options.cpp:973 gui/options.cpp:975 gui/options.cpp:976
+#: gui/options.cpp:971 gui/options.cpp:973 gui/options.cpp:974
msgid "Special sound effects volume"
msgstr "GГoЖnoЖц efektѓw dМw."
-#: gui/options.cpp:975
+#: gui/options.cpp:973
msgctxt "lowres"
msgid "SFX volume:"
msgstr "GГ. efekt. dМw.:"
-#: gui/options.cpp:983
+#: gui/options.cpp:981
msgid "Speech volume:"
msgstr "GГoЖnoЖц mowy:"
-#: gui/options.cpp:985
+#: gui/options.cpp:983
msgctxt "lowres"
msgid "Speech volume:"
msgstr "GГoЖnoЖц mowy:"
-#: gui/options.cpp:1142
+#: gui/options.cpp:1140
msgid "Theme Path:"
msgstr "ІcieПka stylu:"
-#: gui/options.cpp:1144
+#: gui/options.cpp:1142
msgctxt "lowres"
msgid "Theme Path:"
msgstr "ІcieПka stylu:"
-#: gui/options.cpp:1150 gui/options.cpp:1152 gui/options.cpp:1153
+#: gui/options.cpp:1148 gui/options.cpp:1150 gui/options.cpp:1151
msgid "Specifies path to additional data used by all games or ScummVM"
msgstr "OkreЖla ЖcieПkъ dla dodatkowych danych dla wszystkich gier lub ScummVM"
-#: gui/options.cpp:1159
+#: gui/options.cpp:1157
msgid "Plugins Path:"
msgstr "ІcieПka wtyczek:"
-#: gui/options.cpp:1161
+#: gui/options.cpp:1159
msgctxt "lowres"
msgid "Plugins Path:"
msgstr "ІcieПka wtyczek:"
-#: gui/options.cpp:1170 gui/fluidsynth-dialog.cpp:138
+#: gui/options.cpp:1168 gui/fluidsynth-dialog.cpp:138
msgid "Misc"
msgstr "RѓПne"
-#: gui/options.cpp:1172
+#: gui/options.cpp:1170
msgctxt "lowres"
msgid "Misc"
msgstr "RѓПne"
-#: gui/options.cpp:1174
+#: gui/options.cpp:1172
msgid "Theme:"
msgstr "Styl:"
-#: gui/options.cpp:1178
+#: gui/options.cpp:1176
msgid "GUI Renderer:"
msgstr "Renderer interf.:"
-#: gui/options.cpp:1190
+#: gui/options.cpp:1188
msgid "Autosave:"
msgstr "Autozapis:"
-#: gui/options.cpp:1192
+#: gui/options.cpp:1190
msgctxt "lowres"
msgid "Autosave:"
msgstr "Autozapis:"
-#: gui/options.cpp:1200
+#: gui/options.cpp:1198
msgid "Keys"
msgstr "Klawisze"
-#: gui/options.cpp:1207
+#: gui/options.cpp:1205
msgid "GUI Language:"
msgstr "Jъzyk interfejsu:"
-#: gui/options.cpp:1207
+#: gui/options.cpp:1205
msgid "Language of ScummVM GUI"
msgstr "Jъzyk interfejsu ScummVM"
-#: gui/options.cpp:1366
+#: gui/options.cpp:1364
msgid "You have to restart ScummVM before your changes will take effect."
msgstr "Musisz zrestartowaц ScummVM, by zmiany zostaГy uwzglъdnione."
-#: gui/options.cpp:1386
+#: gui/options.cpp:1384
msgid "The chosen directory cannot be written to. Please select another one."
msgstr "Ten katalog jest zabezpieczony przed zapisem. Wybierz inny."
-#: gui/options.cpp:1395
+#: gui/options.cpp:1393
msgid "Select directory for GUI themes"
msgstr "Wybierz katalog dla stylѓw GUI."
-#: gui/options.cpp:1405
+#: gui/options.cpp:1403
msgid "Select directory for extra files"
msgstr "Wybierz katalog dla dodatkowych plikѓw"
-#: gui/options.cpp:1416
+#: gui/options.cpp:1414
msgid "Select directory for plugins"
msgstr "Wybierz katalog dla wtyczek"
-#: gui/options.cpp:1469
+#: gui/options.cpp:1467
msgid ""
"The theme you selected does not support your current language. If you want "
"to use this theme you need to switch to another language first."
@@ -947,6 +979,29 @@ msgstr ""
"Wybrany styl nie obsГuguje obecnego jъzyka. JeЖli chcesz go uПywaц, zmieё "
"najpierw swѓj jъzyk."
+#. I18N: You must leave "#" as is, only word 'next' is translatable
+#: gui/predictivedialog.cpp:87
+msgid "# next"
+msgstr ""
+
+#: gui/predictivedialog.cpp:88
+msgid "add"
+msgstr ""
+
+#: gui/predictivedialog.cpp:92
+#, fuzzy
+msgid "Delete char"
+msgstr "Skasuj"
+
+#: gui/predictivedialog.cpp:96
+msgid "<"
+msgstr ""
+
+#. I18N: Pre means 'Predictive', leave '*' as is
+#: gui/predictivedialog.cpp:98
+msgid "* Pre"
+msgstr ""
+
#: gui/recorderdialog.cpp:64
msgid "Recorder or Playback Gameplay"
msgstr ""
@@ -984,6 +1039,11 @@ msgstr ""
msgid "Do you really want to delete this record?"
msgstr "Na pewno chcesz skasowaц ten zapis?"
+#: gui/recorderdialog.cpp:174
+#, fuzzy
+msgid "Unknown Author"
+msgstr "Nieznany bГБd"
+
#: gui/saveload-dialog.cpp:167
msgid "List view"
msgstr "Widok listy"
@@ -1427,14 +1487,18 @@ msgstr ""
msgid "Start anyway"
msgstr "WГБcz mimo tego"
-#: audio/fmopl.cpp:50
+#: audio/fmopl.cpp:62
msgid "MAME OPL emulator"
msgstr "Emulator OPL MAME"
-#: audio/fmopl.cpp:52
+#: audio/fmopl.cpp:64
msgid "DOSBox OPL emulator"
msgstr "Emulator OPL DOSBox"
+#: audio/fmopl.cpp:67
+msgid "ALSA Direct FM"
+msgstr ""
+
#: audio/mididrv.cpp:209
#, c-format
msgid ""
@@ -1484,7 +1548,7 @@ msgstr "Brak muzyki"
msgid "Amiga Audio Emulator"
msgstr "Emulator dМwiъku Amigi"
-#: audio/softsynth/adlib.cpp:2285
+#: audio/adlib.cpp:2291
msgid "AdLib Emulator"
msgstr "Emulator AdLib"
@@ -2114,14 +2178,13 @@ msgstr "Klikanie wyГБczone"
#: engines/agi/detection.cpp:147 engines/drascula/detection.cpp:302
#: engines/dreamweb/detection.cpp:47 engines/neverhood/detection.cpp:160
#: engines/sci/detection.cpp:394 engines/toltecs/detection.cpp:200
-#: engines/zvision/detection.cpp:246
+#: engines/zvision/detection_tables.h:51
msgid "Use original save/load screens"
msgstr "UПyj oryginalnych ekranѓw odczytu/zapisu"
#: engines/agi/detection.cpp:148 engines/drascula/detection.cpp:303
#: engines/dreamweb/detection.cpp:48 engines/neverhood/detection.cpp:161
#: engines/sci/detection.cpp:395 engines/toltecs/detection.cpp:201
-#: engines/zvision/detection.cpp:247
msgid "Use the original save/load screens, instead of the ScummVM ones"
msgstr "UПyj oryginalnych ekranѓw odczytu/zapisu zamiast tych ze ScummVM"
@@ -3255,6 +3318,25 @@ msgstr "Leц w prawo"
msgid "Fly to lower right"
msgstr "Leц w dѓГ, w prawo"
+#: engines/scumm/input.cpp:572
+#, fuzzy
+msgid "Snap scroll on"
+msgstr "PГynne przewijanie"
+
+#: engines/scumm/input.cpp:574
+msgid "Snap scroll off"
+msgstr ""
+
+#: engines/scumm/input.cpp:587
+#, fuzzy
+msgid "Music volume: "
+msgstr "GГoЖnoЖц muzyki:"
+
+#: engines/scumm/input.cpp:604
+#, fuzzy
+msgid "Subtitle speed: "
+msgstr "Prъd. napisѓw:"
+
#: engines/scumm/scumm.cpp:1832
#, c-format
msgid ""
@@ -3411,39 +3493,44 @@ msgstr ""
msgid "Show the current number of frames per second in the upper left corner"
msgstr ""
-#: engines/zvision/detection.cpp:256
+#: engines/zvision/detection_tables.h:52
+#, fuzzy
+msgid "Use the original save/load screens instead of the ScummVM interface"
+msgstr "UПyj oryginalnych ekranѓw odczytu/zapisu zamiast tych ze ScummVM"
+
+#: engines/zvision/detection_tables.h:61
msgid "Double FPS"
msgstr ""
-#: engines/zvision/detection.cpp:257
-msgid "Increase game FPS from 30 to 60"
+#: engines/zvision/detection_tables.h:62
+msgid "Increase framerate from 30 to 60 FPS"
msgstr ""
-#: engines/zvision/detection.cpp:266
+#: engines/zvision/detection_tables.h:71
#, fuzzy
msgid "Enable Venus"
msgstr "WГБcz tryb helowy"
-#: engines/zvision/detection.cpp:267
+#: engines/zvision/detection_tables.h:72
+#, fuzzy
msgid "Enable the Venus help system"
-msgstr ""
+msgstr "WГБcz tryb helowy"
-#: engines/zvision/detection.cpp:276
+#: engines/zvision/detection_tables.h:81
msgid "Disable animation while turning"
msgstr ""
-#: engines/zvision/detection.cpp:277
-msgid "Disable animation while turning in panoramic mode"
+#: engines/zvision/detection_tables.h:82
+msgid "Disable animation while turning in panorama mode"
msgstr ""
-#: engines/zvision/detection.cpp:286
-msgid "Use the hires MPEG movies"
+#: engines/zvision/detection_tables.h:91
+msgid "Use high resolution MPEG video"
msgstr ""
-#: engines/zvision/detection.cpp:287
+#: engines/zvision/detection_tables.h:92
#, fuzzy
-msgid ""
-"Use the hires MPEG movies of the DVD version, instead of the lowres AVI ones"
+msgid "Use MPEG video from the DVD version, instead of lower resolution AVI"
msgstr ""
"UПyj alternatywnego zestawu srebrnych kursorѓw zamiast zwykГych zГotych"
diff --git a/po/pt_BR.po b/po/pt_BR.po
index 8280b28154..a406d5e096 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.sf.net\n"
-"POT-Creation-Date: 2015-06-30 20:57+0100\n"
+"POT-Creation-Date: 2015-10-11 18:59+0100\n"
"PO-Revision-Date: 2011-10-21 21:30-0300\n"
"Last-Translator: Saulo Benigno <saulobenigno@gmail.com>\n"
"Language-Team: ScummBR (www.scummbr.com) <scummbr@yahoo.com.br>\n"
@@ -33,7 +33,7 @@ msgstr "Funчѕes compiladas em:"
msgid "Available engines:"
msgstr "Programas disponэveis:"
-#: gui/browser.cpp:68
+#: gui/browser.cpp:68 gui/browser_osx.mm:104
#, fuzzy
msgid "Show hidden files"
msgstr "Mostrar / Ocultar console"
@@ -55,13 +55,14 @@ msgctxt "lowres"
msgid "Go up"
msgstr "Acima"
-#: gui/browser.cpp:75 gui/chooser.cpp:46 gui/KeysDialog.cpp:43
-#: gui/launcher.cpp:351 gui/massadd.cpp:95 gui/options.cpp:1239
-#: gui/recorderdialog.cpp:70 gui/recorderdialog.cpp:156
-#: gui/saveload-dialog.cpp:216 gui/saveload-dialog.cpp:276
-#: gui/saveload-dialog.cpp:547 gui/saveload-dialog.cpp:931
-#: gui/themebrowser.cpp:55 gui/fluidsynth-dialog.cpp:152
-#: engines/engine.cpp:483 backends/platform/wii/options.cpp:48
+#: gui/browser.cpp:75 gui/chooser.cpp:46 gui/editrecorddialog.cpp:67
+#: gui/KeysDialog.cpp:43 gui/launcher.cpp:351 gui/massadd.cpp:95
+#: gui/options.cpp:1237 gui/predictivedialog.cpp:74 gui/recorderdialog.cpp:70
+#: gui/recorderdialog.cpp:156 gui/saveload-dialog.cpp:216
+#: gui/saveload-dialog.cpp:276 gui/saveload-dialog.cpp:547
+#: gui/saveload-dialog.cpp:931 gui/themebrowser.cpp:55
+#: gui/fluidsynth-dialog.cpp:152 engines/engine.cpp:483
+#: backends/platform/wii/options.cpp:48
#: backends/events/default/default-events.cpp:196
#: backends/events/default/default-events.cpp:218
#: engines/drascula/saveload.cpp:49 engines/parallaction/saveload.cpp:274
@@ -69,10 +70,27 @@ msgstr "Acima"
msgid "Cancel"
msgstr "Cancelar"
-#: gui/browser.cpp:76 gui/chooser.cpp:47 gui/themebrowser.cpp:56
+#: gui/browser.cpp:76 gui/browser_osx.mm:103 gui/chooser.cpp:47
+#: gui/themebrowser.cpp:56
msgid "Choose"
msgstr "Escolher"
+#: gui/editrecorddialog.cpp:58
+msgid "Author:"
+msgstr ""
+
+#: gui/editrecorddialog.cpp:59 gui/launcher.cpp:204
+msgid "Name:"
+msgstr "Nome:"
+
+#: gui/editrecorddialog.cpp:60
+msgid "Notes:"
+msgstr ""
+
+#: gui/editrecorddialog.cpp:68 gui/predictivedialog.cpp:75
+msgid "Ok"
+msgstr ""
+
#: gui/gui-manager.cpp:117 backends/keymapper/remap-dialog.cpp:53
#: engines/scumm/help.cpp:126 engines/scumm/help.cpp:141
#: engines/scumm/help.cpp:166 engines/scumm/help.cpp:192
@@ -106,7 +124,7 @@ msgid "Map"
msgstr "Mapear"
#: gui/KeysDialog.cpp:42 gui/launcher.cpp:352 gui/launcher.cpp:1048
-#: gui/launcher.cpp:1052 gui/massadd.cpp:92 gui/options.cpp:1240
+#: gui/launcher.cpp:1052 gui/massadd.cpp:92 gui/options.cpp:1238
#: gui/saveload-dialog.cpp:932 gui/fluidsynth-dialog.cpp:153
#: engines/engine.cpp:402 engines/engine.cpp:413
#: backends/platform/wii/options.cpp:47
@@ -168,10 +186,6 @@ msgctxt "lowres"
msgid "ID:"
msgstr "Cѓdigo:"
-#: gui/launcher.cpp:204
-msgid "Name:"
-msgstr "Nome:"
-
#: gui/launcher.cpp:204 gui/launcher.cpp:206 gui/launcher.cpp:207
msgid "Full title of the game"
msgstr "Tэtulo completo do jogo"
@@ -192,7 +206,7 @@ msgid ""
msgstr "Idioma do jogo. Isto nуo irс passar seu jogo Inglъs para Portuguъs"
#: gui/launcher.cpp:212 gui/launcher.cpp:226 gui/options.cpp:87
-#: gui/options.cpp:737 gui/options.cpp:750 gui/options.cpp:1210
+#: gui/options.cpp:735 gui/options.cpp:748 gui/options.cpp:1208
#: audio/null.cpp:41
msgid "<default>"
msgstr "<padrуo>"
@@ -215,11 +229,11 @@ msgstr "Sistema:"
msgid "Engine"
msgstr "Examinar"
-#: gui/launcher.cpp:245 gui/options.cpp:1073 gui/options.cpp:1090
+#: gui/launcher.cpp:245 gui/options.cpp:1071 gui/options.cpp:1088
msgid "Graphics"
msgstr "Grсficos"
-#: gui/launcher.cpp:245 gui/options.cpp:1073 gui/options.cpp:1090
+#: gui/launcher.cpp:245 gui/options.cpp:1071 gui/options.cpp:1088
msgid "GFX"
msgstr "GFX"
@@ -232,7 +246,7 @@ msgctxt "lowres"
msgid "Override global graphic settings"
msgstr "Sobrepor configuraчуo global de grсficos"
-#: gui/launcher.cpp:257 gui/options.cpp:1096
+#: gui/launcher.cpp:257 gui/options.cpp:1094
msgid "Audio"
msgstr "Сudio"
@@ -245,11 +259,11 @@ msgctxt "lowres"
msgid "Override global audio settings"
msgstr "Sobrepor configuraчуo global de сudio"
-#: gui/launcher.cpp:271 gui/options.cpp:1101
+#: gui/launcher.cpp:271 gui/options.cpp:1099
msgid "Volume"
msgstr "Volume"
-#: gui/launcher.cpp:273 gui/options.cpp:1103
+#: gui/launcher.cpp:273 gui/options.cpp:1101
msgctxt "lowres"
msgid "Volume"
msgstr "Volume"
@@ -263,7 +277,7 @@ msgctxt "lowres"
msgid "Override global volume settings"
msgstr "Sobrepor configuraчуo global de volume"
-#: gui/launcher.cpp:286 gui/options.cpp:1111
+#: gui/launcher.cpp:286 gui/options.cpp:1109
msgid "MIDI"
msgstr "MIDI"
@@ -276,7 +290,7 @@ msgctxt "lowres"
msgid "Override global MIDI settings"
msgstr "Sobrepor configuraчуo global de MIDI"
-#: gui/launcher.cpp:300 gui/options.cpp:1117
+#: gui/launcher.cpp:300 gui/options.cpp:1115
msgid "MT-32"
msgstr "MT-32"
@@ -289,11 +303,11 @@ msgctxt "lowres"
msgid "Override global MT-32 settings"
msgstr "Sobrepor configuraчуo global de MT-32"
-#: gui/launcher.cpp:314 gui/options.cpp:1124
+#: gui/launcher.cpp:314 gui/options.cpp:1122
msgid "Paths"
msgstr "Pastas"
-#: gui/launcher.cpp:316 gui/options.cpp:1126
+#: gui/launcher.cpp:316 gui/options.cpp:1124
msgctxt "lowres"
msgid "Paths"
msgstr "Pastas"
@@ -307,7 +321,7 @@ msgctxt "lowres"
msgid "Game Path:"
msgstr "Pasta do Jogo:"
-#: gui/launcher.cpp:330 gui/options.cpp:1150
+#: gui/launcher.cpp:330 gui/options.cpp:1148
msgid "Extra Path:"
msgstr "Pasta de Extras"
@@ -315,42 +329,42 @@ msgstr "Pasta de Extras"
msgid "Specifies path to additional data used by the game"
msgstr "Especifique a pasta para dados utilizados no jogo"
-#: gui/launcher.cpp:332 gui/options.cpp:1152
+#: gui/launcher.cpp:332 gui/options.cpp:1150
msgctxt "lowres"
msgid "Extra Path:"
msgstr "Pasta de Extras"
-#: gui/launcher.cpp:339 gui/options.cpp:1134
+#: gui/launcher.cpp:339 gui/options.cpp:1132
msgid "Save Path:"
msgstr "Pasta para Salvar"
#: gui/launcher.cpp:339 gui/launcher.cpp:341 gui/launcher.cpp:342
-#: gui/options.cpp:1134 gui/options.cpp:1136 gui/options.cpp:1137
+#: gui/options.cpp:1132 gui/options.cpp:1134 gui/options.cpp:1135
msgid "Specifies where your saved games are put"
msgstr "Especifique onde guardar seus jogos salvos"
-#: gui/launcher.cpp:341 gui/options.cpp:1136
+#: gui/launcher.cpp:341 gui/options.cpp:1134
msgctxt "lowres"
msgid "Save Path:"
msgstr "Pasta para Salvar"
#: gui/launcher.cpp:360 gui/launcher.cpp:459 gui/launcher.cpp:517
-#: gui/launcher.cpp:571 gui/options.cpp:1145 gui/options.cpp:1153
-#: gui/options.cpp:1162 gui/options.cpp:1277 gui/options.cpp:1283
-#: gui/options.cpp:1291 gui/options.cpp:1321 gui/options.cpp:1327
-#: gui/options.cpp:1334 gui/options.cpp:1427 gui/options.cpp:1430
-#: gui/options.cpp:1442
+#: gui/launcher.cpp:571 gui/options.cpp:1143 gui/options.cpp:1151
+#: gui/options.cpp:1160 gui/options.cpp:1275 gui/options.cpp:1281
+#: gui/options.cpp:1289 gui/options.cpp:1319 gui/options.cpp:1325
+#: gui/options.cpp:1332 gui/options.cpp:1425 gui/options.cpp:1428
+#: gui/options.cpp:1440
msgctxt "path"
msgid "None"
msgstr "Nenhum(a)"
#: gui/launcher.cpp:365 gui/launcher.cpp:465 gui/launcher.cpp:575
-#: gui/options.cpp:1271 gui/options.cpp:1315 gui/options.cpp:1433
+#: gui/options.cpp:1269 gui/options.cpp:1313 gui/options.cpp:1431
#: backends/platform/wii/options.cpp:56
msgid "Default"
msgstr "Padrуo"
-#: gui/launcher.cpp:510 gui/options.cpp:1436
+#: gui/launcher.cpp:510 gui/options.cpp:1434
msgid "Select SoundFont"
msgstr "Selecione o SoundFont"
@@ -362,7 +376,7 @@ msgstr "Selecione a pasta com os arquivos do jogo"
msgid "Select additional game directory"
msgstr "Selecione a pasta adicional do jogo"
-#: gui/launcher.cpp:559 gui/options.cpp:1379
+#: gui/launcher.cpp:559 gui/options.cpp:1377
msgid "Select directory for saved games"
msgstr "Selecione a pasta para os jogos salvos"
@@ -567,6 +581,24 @@ msgstr ""
"Encontrado(s) %d novo(s) jogo(s, ignorados %d previamente adicionados "
"jogos..."
+#: gui/onscreendialog.cpp:101 gui/onscreendialog.cpp:103
+msgid "Stop"
+msgstr ""
+
+#: gui/onscreendialog.cpp:106
+msgid "Edit record description"
+msgstr ""
+
+#: gui/onscreendialog.cpp:108
+#, fuzzy
+msgid "Switch to Game"
+msgstr "Trocar"
+
+#: gui/onscreendialog.cpp:110
+#, fuzzy
+msgid "Fast replay"
+msgstr "Modo rсpido"
+
#: gui/options.cpp:85
msgid "Never"
msgstr "Nunca"
@@ -607,8 +639,8 @@ msgstr "44 kHz"
msgid "48 kHz"
msgstr "48 kHz"
-#: gui/options.cpp:255 gui/options.cpp:481 gui/options.cpp:582
-#: gui/options.cpp:651 gui/options.cpp:859
+#: gui/options.cpp:255 gui/options.cpp:479 gui/options.cpp:580
+#: gui/options.cpp:649 gui/options.cpp:857
msgctxt "soundfont"
msgid "None"
msgstr "Nenhum(a)"
@@ -629,70 +661,70 @@ msgstr "a configuraчуo de tela cheia nуo pєde ser mudada"
msgid "the aspect ratio setting could not be changed"
msgstr "a configuraчуo de proporчуo nуo pєde ser mudada"
-#: gui/options.cpp:734
+#: gui/options.cpp:732
msgid "Graphics mode:"
msgstr "Modo grсfico:"
-#: gui/options.cpp:748
+#: gui/options.cpp:746
msgid "Render mode:"
msgstr "Renderizaчуo"
-#: gui/options.cpp:748 gui/options.cpp:749
+#: gui/options.cpp:746 gui/options.cpp:747
msgid "Special dithering modes supported by some games"
msgstr "Modos especiais de dithering suportados por alguns jogos"
-#: gui/options.cpp:760
+#: gui/options.cpp:758
#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2298
msgid "Fullscreen mode"
msgstr "Modo Tela Cheia"
-#: gui/options.cpp:763
+#: gui/options.cpp:761
msgid "Aspect ratio correction"
msgstr "Correчуo de proporчуo"
-#: gui/options.cpp:763
+#: gui/options.cpp:761
msgid "Correct aspect ratio for 320x200 games"
msgstr "Correчуo de proporчуo para jogos 320x200"
-#: gui/options.cpp:771
+#: gui/options.cpp:769
msgid "Preferred Device:"
msgstr "Dispositivo pref.:"
-#: gui/options.cpp:771
+#: gui/options.cpp:769
msgid "Music Device:"
msgstr "Disp. de mњsica:"
-#: gui/options.cpp:771 gui/options.cpp:773
+#: gui/options.cpp:769 gui/options.cpp:771
msgid "Specifies preferred sound device or sound card emulator"
msgstr "Especifica o dispositivo de som preferido ou emulador de placa de som"
-#: gui/options.cpp:771 gui/options.cpp:773 gui/options.cpp:774
+#: gui/options.cpp:769 gui/options.cpp:771 gui/options.cpp:772
msgid "Specifies output sound device or sound card emulator"
msgstr "Especifica o dispositivo de saэda de som ou emulador de placa de som"
-#: gui/options.cpp:773
+#: gui/options.cpp:771
msgctxt "lowres"
msgid "Preferred Dev.:"
msgstr "Dispositivo pref.:"
-#: gui/options.cpp:773
+#: gui/options.cpp:771
msgctxt "lowres"
msgid "Music Device:"
msgstr "Dispositivo de mњsica:"
-#: gui/options.cpp:800
+#: gui/options.cpp:798
msgid "AdLib emulator:"
msgstr "Emulador AdLib:"
-#: gui/options.cpp:800 gui/options.cpp:801
+#: gui/options.cpp:798 gui/options.cpp:799
msgid "AdLib is used for music in many games"
msgstr "AdLib щ utilizado para mњsica em vсrios jogos"
-#: gui/options.cpp:811
+#: gui/options.cpp:809
msgid "Output rate:"
msgstr "Taxa de saэda:"
-#: gui/options.cpp:811 gui/options.cpp:812
+#: gui/options.cpp:809 gui/options.cpp:810
msgid ""
"Higher value specifies better sound quality but may be not supported by your "
"soundcard"
@@ -700,66 +732,66 @@ msgstr ""
"Maior valor especifica melhor qualidade de som, mas pode nуo ser suportado "
"por sua placa de som"
-#: gui/options.cpp:822
+#: gui/options.cpp:820
msgid "GM Device:"
msgstr "Dispositivo GM:"
-#: gui/options.cpp:822
+#: gui/options.cpp:820
msgid "Specifies default sound device for General MIDI output"
msgstr "Especifique o dispositivo de som padrуo para a saэda General MIDI"
-#: gui/options.cpp:833
+#: gui/options.cpp:831
msgid "Don't use General MIDI music"
msgstr "Nуo usar mњsica General MIDI"
-#: gui/options.cpp:844 gui/options.cpp:910
+#: gui/options.cpp:842 gui/options.cpp:908
msgid "Use first available device"
msgstr "Usar o primeiro dispositivo disponэvel"
-#: gui/options.cpp:856
+#: gui/options.cpp:854
msgid "SoundFont:"
msgstr "SoundFont:"
-#: gui/options.cpp:856 gui/options.cpp:858 gui/options.cpp:859
+#: gui/options.cpp:854 gui/options.cpp:856 gui/options.cpp:857
msgid "SoundFont is supported by some audio cards, FluidSynth and Timidity"
msgstr "SoundFont щ suportado por algumas placas de som, FluidSynth e Timidity"
-#: gui/options.cpp:858
+#: gui/options.cpp:856
msgctxt "lowres"
msgid "SoundFont:"
msgstr "SoundFont:"
-#: gui/options.cpp:864
+#: gui/options.cpp:862
msgid "Mixed AdLib/MIDI mode"
msgstr "Mixar AdLib/MIDI"
-#: gui/options.cpp:864
+#: gui/options.cpp:862
msgid "Use both MIDI and AdLib sound generation"
msgstr "Usar MIDI e AdLib juntos na geraчуo de som"
-#: gui/options.cpp:867
+#: gui/options.cpp:865
msgid "MIDI gain:"
msgstr "Ganho MIDI:"
-#: gui/options.cpp:874
+#: gui/options.cpp:872
msgid "FluidSynth Settings"
msgstr ""
-#: gui/options.cpp:881
+#: gui/options.cpp:879
msgid "MT-32 Device:"
msgstr "Dispositivo MT-32:"
-#: gui/options.cpp:881
+#: gui/options.cpp:879
msgid "Specifies default sound device for Roland MT-32/LAPC1/CM32l/CM64 output"
msgstr ""
"Especifique o dispositivo de som padrуo para a saэda Roland MT-32/LAPC1/"
"CM32l/CM64"
-#: gui/options.cpp:886
+#: gui/options.cpp:884
msgid "True Roland MT-32 (disable GM emulation)"
msgstr "Roland MT-32 real (desligar emulaчуo GM)"
-#: gui/options.cpp:886 gui/options.cpp:888
+#: gui/options.cpp:884 gui/options.cpp:886
msgid ""
"Check if you want to use your real hardware Roland-compatible sound device "
"connected to your computer"
@@ -767,191 +799,191 @@ msgstr ""
"Verifique se vocъ quer usar o seu dispositivo de hardware de som compatэvel "
"com Roland"
-#: gui/options.cpp:888
+#: gui/options.cpp:886
msgctxt "lowres"
msgid "True Roland MT-32 (no GM emulation)"
msgstr "Roland MT-32 real (sem emulaчуo GM)"
-#: gui/options.cpp:891
+#: gui/options.cpp:889
#, fuzzy
msgid "Roland GS Device (enable MT-32 mappings)"
msgstr "Roland MT-32 real (desligar emulaчуo GM)"
-#: gui/options.cpp:891
+#: gui/options.cpp:889
msgid ""
"Check if you want to enable patch mappings to emulate an MT-32 on a Roland "
"GS device"
msgstr ""
-#: gui/options.cpp:900
+#: gui/options.cpp:898
msgid "Don't use Roland MT-32 music"
msgstr "Nуo usar mњsica Roland MT-32"
-#: gui/options.cpp:927
+#: gui/options.cpp:925
msgid "Text and Speech:"
msgstr "Texto e Voz:"
-#: gui/options.cpp:931 gui/options.cpp:941
+#: gui/options.cpp:929 gui/options.cpp:939
msgid "Speech"
msgstr "Voz"
-#: gui/options.cpp:932 gui/options.cpp:942
+#: gui/options.cpp:930 gui/options.cpp:940
msgid "Subtitles"
msgstr "Legendas"
-#: gui/options.cpp:933
+#: gui/options.cpp:931
msgid "Both"
msgstr "Ambos"
-#: gui/options.cpp:935
+#: gui/options.cpp:933
msgid "Subtitle speed:"
msgstr "Rapidez legendas:"
-#: gui/options.cpp:937
+#: gui/options.cpp:935
msgctxt "lowres"
msgid "Text and Speech:"
msgstr "Texto e Voz:"
-#: gui/options.cpp:941
+#: gui/options.cpp:939
msgid "Spch"
msgstr "Voz"
-#: gui/options.cpp:942
+#: gui/options.cpp:940
msgid "Subs"
msgstr "Legs"
-#: gui/options.cpp:943
+#: gui/options.cpp:941
msgctxt "lowres"
msgid "Both"
msgstr "Ambos"
-#: gui/options.cpp:943
+#: gui/options.cpp:941
msgid "Show subtitles and play speech"
msgstr "Mostrar legenda e vozes (dublagem)"
-#: gui/options.cpp:945
+#: gui/options.cpp:943
msgctxt "lowres"
msgid "Subtitle speed:"
msgstr "Velocidade das legendas:"
-#: gui/options.cpp:961
+#: gui/options.cpp:959
msgid "Music volume:"
msgstr "Volume da Mњsica:"
-#: gui/options.cpp:963
+#: gui/options.cpp:961
msgctxt "lowres"
msgid "Music volume:"
msgstr "Volume da Mњsica:"
-#: gui/options.cpp:970
+#: gui/options.cpp:968
msgid "Mute All"
msgstr "Mudo"
-#: gui/options.cpp:973
+#: gui/options.cpp:971
msgid "SFX volume:"
msgstr "Volume dos Sons:"
-#: gui/options.cpp:973 gui/options.cpp:975 gui/options.cpp:976
+#: gui/options.cpp:971 gui/options.cpp:973 gui/options.cpp:974
msgid "Special sound effects volume"
msgstr "Volume dos efeitos sonoros especiais"
-#: gui/options.cpp:975
+#: gui/options.cpp:973
msgctxt "lowres"
msgid "SFX volume:"
msgstr "Volume dos Sons:"
-#: gui/options.cpp:983
+#: gui/options.cpp:981
msgid "Speech volume:"
msgstr "Volume da Voz:"
-#: gui/options.cpp:985
+#: gui/options.cpp:983
msgctxt "lowres"
msgid "Speech volume:"
msgstr "Volume da Voz:"
-#: gui/options.cpp:1142
+#: gui/options.cpp:1140
msgid "Theme Path:"
msgstr "Pasta do Tema"
-#: gui/options.cpp:1144
+#: gui/options.cpp:1142
msgctxt "lowres"
msgid "Theme Path:"
msgstr "Pasta do Tema"
-#: gui/options.cpp:1150 gui/options.cpp:1152 gui/options.cpp:1153
+#: gui/options.cpp:1148 gui/options.cpp:1150 gui/options.cpp:1151
msgid "Specifies path to additional data used by all games or ScummVM"
msgstr ""
"Especifica a pasta para os dados adicionais usados por todos os jogos ou "
"ScummVM"
-#: gui/options.cpp:1159
+#: gui/options.cpp:1157
msgid "Plugins Path:"
msgstr "Pasta de Plugins:"
-#: gui/options.cpp:1161
+#: gui/options.cpp:1159
msgctxt "lowres"
msgid "Plugins Path:"
msgstr "Pasta de Plugins:"
-#: gui/options.cpp:1170 gui/fluidsynth-dialog.cpp:138
+#: gui/options.cpp:1168 gui/fluidsynth-dialog.cpp:138
msgid "Misc"
msgstr "Outros"
-#: gui/options.cpp:1172
+#: gui/options.cpp:1170
msgctxt "lowres"
msgid "Misc"
msgstr "Outros"
-#: gui/options.cpp:1174
+#: gui/options.cpp:1172
msgid "Theme:"
msgstr "Tema:"
-#: gui/options.cpp:1178
+#: gui/options.cpp:1176
msgid "GUI Renderer:"
msgstr "Renderizador GUI:"
-#: gui/options.cpp:1190
+#: gui/options.cpp:1188
msgid "Autosave:"
msgstr "Auto-Salvar:"
-#: gui/options.cpp:1192
+#: gui/options.cpp:1190
msgctxt "lowres"
msgid "Autosave:"
msgstr "Auto-Salvar:"
-#: gui/options.cpp:1200
+#: gui/options.cpp:1198
msgid "Keys"
msgstr "Teclas"
-#: gui/options.cpp:1207
+#: gui/options.cpp:1205
msgid "GUI Language:"
msgstr "Idioma do GUI:"
-#: gui/options.cpp:1207
+#: gui/options.cpp:1205
msgid "Language of ScummVM GUI"
msgstr "Linguagem do ScummVM GUI"
-#: gui/options.cpp:1366
+#: gui/options.cpp:1364
msgid "You have to restart ScummVM before your changes will take effect."
msgstr "Vocъ tem que reiniciar o ScummVM para funcionar."
-#: gui/options.cpp:1386
+#: gui/options.cpp:1384
msgid "The chosen directory cannot be written to. Please select another one."
msgstr "O diretѓrio escolhido nуo pode ser usado. Por favor, selecione outro."
-#: gui/options.cpp:1395
+#: gui/options.cpp:1393
msgid "Select directory for GUI themes"
msgstr "Selecione a pasta para os temas da Interface de Uso Grсfico"
-#: gui/options.cpp:1405
+#: gui/options.cpp:1403
msgid "Select directory for extra files"
msgstr "Selecione a pasta para os arquivos extras"
-#: gui/options.cpp:1416
+#: gui/options.cpp:1414
msgid "Select directory for plugins"
msgstr "Selecione a pasta para os plugins"
-#: gui/options.cpp:1469
+#: gui/options.cpp:1467
msgid ""
"The theme you selected does not support your current language. If you want "
"to use this theme you need to switch to another language first."
@@ -959,6 +991,29 @@ msgstr ""
"O tema que vocъ selecionou nуo suporta seu idioma atual. Se vocъ quiser usar "
"este tema vocъ precisa mudar para outro idioma."
+#. I18N: You must leave "#" as is, only word 'next' is translatable
+#: gui/predictivedialog.cpp:87
+msgid "# next"
+msgstr ""
+
+#: gui/predictivedialog.cpp:88
+msgid "add"
+msgstr ""
+
+#: gui/predictivedialog.cpp:92
+#, fuzzy
+msgid "Delete char"
+msgstr "Excluir"
+
+#: gui/predictivedialog.cpp:96
+msgid "<"
+msgstr ""
+
+#. I18N: Pre means 'Predictive', leave '*' as is
+#: gui/predictivedialog.cpp:98
+msgid "* Pre"
+msgstr ""
+
#: gui/recorderdialog.cpp:64
msgid "Recorder or Playback Gameplay"
msgstr ""
@@ -996,6 +1051,11 @@ msgstr ""
msgid "Do you really want to delete this record?"
msgstr "Vocъ realmente quer excluir este jogo salvo?"
+#: gui/recorderdialog.cpp:174
+#, fuzzy
+msgid "Unknown Author"
+msgstr "Erro desconhecido"
+
#: gui/saveload-dialog.cpp:167
msgid "List view"
msgstr ""
@@ -1458,14 +1518,18 @@ msgstr ""
msgid "Start anyway"
msgstr "Iniciar de qualquer maneira"
-#: audio/fmopl.cpp:50
+#: audio/fmopl.cpp:62
msgid "MAME OPL emulator"
msgstr "Emulador MAME OPL"
-#: audio/fmopl.cpp:52
+#: audio/fmopl.cpp:64
msgid "DOSBox OPL emulator"
msgstr "Emulador DOSBox OPL"
+#: audio/fmopl.cpp:67
+msgid "ALSA Direct FM"
+msgstr ""
+
#: audio/mididrv.cpp:209
#, c-format
msgid ""
@@ -1515,7 +1579,7 @@ msgstr "Sem mњsica"
msgid "Amiga Audio Emulator"
msgstr "Emulador Som Amiga"
-#: audio/softsynth/adlib.cpp:2285
+#: audio/adlib.cpp:2291
msgid "AdLib Emulator"
msgstr "Emulador AdLib"
@@ -2152,14 +2216,13 @@ msgstr "Clicando Desabilitado"
#: engines/agi/detection.cpp:147 engines/drascula/detection.cpp:302
#: engines/dreamweb/detection.cpp:47 engines/neverhood/detection.cpp:160
#: engines/sci/detection.cpp:394 engines/toltecs/detection.cpp:200
-#: engines/zvision/detection.cpp:246
+#: engines/zvision/detection_tables.h:51
msgid "Use original save/load screens"
msgstr ""
#: engines/agi/detection.cpp:148 engines/drascula/detection.cpp:303
#: engines/dreamweb/detection.cpp:48 engines/neverhood/detection.cpp:161
#: engines/sci/detection.cpp:395 engines/toltecs/detection.cpp:201
-#: engines/zvision/detection.cpp:247
msgid "Use the original save/load screens, instead of the ScummVM ones"
msgstr ""
@@ -3309,6 +3372,25 @@ msgstr "Voar para direita"
msgid "Fly to lower right"
msgstr "Voar para direita inferior"
+#: engines/scumm/input.cpp:572
+#, fuzzy
+msgid "Snap scroll on"
+msgstr "Descer na lista"
+
+#: engines/scumm/input.cpp:574
+msgid "Snap scroll off"
+msgstr ""
+
+#: engines/scumm/input.cpp:587
+#, fuzzy
+msgid "Music volume: "
+msgstr "Volume da Mњsica:"
+
+#: engines/scumm/input.cpp:604
+#, fuzzy
+msgid "Subtitle speed: "
+msgstr "Rapidez legendas:"
+
#: engines/scumm/scumm.cpp:1832
#, c-format
msgid ""
@@ -3465,38 +3547,42 @@ msgstr ""
msgid "Show the current number of frames per second in the upper left corner"
msgstr ""
-#: engines/zvision/detection.cpp:256
+#: engines/zvision/detection_tables.h:52
+msgid "Use the original save/load screens instead of the ScummVM interface"
+msgstr ""
+
+#: engines/zvision/detection_tables.h:61
msgid "Double FPS"
msgstr ""
-#: engines/zvision/detection.cpp:257
-msgid "Increase game FPS from 30 to 60"
+#: engines/zvision/detection_tables.h:62
+msgid "Increase framerate from 30 to 60 FPS"
msgstr ""
-#: engines/zvision/detection.cpp:266
+#: engines/zvision/detection_tables.h:71
#, fuzzy
msgid "Enable Venus"
msgstr "Ligar modo Roland GS"
-#: engines/zvision/detection.cpp:267
+#: engines/zvision/detection_tables.h:72
+#, fuzzy
msgid "Enable the Venus help system"
-msgstr ""
+msgstr "Ligar modo Roland GS"
-#: engines/zvision/detection.cpp:276
+#: engines/zvision/detection_tables.h:81
msgid "Disable animation while turning"
msgstr ""
-#: engines/zvision/detection.cpp:277
-msgid "Disable animation while turning in panoramic mode"
+#: engines/zvision/detection_tables.h:82
+msgid "Disable animation while turning in panorama mode"
msgstr ""
-#: engines/zvision/detection.cpp:286
-msgid "Use the hires MPEG movies"
+#: engines/zvision/detection_tables.h:91
+msgid "Use high resolution MPEG video"
msgstr ""
-#: engines/zvision/detection.cpp:287
-msgid ""
-"Use the hires MPEG movies of the DVD version, instead of the lowres AVI ones"
+#: engines/zvision/detection_tables.h:92
+msgid "Use MPEG video from the DVD version, instead of lower resolution AVI"
msgstr ""
#~ msgid "EGA undithering"
diff --git a/po/ru_RU.po b/po/ru_RU.po
index 066333bbb5..5fbb8dcb24 100644
--- a/po/ru_RU.po
+++ b/po/ru_RU.po
@@ -1,22 +1,21 @@
# Russian translation for ScummVM.
# Copyright (C) 2010-2015 The ScummVM Team
# This file is distributed under the same license as the ScummVM package.
-# Eugene Sandulenko <sev@scummvm.org>, 2010-2014
+# Eugene Sandulenko <sev@scummvm.org>, 2010-2015
#
msgid ""
msgstr ""
-"Project-Id-Version: ScummVM 1.3.0svn\n"
+"Project-Id-Version: ScummVM 1.8.0svn\n"
"Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n"
-"POT-Creation-Date: 2015-06-30 20:57+0100\n"
-"PO-Revision-Date: 2014-07-02 17:20+0300\n"
+"POT-Creation-Date: 2015-10-11 18:59+0100\n"
+"PO-Revision-Date: 2015-11-06 09:23+0300\n"
"Last-Translator: Eugene Sandulenko <sev@scummvm.org>\n"
"Language-Team: Russian\n"
"Language: Russian\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=iso-8859-5\n"
"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n"
-"%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
"X-Generator: Poedit 1.5.5\n"
#: gui/about.cpp:94
@@ -32,7 +31,7 @@ msgstr "Включённые в билд опции:"
msgid "Available engines:"
msgstr "Доступные движки:"
-#: gui/browser.cpp:68
+#: gui/browser.cpp:68 gui/browser_osx.mm:104
msgid "Show hidden files"
msgstr "Показать скрытые файлы"
@@ -53,13 +52,14 @@ msgctxt "lowres"
msgid "Go up"
msgstr "Вверх"
-#: gui/browser.cpp:75 gui/chooser.cpp:46 gui/KeysDialog.cpp:43
-#: gui/launcher.cpp:351 gui/massadd.cpp:95 gui/options.cpp:1239
-#: gui/recorderdialog.cpp:70 gui/recorderdialog.cpp:156
-#: gui/saveload-dialog.cpp:216 gui/saveload-dialog.cpp:276
-#: gui/saveload-dialog.cpp:547 gui/saveload-dialog.cpp:931
-#: gui/themebrowser.cpp:55 gui/fluidsynth-dialog.cpp:152
-#: engines/engine.cpp:483 backends/platform/wii/options.cpp:48
+#: gui/browser.cpp:75 gui/chooser.cpp:46 gui/editrecorddialog.cpp:67
+#: gui/KeysDialog.cpp:43 gui/launcher.cpp:351 gui/massadd.cpp:95
+#: gui/options.cpp:1237 gui/predictivedialog.cpp:74 gui/recorderdialog.cpp:70
+#: gui/recorderdialog.cpp:156 gui/saveload-dialog.cpp:216
+#: gui/saveload-dialog.cpp:276 gui/saveload-dialog.cpp:547
+#: gui/saveload-dialog.cpp:931 gui/themebrowser.cpp:55
+#: gui/fluidsynth-dialog.cpp:152 engines/engine.cpp:483
+#: backends/platform/wii/options.cpp:48
#: backends/events/default/default-events.cpp:196
#: backends/events/default/default-events.cpp:218
#: engines/drascula/saveload.cpp:49 engines/parallaction/saveload.cpp:274
@@ -67,10 +67,27 @@ msgstr "Вверх"
msgid "Cancel"
msgstr "Отмена"
-#: gui/browser.cpp:76 gui/chooser.cpp:47 gui/themebrowser.cpp:56
+#: gui/browser.cpp:76 gui/browser_osx.mm:103 gui/chooser.cpp:47
+#: gui/themebrowser.cpp:56
msgid "Choose"
msgstr "Выбрать"
+#: gui/editrecorddialog.cpp:58
+msgid "Author:"
+msgstr "Автор:"
+
+#: gui/editrecorddialog.cpp:59 gui/launcher.cpp:204
+msgid "Name:"
+msgstr "Название:"
+
+#: gui/editrecorddialog.cpp:60
+msgid "Notes:"
+msgstr "Заметки:"
+
+#: gui/editrecorddialog.cpp:68 gui/predictivedialog.cpp:75
+msgid "Ok"
+msgstr "Ok"
+
#: gui/gui-manager.cpp:117 backends/keymapper/remap-dialog.cpp:53
#: engines/scumm/help.cpp:126 engines/scumm/help.cpp:141
#: engines/scumm/help.cpp:166 engines/scumm/help.cpp:192
@@ -103,7 +120,7 @@ msgid "Map"
msgstr "Назначить"
#: gui/KeysDialog.cpp:42 gui/launcher.cpp:352 gui/launcher.cpp:1048
-#: gui/launcher.cpp:1052 gui/massadd.cpp:92 gui/options.cpp:1240
+#: gui/launcher.cpp:1052 gui/massadd.cpp:92 gui/options.cpp:1238
#: gui/saveload-dialog.cpp:932 gui/fluidsynth-dialog.cpp:153
#: engines/engine.cpp:402 engines/engine.cpp:413
#: backends/platform/wii/options.cpp:47
@@ -165,10 +182,6 @@ msgctxt "lowres"
msgid "ID:"
msgstr "ID:"
-#: gui/launcher.cpp:204
-msgid "Name:"
-msgstr "Название:"
-
#: gui/launcher.cpp:204 gui/launcher.cpp:206 gui/launcher.cpp:207
msgid "Full title of the game"
msgstr "Полное название игры"
@@ -190,7 +203,7 @@ msgstr ""
"Язык игры. Изменение этой настройки не превратит игру на английском в русскую"
#: gui/launcher.cpp:212 gui/launcher.cpp:226 gui/options.cpp:87
-#: gui/options.cpp:737 gui/options.cpp:750 gui/options.cpp:1210
+#: gui/options.cpp:735 gui/options.cpp:748 gui/options.cpp:1208
#: audio/null.cpp:41
msgid "<default>"
msgstr "<по умолчанию>"
@@ -212,11 +225,11 @@ msgstr "Платформа:"
msgid "Engine"
msgstr "Движок"
-#: gui/launcher.cpp:245 gui/options.cpp:1073 gui/options.cpp:1090
+#: gui/launcher.cpp:245 gui/options.cpp:1071 gui/options.cpp:1088
msgid "Graphics"
msgstr "Графика"
-#: gui/launcher.cpp:245 gui/options.cpp:1073 gui/options.cpp:1090
+#: gui/launcher.cpp:245 gui/options.cpp:1071 gui/options.cpp:1088
msgid "GFX"
msgstr "Грф"
@@ -229,7 +242,7 @@ msgctxt "lowres"
msgid "Override global graphic settings"
msgstr "Перекрыть глобальные установки графики"
-#: gui/launcher.cpp:257 gui/options.cpp:1096
+#: gui/launcher.cpp:257 gui/options.cpp:1094
msgid "Audio"
msgstr "Аудио"
@@ -242,11 +255,11 @@ msgctxt "lowres"
msgid "Override global audio settings"
msgstr "Перекрыть глобальные установки аудио"
-#: gui/launcher.cpp:271 gui/options.cpp:1101
+#: gui/launcher.cpp:271 gui/options.cpp:1099
msgid "Volume"
msgstr "Громкость"
-#: gui/launcher.cpp:273 gui/options.cpp:1103
+#: gui/launcher.cpp:273 gui/options.cpp:1101
msgctxt "lowres"
msgid "Volume"
msgstr "Громк"
@@ -260,7 +273,7 @@ msgctxt "lowres"
msgid "Override global volume settings"
msgstr "Перекрыть глобальные установки громкости"
-#: gui/launcher.cpp:286 gui/options.cpp:1111
+#: gui/launcher.cpp:286 gui/options.cpp:1109
msgid "MIDI"
msgstr "MIDI"
@@ -273,7 +286,7 @@ msgctxt "lowres"
msgid "Override global MIDI settings"
msgstr "Перекрыть глобальные установки MIDI"
-#: gui/launcher.cpp:300 gui/options.cpp:1117
+#: gui/launcher.cpp:300 gui/options.cpp:1115
msgid "MT-32"
msgstr "MT-32"
@@ -286,11 +299,11 @@ msgctxt "lowres"
msgid "Override global MT-32 settings"
msgstr "Перекрыть глобальные установки MT-32"
-#: gui/launcher.cpp:314 gui/options.cpp:1124
+#: gui/launcher.cpp:314 gui/options.cpp:1122
msgid "Paths"
msgstr "Пути"
-#: gui/launcher.cpp:316 gui/options.cpp:1126
+#: gui/launcher.cpp:316 gui/options.cpp:1124
msgctxt "lowres"
msgid "Paths"
msgstr "Пути"
@@ -304,7 +317,7 @@ msgctxt "lowres"
msgid "Game Path:"
msgstr "Где игра:"
-#: gui/launcher.cpp:330 gui/options.cpp:1150
+#: gui/launcher.cpp:330 gui/options.cpp:1148
msgid "Extra Path:"
msgstr "Доп. путь:"
@@ -312,42 +325,42 @@ msgstr "Доп. путь:"
msgid "Specifies path to additional data used by the game"
msgstr "Указывает путь к дополнительным файлам данных для игры"
-#: gui/launcher.cpp:332 gui/options.cpp:1152
+#: gui/launcher.cpp:332 gui/options.cpp:1150
msgctxt "lowres"
msgid "Extra Path:"
msgstr "Доп. путь:"
-#: gui/launcher.cpp:339 gui/options.cpp:1134
+#: gui/launcher.cpp:339 gui/options.cpp:1132
msgid "Save Path:"
msgstr "Сохранения игр:"
#: gui/launcher.cpp:339 gui/launcher.cpp:341 gui/launcher.cpp:342
-#: gui/options.cpp:1134 gui/options.cpp:1136 gui/options.cpp:1137
+#: gui/options.cpp:1132 gui/options.cpp:1134 gui/options.cpp:1135
msgid "Specifies where your saved games are put"
msgstr "Указывает путь к сохранениям игры"
-#: gui/launcher.cpp:341 gui/options.cpp:1136
+#: gui/launcher.cpp:341 gui/options.cpp:1134
msgctxt "lowres"
msgid "Save Path:"
msgstr "Путь сохр:"
#: gui/launcher.cpp:360 gui/launcher.cpp:459 gui/launcher.cpp:517
-#: gui/launcher.cpp:571 gui/options.cpp:1145 gui/options.cpp:1153
-#: gui/options.cpp:1162 gui/options.cpp:1277 gui/options.cpp:1283
-#: gui/options.cpp:1291 gui/options.cpp:1321 gui/options.cpp:1327
-#: gui/options.cpp:1334 gui/options.cpp:1427 gui/options.cpp:1430
-#: gui/options.cpp:1442
+#: gui/launcher.cpp:571 gui/options.cpp:1143 gui/options.cpp:1151
+#: gui/options.cpp:1160 gui/options.cpp:1275 gui/options.cpp:1281
+#: gui/options.cpp:1289 gui/options.cpp:1319 gui/options.cpp:1325
+#: gui/options.cpp:1332 gui/options.cpp:1425 gui/options.cpp:1428
+#: gui/options.cpp:1440
msgctxt "path"
msgid "None"
msgstr "Не задан"
#: gui/launcher.cpp:365 gui/launcher.cpp:465 gui/launcher.cpp:575
-#: gui/options.cpp:1271 gui/options.cpp:1315 gui/options.cpp:1433
+#: gui/options.cpp:1269 gui/options.cpp:1313 gui/options.cpp:1431
#: backends/platform/wii/options.cpp:56
msgid "Default"
msgstr "По умолчанию"
-#: gui/launcher.cpp:510 gui/options.cpp:1436
+#: gui/launcher.cpp:510 gui/options.cpp:1434
msgid "Select SoundFont"
msgstr "Выберите SoundFont"
@@ -359,7 +372,7 @@ msgstr "Выберите директорию с файлами игры"
msgid "Select additional game directory"
msgstr "Выберите дополнительную директорию игры"
-#: gui/launcher.cpp:559 gui/options.cpp:1379
+#: gui/launcher.cpp:559 gui/options.cpp:1377
msgid "Select directory for saved games"
msgstr "Выберите директорию для сохранений"
@@ -531,7 +544,7 @@ msgstr "Много игр..."
#: gui/launcher.cpp:1161
msgid "Record..."
-msgstr ""
+msgstr "Запись..."
#: gui/massadd.cpp:79 gui/massadd.cpp:82
msgid "... progress ..."
@@ -556,6 +569,22 @@ msgstr "Просмотрено %d директорий ..."
msgid "Discovered %d new games, ignored %d previously added games ..."
msgstr "Найдено %d новых игр, пропущено %d ранее добавленных игр ..."
+#: gui/onscreendialog.cpp:101 gui/onscreendialog.cpp:103
+msgid "Stop"
+msgstr "Стоп"
+
+#: gui/onscreendialog.cpp:106
+msgid "Edit record description"
+msgstr "Редактировать описание записи"
+
+#: gui/onscreendialog.cpp:108
+msgid "Switch to Game"
+msgstr "Переключиться в игру"
+
+#: gui/onscreendialog.cpp:110
+msgid "Fast replay"
+msgstr "Быстрое воспроизведение"
+
#: gui/options.cpp:85
msgid "Never"
msgstr "Никогда"
@@ -596,8 +625,8 @@ msgstr "44 кГц"
msgid "48 kHz"
msgstr "48 кГц"
-#: gui/options.cpp:255 gui/options.cpp:481 gui/options.cpp:582
-#: gui/options.cpp:651 gui/options.cpp:859
+#: gui/options.cpp:255 gui/options.cpp:479 gui/options.cpp:580
+#: gui/options.cpp:649 gui/options.cpp:857
msgctxt "soundfont"
msgid "None"
msgstr "Не задан"
@@ -618,71 +647,71 @@ msgstr "полноэкранный режим не может быть изменён"
msgid "the aspect ratio setting could not be changed"
msgstr "режим корректировки соотношения сторон не может быть изменён"
-#: gui/options.cpp:734
+#: gui/options.cpp:732
msgid "Graphics mode:"
msgstr "Граф. режим:"
-#: gui/options.cpp:748
+#: gui/options.cpp:746
msgid "Render mode:"
msgstr "Режим растра:"
-#: gui/options.cpp:748 gui/options.cpp:749
+#: gui/options.cpp:746 gui/options.cpp:747
msgid "Special dithering modes supported by some games"
msgstr "Специальные режимы рендеринга, поддерживаемые некоторыми играми"
-#: gui/options.cpp:760
+#: gui/options.cpp:758
#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2298
msgid "Fullscreen mode"
msgstr "Полноэкранный режим"
-#: gui/options.cpp:763
+#: gui/options.cpp:761
msgid "Aspect ratio correction"
msgstr "Коррекция соотношения сторон"
-#: gui/options.cpp:763
+#: gui/options.cpp:761
msgid "Correct aspect ratio for 320x200 games"
msgstr "Корректировать соотношение сторон для игр с разрешением 320x200"
-#: gui/options.cpp:771
+#: gui/options.cpp:769
msgid "Preferred Device:"
msgstr "Предпочитаемое:"
-#: gui/options.cpp:771
+#: gui/options.cpp:769
msgid "Music Device:"
msgstr "Звуковое уст-во:"
-#: gui/options.cpp:771 gui/options.cpp:773
+#: gui/options.cpp:769 gui/options.cpp:771
msgid "Specifies preferred sound device or sound card emulator"
msgstr ""
"Указывает предпочитаемое звуковое устройство или эмулятор звуковой карты"
-#: gui/options.cpp:771 gui/options.cpp:773 gui/options.cpp:774
+#: gui/options.cpp:769 gui/options.cpp:771 gui/options.cpp:772
msgid "Specifies output sound device or sound card emulator"
msgstr "Указывает выходное звуковое устройство или эмулятор звуковой карты"
-#: gui/options.cpp:773
+#: gui/options.cpp:771
msgctxt "lowres"
msgid "Preferred Dev.:"
msgstr "Предпочитаемое:"
-#: gui/options.cpp:773
+#: gui/options.cpp:771
msgctxt "lowres"
msgid "Music Device:"
msgstr "Звуковое уст-во:"
-#: gui/options.cpp:800
+#: gui/options.cpp:798
msgid "AdLib emulator:"
msgstr "Эмулятор AdLib:"
-#: gui/options.cpp:800 gui/options.cpp:801
+#: gui/options.cpp:798 gui/options.cpp:799
msgid "AdLib is used for music in many games"
msgstr "Звуковая карта AdLib используется многими играми"
-#: gui/options.cpp:811
+#: gui/options.cpp:809
msgid "Output rate:"
msgstr "Частота звука:"
-#: gui/options.cpp:811 gui/options.cpp:812
+#: gui/options.cpp:809 gui/options.cpp:810
msgid ""
"Higher value specifies better sound quality but may be not supported by your "
"soundcard"
@@ -690,68 +719,68 @@ msgstr ""
"БОльшие значения задают лучшее качество звука, однако они могут не "
"поддерживаться вашей звуковой картой"
-#: gui/options.cpp:822
+#: gui/options.cpp:820
msgid "GM Device:"
msgstr "Устройство GM:"
-#: gui/options.cpp:822
+#: gui/options.cpp:820
msgid "Specifies default sound device for General MIDI output"
msgstr "Указывает выходное звуковое устройство для MIDI"
-#: gui/options.cpp:833
+#: gui/options.cpp:831
msgid "Don't use General MIDI music"
msgstr "Не использовать музыку для General MIDI"
-#: gui/options.cpp:844 gui/options.cpp:910
+#: gui/options.cpp:842 gui/options.cpp:908
msgid "Use first available device"
msgstr "Использовать первое доступное устройство"
-#: gui/options.cpp:856
+#: gui/options.cpp:854
msgid "SoundFont:"
msgstr "SoundFont:"
-#: gui/options.cpp:856 gui/options.cpp:858 gui/options.cpp:859
+#: gui/options.cpp:854 gui/options.cpp:856 gui/options.cpp:857
msgid "SoundFont is supported by some audio cards, FluidSynth and Timidity"
msgstr ""
"SoundFont'ы поддерживаются некоторыми звуковыми картами, FluidSynth и "
"Timidity"
-#: gui/options.cpp:858
+#: gui/options.cpp:856
msgctxt "lowres"
msgid "SoundFont:"
msgstr "SoundFont:"
-#: gui/options.cpp:864
+#: gui/options.cpp:862
msgid "Mixed AdLib/MIDI mode"
msgstr "Смешанный режим AdLib/MIDI"
-#: gui/options.cpp:864
+#: gui/options.cpp:862
msgid "Use both MIDI and AdLib sound generation"
msgstr "Использовать и MIDI, и AdLib для генерации звука"
-#: gui/options.cpp:867
+#: gui/options.cpp:865
msgid "MIDI gain:"
msgstr "Усиление MIDI:"
-#: gui/options.cpp:874
+#: gui/options.cpp:872
msgid "FluidSynth Settings"
msgstr "Настройки FluidSynth"
-#: gui/options.cpp:881
+#: gui/options.cpp:879
msgid "MT-32 Device:"
msgstr "Устр. MT-32:"
-#: gui/options.cpp:881
+#: gui/options.cpp:879
msgid "Specifies default sound device for Roland MT-32/LAPC1/CM32l/CM64 output"
msgstr ""
"Указывает звуковое устройство по умолчанию для вывода на Roland MT-32/LAPC1/"
"CM32l/CM64"
-#: gui/options.cpp:886
+#: gui/options.cpp:884
msgid "True Roland MT-32 (disable GM emulation)"
msgstr "Настоящий Roland MT-32 (запретить эмуляцию GM)"
-#: gui/options.cpp:886 gui/options.cpp:888
+#: gui/options.cpp:884 gui/options.cpp:886
msgid ""
"Check if you want to use your real hardware Roland-compatible sound device "
"connected to your computer"
@@ -759,16 +788,16 @@ msgstr ""
"Отметьте, если у вас подключено Roland-совместимое звуковое устройство и вы "
"хотите его использовать"
-#: gui/options.cpp:888
+#: gui/options.cpp:886
msgctxt "lowres"
msgid "True Roland MT-32 (no GM emulation)"
msgstr "Настоящий Roland MT-32 (без эмуляции GM)"
-#: gui/options.cpp:891
+#: gui/options.cpp:889
msgid "Roland GS Device (enable MT-32 mappings)"
msgstr "Устройство Roland GS (разрешить маппинг MT-32)"
-#: gui/options.cpp:891
+#: gui/options.cpp:889
msgid ""
"Check if you want to enable patch mappings to emulate an MT-32 on a Roland "
"GS device"
@@ -776,175 +805,175 @@ msgstr ""
"Отметьте, если хотите разрешить маппинг для эмуляции MT-32 на устройстве "
"Roland GS"
-#: gui/options.cpp:900
+#: gui/options.cpp:898
msgid "Don't use Roland MT-32 music"
msgstr "Не использовать музыку для MT-32"
-#: gui/options.cpp:927
+#: gui/options.cpp:925
msgid "Text and Speech:"
msgstr "Текст и озвучка:"
-#: gui/options.cpp:931 gui/options.cpp:941
+#: gui/options.cpp:929 gui/options.cpp:939
msgid "Speech"
msgstr "Озвучка"
-#: gui/options.cpp:932 gui/options.cpp:942
+#: gui/options.cpp:930 gui/options.cpp:940
msgid "Subtitles"
msgstr "Субтитры"
-#: gui/options.cpp:933
+#: gui/options.cpp:931
msgid "Both"
msgstr "Оба"
-#: gui/options.cpp:935
+#: gui/options.cpp:933
msgid "Subtitle speed:"
msgstr "Скорость титров:"
-#: gui/options.cpp:937
+#: gui/options.cpp:935
msgctxt "lowres"
msgid "Text and Speech:"
msgstr "Текст и озвучка:"
-#: gui/options.cpp:941
+#: gui/options.cpp:939
msgid "Spch"
msgstr "Озв"
-#: gui/options.cpp:942
+#: gui/options.cpp:940
msgid "Subs"
msgstr "Суб"
-#: gui/options.cpp:943
+#: gui/options.cpp:941
msgctxt "lowres"
msgid "Both"
msgstr "Оба"
-#: gui/options.cpp:943
+#: gui/options.cpp:941
msgid "Show subtitles and play speech"
msgstr "Показывать субтитры и воспроизводить речь"
-#: gui/options.cpp:945
+#: gui/options.cpp:943
msgctxt "lowres"
msgid "Subtitle speed:"
msgstr "Скорость титров:"
-#: gui/options.cpp:961
+#: gui/options.cpp:959
msgid "Music volume:"
msgstr "Громк. музыки:"
-#: gui/options.cpp:963
+#: gui/options.cpp:961
msgctxt "lowres"
msgid "Music volume:"
msgstr "Громк. музыки:"
-#: gui/options.cpp:970
+#: gui/options.cpp:968
msgid "Mute All"
msgstr "Выкл. всё"
-#: gui/options.cpp:973
+#: gui/options.cpp:971
msgid "SFX volume:"
msgstr "Громкость SFX:"
-#: gui/options.cpp:973 gui/options.cpp:975 gui/options.cpp:976
+#: gui/options.cpp:971 gui/options.cpp:973 gui/options.cpp:974
msgid "Special sound effects volume"
msgstr "Громкость специальных звуковых эффектов"
-#: gui/options.cpp:975
+#: gui/options.cpp:973
msgctxt "lowres"
msgid "SFX volume:"
msgstr "Громк. SFX:"
-#: gui/options.cpp:983
+#: gui/options.cpp:981
msgid "Speech volume:"
msgstr "Громк. озвучки:"
-#: gui/options.cpp:985
+#: gui/options.cpp:983
msgctxt "lowres"
msgid "Speech volume:"
msgstr "Громк. озвучки:"
-#: gui/options.cpp:1142
+#: gui/options.cpp:1140
msgid "Theme Path:"
msgstr "Путь к темам:"
-#: gui/options.cpp:1144
+#: gui/options.cpp:1142
msgctxt "lowres"
msgid "Theme Path:"
msgstr "Где темы:"
-#: gui/options.cpp:1150 gui/options.cpp:1152 gui/options.cpp:1153
+#: gui/options.cpp:1148 gui/options.cpp:1150 gui/options.cpp:1151
msgid "Specifies path to additional data used by all games or ScummVM"
msgstr ""
"Указывает путь к дополнительным файлам данных, используемых всеми играми, "
"либо ScummVM"
-#: gui/options.cpp:1159
+#: gui/options.cpp:1157
msgid "Plugins Path:"
msgstr "Путь к плагинам:"
-#: gui/options.cpp:1161
+#: gui/options.cpp:1159
msgctxt "lowres"
msgid "Plugins Path:"
msgstr "Путь к плагинам:"
-#: gui/options.cpp:1170 gui/fluidsynth-dialog.cpp:138
+#: gui/options.cpp:1168 gui/fluidsynth-dialog.cpp:138
msgid "Misc"
msgstr "Разное"
-#: gui/options.cpp:1172
+#: gui/options.cpp:1170
msgctxt "lowres"
msgid "Misc"
msgstr "Разное"
-#: gui/options.cpp:1174
+#: gui/options.cpp:1172
msgid "Theme:"
msgstr "Тема:"
-#: gui/options.cpp:1178
+#: gui/options.cpp:1176
msgid "GUI Renderer:"
msgstr "Рисовалка GUI:"
-#: gui/options.cpp:1190
+#: gui/options.cpp:1188
msgid "Autosave:"
msgstr "Автосохранение:"
-#: gui/options.cpp:1192
+#: gui/options.cpp:1190
msgctxt "lowres"
msgid "Autosave:"
msgstr "Автосохр.:"
-#: gui/options.cpp:1200
+#: gui/options.cpp:1198
msgid "Keys"
msgstr "Клавиши"
-#: gui/options.cpp:1207
+#: gui/options.cpp:1205
msgid "GUI Language:"
msgstr "Язык GUI:"
-#: gui/options.cpp:1207
+#: gui/options.cpp:1205
msgid "Language of ScummVM GUI"
msgstr "Язык графического интерфейса ScummVM"
-#: gui/options.cpp:1366
+#: gui/options.cpp:1364
msgid "You have to restart ScummVM before your changes will take effect."
msgstr "Вы должны перезапустить ScummVM, чтобы применить изменения."
-#: gui/options.cpp:1386
+#: gui/options.cpp:1384
msgid "The chosen directory cannot be written to. Please select another one."
msgstr "Не могу писать в выбранную директорию. Пожалуйста, укажите другую."
-#: gui/options.cpp:1395
+#: gui/options.cpp:1393
msgid "Select directory for GUI themes"
msgstr "Выберите директорию для тем GUI"
-#: gui/options.cpp:1405
+#: gui/options.cpp:1403
msgid "Select directory for extra files"
msgstr "Выберите директорию с дополнительными файлами"
-#: gui/options.cpp:1416
+#: gui/options.cpp:1414
msgid "Select directory for plugins"
msgstr "Выберите директорию с плагинами"
-#: gui/options.cpp:1469
+#: gui/options.cpp:1467
msgid ""
"The theme you selected does not support your current language. If you want "
"to use this theme you need to switch to another language first."
@@ -952,9 +981,31 @@ msgstr ""
"Тема, выбранная вами, не поддерживает текущий язык. Если вы хотите "
"использовать эту тему, вам необходимо сначала переключиться на другой язык."
+#. I18N: You must leave "#" as is, only word 'next' is translatable
+#: gui/predictivedialog.cpp:87
+msgid "# next"
+msgstr "# след"
+
+#: gui/predictivedialog.cpp:88
+msgid "add"
+msgstr "доб"
+
+#: gui/predictivedialog.cpp:92
+msgid "Delete char"
+msgstr "Удалить символ"
+
+#: gui/predictivedialog.cpp:96
+msgid "<"
+msgstr "<"
+
+#. I18N: Pre means 'Predictive', leave '*' as is
+#: gui/predictivedialog.cpp:98
+msgid "* Pre"
+msgstr "* Pre"
+
#: gui/recorderdialog.cpp:64
msgid "Recorder or Playback Gameplay"
-msgstr ""
+msgstr "Воспроизвести или записать игровой процесс"
#: gui/recorderdialog.cpp:69 gui/recorderdialog.cpp:156
#: gui/saveload-dialog.cpp:220 gui/saveload-dialog.cpp:276
@@ -963,31 +1014,33 @@ msgstr "Удалить"
#: gui/recorderdialog.cpp:71
msgid "Record"
-msgstr ""
+msgstr "Записать"
#: gui/recorderdialog.cpp:72
-#, fuzzy
msgid "Playback"
-msgstr "Играть"
+msgstr "Воспроизвести"
#: gui/recorderdialog.cpp:74
msgid "Edit"
-msgstr ""
+msgstr "Редактировать"
#: gui/recorderdialog.cpp:86 gui/recorderdialog.cpp:243
#: gui/recorderdialog.cpp:253
msgid "Author: "
-msgstr ""
+msgstr "Автор: "
#: gui/recorderdialog.cpp:87 gui/recorderdialog.cpp:244
#: gui/recorderdialog.cpp:254
msgid "Notes: "
-msgstr ""
+msgstr "Заметки: "
#: gui/recorderdialog.cpp:155
-#, fuzzy
msgid "Do you really want to delete this record?"
-msgstr "Вы действительно хотите удалить это сохранение?"
+msgstr "Вы действительно хотите удалить эту запись?"
+
+#: gui/recorderdialog.cpp:174
+msgid "Unknown Author"
+msgstr "Неизвестный автор"
#: gui/saveload-dialog.cpp:167
msgid "List view"
@@ -1441,14 +1494,18 @@ msgstr ""
msgid "Start anyway"
msgstr "Всё равно запустить"
-#: audio/fmopl.cpp:50
+#: audio/fmopl.cpp:62
msgid "MAME OPL emulator"
msgstr "Эмулятор MAME OPL"
-#: audio/fmopl.cpp:52
+#: audio/fmopl.cpp:64
msgid "DOSBox OPL emulator"
msgstr "Эмулятор DOSBox OPL"
+#: audio/fmopl.cpp:67
+msgid "ALSA Direct FM"
+msgstr "Прямой FM ALSA"
+
#: audio/mididrv.cpp:209
#, c-format
msgid ""
@@ -1498,7 +1555,7 @@ msgstr "Без музыки"
msgid "Amiga Audio Emulator"
msgstr "Эмулятор звука Amiga"
-#: audio/softsynth/adlib.cpp:2285
+#: audio/adlib.cpp:2291
msgid "AdLib Emulator"
msgstr "Эмулятор AdLib"
@@ -2128,39 +2185,38 @@ msgstr "Щелчки выключены"
#: engines/agi/detection.cpp:147 engines/drascula/detection.cpp:302
#: engines/dreamweb/detection.cpp:47 engines/neverhood/detection.cpp:160
#: engines/sci/detection.cpp:394 engines/toltecs/detection.cpp:200
-#: engines/zvision/detection.cpp:246
+#: engines/zvision/detection_tables.h:51
msgid "Use original save/load screens"
msgstr "Использовать оригинальные экраны записи/чтения игры"
#: engines/agi/detection.cpp:148 engines/drascula/detection.cpp:303
#: engines/dreamweb/detection.cpp:48 engines/neverhood/detection.cpp:161
#: engines/sci/detection.cpp:395 engines/toltecs/detection.cpp:201
-#: engines/zvision/detection.cpp:247
msgid "Use the original save/load screens, instead of the ScummVM ones"
msgstr ""
"Использовать оригинальные экраны записи и сохранения игры вместо сделанных в "
"ScummVM"
#: engines/agi/detection.cpp:157
-#, fuzzy
msgid "Use an alternative palette"
-msgstr "Использовать альтернативное вступление (только для CD версии игры)"
+msgstr "Использовать альтернативную палитру"
#: engines/agi/detection.cpp:158
msgid ""
"Use an alternative palette, common for all Amiga games. This was the old "
"behavior"
msgstr ""
+"Использовать альтернативную палитру для всех игр Amiga. Это было старое поведение"
#: engines/agi/detection.cpp:167
-#, fuzzy
msgid "Mouse support"
-msgstr "Поддержка пропусков"
+msgstr "Поддержка мыши"
#: engines/agi/detection.cpp:168
msgid ""
"Enables mouse support. Allows to use mouse for movement and in game menus."
msgstr ""
+"Включает поддержку мыши. Позволяет использовать мышь для перемещения и в меню игры."
#: engines/agi/saveload.cpp:816 engines/drascula/saveload.cpp:349
#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:886
@@ -2213,13 +2269,12 @@ msgid "Cutscene file '%s' not found!"
msgstr "Файл заставки '%s' не найден!"
#: engines/cge/detection.cpp:105 engines/cge2/detection.cpp:101
-#, fuzzy
msgid "Color Blind Mode"
-msgstr "Режим щелчка"
+msgstr "Режим без цвета"
#: engines/cge/detection.cpp:106 engines/cge2/detection.cpp:102
msgid "Enable Color Blind Mode by default"
-msgstr ""
+msgstr "Включить режим для людей со слабым восприятием цвета"
#: engines/drascula/saveload.cpp:47
msgid ""
@@ -2275,11 +2330,11 @@ msgstr "Не удалось сохранить игру"
#: engines/hopkins/detection.cpp:76 engines/hopkins/detection.cpp:86
msgid "Gore Mode"
-msgstr ""
+msgstr "Режим с кровью"
#: engines/hopkins/detection.cpp:77 engines/hopkins/detection.cpp:87
msgid "Enable Gore Mode when available"
-msgstr ""
+msgstr "Включает режим с изображением крови, если доступно"
#. I18N: Studio audience adds an applause and cheering sounds whenever
#. Malcolm makes a joke.
@@ -2412,6 +2467,12 @@ msgid ""
"Do you wish to use this save game file with ScummVM?\n"
"\n"
msgstr ""
+"Нижеследующий файл сохранения из оригинальной игры был найден в вашей игровой директории:\n"
+"\n"
+"%s %s\n"
+"\n"
+"Не желаете ли использовать это сохранение в ScummVM?\n"
+"\n"
#: engines/kyra/saveload_eob.cpp:590
#, c-format
@@ -2419,6 +2480,8 @@ msgid ""
"A save game file was found in the specified slot %d. Overwrite?\n"
"\n"
msgstr ""
+"В указанном слоте %d уже есть сохранение игры. Перезаписать?\n"
+"\n"
#: engines/kyra/saveload_eob.cpp:623
#, c-format
@@ -2430,6 +2493,10 @@ msgid ""
"'import_savefile'.\n"
"\n"
msgstr ""
+"%d оригинальных файлов сохранения были успешно импортированы в ScummVM.\n"
+"Если вы захотите импортировать оригинпльные сохранения, вам нужно будет\n"
+"открыть отладочную консоль ScummVM и ввести команду 'import_savefile'.\n"
+"\n"
#. I18N: Option for fast scene switching
#: engines/mohawk/dialogs.cpp:92 engines/mohawk/dialogs.cpp:167
@@ -2568,11 +2635,11 @@ msgstr "Использовать альтернативное вступление (только для CD версии игры)"
#: engines/sci/detection.cpp:374
msgid "Skip EGA dithering pass (full color backgrounds)"
-msgstr ""
+msgstr "Не делать аппроксимацию цветов EGA (полноцветные фоны)"
#: engines/sci/detection.cpp:375
msgid "Skip dithering pass in EGA games, graphics are shown with full colors"
-msgstr ""
+msgstr "Пропускает проход аппроксимации цветов EGA, графика будет показана со всеми цветами"
#: engines/sci/detection.cpp:384
msgid "Prefer digital sound effects"
@@ -2649,15 +2716,13 @@ msgstr "Игра остановлена. Нажмите пробел, чтобы продолжить."
#. "Moechten Sie wirklich neu starten? (J/N)J"
#. Will react to J as 'Yes'
#: engines/scumm/dialogs.cpp:183
-#, fuzzy
msgid "Are you sure you want to restart? (Y/N)Y"
-msgstr "Вы уверены, что хотите начать снова? (Y/N)"
+msgstr "Вы уверены, что хотите начать снова? (Y/N)Y"
#. I18N: you may specify 'Yes' symbol at the end of the line. See previous comment
#: engines/scumm/dialogs.cpp:185
-#, fuzzy
msgid "Are you sure you want to quit? (Y/N)Y"
-msgstr "Вы уверены, что хотите выйти? (Y/N)"
+msgstr "Вы уверены, что хотите выйти? (Y/N)Y"
#: engines/scumm/dialogs.cpp:190
msgid "Play"
@@ -3165,25 +3230,24 @@ msgid "Third kid"
msgstr "Третий герой"
#: engines/scumm/help.cpp:292
-#, fuzzy
msgid "Toggle Inventory/IQ Points display"
-msgstr "Включить показ данных в центре экрана"
+msgstr "Переключить показ инвентаря/очков IQ"
#: engines/scumm/help.cpp:293
msgid "Toggle Keyboard/Mouse Fighting (*)"
-msgstr ""
+msgstr "Переключить управление боями Клввиатурой/Мышью (*)"
#: engines/scumm/help.cpp:295
msgid "* Keyboard Fighting is always on,"
-msgstr ""
+msgstr "* Управление клавиатурой всегда включено,"
#: engines/scumm/help.cpp:296
msgid " so despite the in-game message this"
-msgstr ""
+msgstr " твк что несмотря на сообщение игры,"
#: engines/scumm/help.cpp:297
msgid " actually toggles Mouse Fighting Off/On"
-msgstr ""
+msgstr " на самом деле это вкл/выкл управление мышью"
#: engines/scumm/help.cpp:304
msgid "Fighting controls (numpad):"
@@ -3220,7 +3284,7 @@ msgstr "Удар снизу"
#: engines/scumm/help.cpp:315
msgid "Sucker punch"
-msgstr ""
+msgstr "Удар сзади"
#: engines/scumm/help.cpp:318
msgid "These are for Indy on left."
@@ -3278,6 +3342,22 @@ msgstr "Лететь вправо"
msgid "Fly to lower right"
msgstr "Лететь вправо-вниз"
+#: engines/scumm/input.cpp:572
+msgid "Snap scroll on"
+msgstr "Прокрутка скачками включена"
+
+#: engines/scumm/input.cpp:574
+msgid "Snap scroll off"
+msgstr "Прокрутка скачками выкл"
+
+#: engines/scumm/input.cpp:587
+msgid "Music volume: "
+msgstr "Громк. музыки: "
+
+#: engines/scumm/input.cpp:604
+msgid "Subtitle speed: "
+msgstr "Скорость титров: "
+
#: engines/scumm/scumm.cpp:1832
#, c-format
msgid ""
@@ -3288,27 +3368,30 @@ msgstr ""
"LucasArts, но не хватает %s. Переключаюсь на AdLib."
#: engines/scumm/scumm.cpp:2644
-#, fuzzy
msgid ""
"Usually, Maniac Mansion would start now. But for that to work, the game "
"files for Maniac Mansion have to be in the 'Maniac' directory inside the "
"Tentacle game directory, and the game has to be added to ScummVM."
msgstr ""
-"Сейчас должна запуститься игра Maniac Mansion. Но ScummVM пока этого не "
-"умеет. Чтобы сыграть, нажмите 'Новая игра' в стартовом меню ScummVM, а затем "
-"выберите директорию Maniac внутри директории с игрой Tentacle."
+"Сейчас должна запуститься игра Maniac Mansion. Но чтобы это работало, файлы "
+"игры Maniac Mansion должны быть скопированы в директорию 'Maniac' внутри "
+"директории игры Tentacle, и сама игра должна быть добавлена в ScummVM."
#: engines/scumm/players/player_v3m.cpp:129
msgid ""
"Could not find the 'Loom' Macintosh executable to read the\n"
"instruments from. Music will be disabled."
msgstr ""
+"Не удалось найти исполнимый файл 'Loom' Macintosh, чтобы прочитать\n"
+"данные об инструментах. Музыка будет выключена."
#: engines/scumm/players/player_v5m.cpp:107
msgid ""
"Could not find the 'Monkey Island' Macintosh executable to read the\n"
"instruments from. Music will be disabled."
msgstr ""
+"Не удалось найти исполнимый файл 'Monkey Island' Macintosh, чтобы прочитать\n"
+"данные об инструментах. Музыка будет выключена."
#: engines/sky/compact.cpp:130
msgid ""
@@ -3424,47 +3507,50 @@ msgstr ""
#: engines/wintermute/detection.cpp:58
msgid "Show FPS-counter"
-msgstr ""
+msgstr "Показать счётчик кадров в секунду"
#: engines/wintermute/detection.cpp:59
msgid "Show the current number of frames per second in the upper left corner"
+msgstr "Показать в верхнем левом углу текущее количество кадров в секунду"
+
+#: engines/zvision/detection_tables.h:52
+msgid "Use the original save/load screens instead of the ScummVM interface"
msgstr ""
+"Использовать оригинальные экраны записи и сохранения игры вместо сделанных в "
+"ScummVM"
-#: engines/zvision/detection.cpp:256
+#: engines/zvision/detection_tables.h:61
msgid "Double FPS"
-msgstr ""
+msgstr "Двойноq FPS"
-#: engines/zvision/detection.cpp:257
-msgid "Increase game FPS from 30 to 60"
-msgstr ""
+#: engines/zvision/detection_tables.h:62
+msgid "Increase framerate from 30 to 60 FPS"
+msgstr "Увеличить частоту кадров с 30 до 60 Гц"
-#: engines/zvision/detection.cpp:266
-#, fuzzy
+#: engines/zvision/detection_tables.h:71
msgid "Enable Venus"
-msgstr "Включить режим гелия"
+msgstr "Включить Venus"
-#: engines/zvision/detection.cpp:267
+#: engines/zvision/detection_tables.h:72
msgid "Enable the Venus help system"
-msgstr ""
+msgstr "Включить систему помощи Venus"
-#: engines/zvision/detection.cpp:276
+#: engines/zvision/detection_tables.h:81
msgid "Disable animation while turning"
-msgstr ""
+msgstr "Выключить анимацию во время поворотов"
-#: engines/zvision/detection.cpp:277
-msgid "Disable animation while turning in panoramic mode"
-msgstr ""
+#: engines/zvision/detection_tables.h:82
+msgid "Disable animation while turning in panorama mode"
+msgstr "Выключить анимацию во время поворотов в режиме панормаы"
-#: engines/zvision/detection.cpp:286
-msgid "Use the hires MPEG movies"
-msgstr ""
+#: engines/zvision/detection_tables.h:91
+msgid "Use high resolution MPEG video"
+msgstr "Использовать видео MPEG высокого разрешения"
-#: engines/zvision/detection.cpp:287
-#, fuzzy
-msgid ""
-"Use the hires MPEG movies of the DVD version, instead of the lowres AVI ones"
+#: engines/zvision/detection_tables.h:92
+msgid "Use MPEG video from the DVD version, instead of lower resolution AVI"
msgstr ""
-"Использовать альтернативный набор серебряных курсоров вместо обычных золотых"
+"Использовать MPEG видео из DVD версии, вместо видео низкого разрешения в формате AVI"
#~ msgid "EGA undithering"
#~ msgstr "EGA без растра"
diff --git a/po/scummvm.pot b/po/scummvm.pot
index 49689e914b..1d6b4028bc 100644
--- a/po/scummvm.pot
+++ b/po/scummvm.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ScummVM 1.8.0git\n"
"Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n"
-"POT-Creation-Date: 2015-06-30 20:57+0100\n"
+"POT-Creation-Date: 2015-10-11 18:59+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"
@@ -30,7 +30,7 @@ msgstr ""
msgid "Available engines:"
msgstr ""
-#: gui/browser.cpp:68
+#: gui/browser.cpp:68 gui/browser_osx.mm:104
msgid "Show hidden files"
msgstr ""
@@ -51,13 +51,14 @@ msgctxt "lowres"
msgid "Go up"
msgstr ""
-#: gui/browser.cpp:75 gui/chooser.cpp:46 gui/KeysDialog.cpp:43
-#: gui/launcher.cpp:351 gui/massadd.cpp:95 gui/options.cpp:1239
-#: gui/recorderdialog.cpp:70 gui/recorderdialog.cpp:156
-#: gui/saveload-dialog.cpp:216 gui/saveload-dialog.cpp:276
-#: gui/saveload-dialog.cpp:547 gui/saveload-dialog.cpp:931
-#: gui/themebrowser.cpp:55 gui/fluidsynth-dialog.cpp:152
-#: engines/engine.cpp:483 backends/platform/wii/options.cpp:48
+#: gui/browser.cpp:75 gui/chooser.cpp:46 gui/editrecorddialog.cpp:67
+#: gui/KeysDialog.cpp:43 gui/launcher.cpp:351 gui/massadd.cpp:95
+#: gui/options.cpp:1237 gui/predictivedialog.cpp:74 gui/recorderdialog.cpp:70
+#: gui/recorderdialog.cpp:156 gui/saveload-dialog.cpp:216
+#: gui/saveload-dialog.cpp:276 gui/saveload-dialog.cpp:547
+#: gui/saveload-dialog.cpp:931 gui/themebrowser.cpp:55
+#: gui/fluidsynth-dialog.cpp:152 engines/engine.cpp:483
+#: backends/platform/wii/options.cpp:48
#: backends/events/default/default-events.cpp:196
#: backends/events/default/default-events.cpp:218
#: engines/drascula/saveload.cpp:49 engines/parallaction/saveload.cpp:274
@@ -65,10 +66,27 @@ msgstr ""
msgid "Cancel"
msgstr ""
-#: gui/browser.cpp:76 gui/chooser.cpp:47 gui/themebrowser.cpp:56
+#: gui/browser.cpp:76 gui/browser_osx.mm:103 gui/chooser.cpp:47
+#: gui/themebrowser.cpp:56
msgid "Choose"
msgstr ""
+#: gui/editrecorddialog.cpp:58
+msgid "Author:"
+msgstr ""
+
+#: gui/editrecorddialog.cpp:59 gui/launcher.cpp:204
+msgid "Name:"
+msgstr ""
+
+#: gui/editrecorddialog.cpp:60
+msgid "Notes:"
+msgstr ""
+
+#: gui/editrecorddialog.cpp:68 gui/predictivedialog.cpp:75
+msgid "Ok"
+msgstr ""
+
#: gui/gui-manager.cpp:117 backends/keymapper/remap-dialog.cpp:53
#: engines/scumm/help.cpp:126 engines/scumm/help.cpp:141
#: engines/scumm/help.cpp:166 engines/scumm/help.cpp:192
@@ -101,7 +119,7 @@ msgid "Map"
msgstr ""
#: gui/KeysDialog.cpp:42 gui/launcher.cpp:352 gui/launcher.cpp:1048
-#: gui/launcher.cpp:1052 gui/massadd.cpp:92 gui/options.cpp:1240
+#: gui/launcher.cpp:1052 gui/massadd.cpp:92 gui/options.cpp:1238
#: gui/saveload-dialog.cpp:932 gui/fluidsynth-dialog.cpp:153
#: engines/engine.cpp:402 engines/engine.cpp:413
#: backends/platform/wii/options.cpp:47
@@ -161,10 +179,6 @@ msgctxt "lowres"
msgid "ID:"
msgstr ""
-#: gui/launcher.cpp:204
-msgid "Name:"
-msgstr ""
-
#: gui/launcher.cpp:204 gui/launcher.cpp:206 gui/launcher.cpp:207
msgid "Full title of the game"
msgstr ""
@@ -185,7 +199,7 @@ msgid ""
msgstr ""
#: gui/launcher.cpp:212 gui/launcher.cpp:226 gui/options.cpp:87
-#: gui/options.cpp:737 gui/options.cpp:750 gui/options.cpp:1210
+#: gui/options.cpp:735 gui/options.cpp:748 gui/options.cpp:1208
#: audio/null.cpp:41
msgid "<default>"
msgstr ""
@@ -207,11 +221,11 @@ msgstr ""
msgid "Engine"
msgstr ""
-#: gui/launcher.cpp:245 gui/options.cpp:1073 gui/options.cpp:1090
+#: gui/launcher.cpp:245 gui/options.cpp:1071 gui/options.cpp:1088
msgid "Graphics"
msgstr ""
-#: gui/launcher.cpp:245 gui/options.cpp:1073 gui/options.cpp:1090
+#: gui/launcher.cpp:245 gui/options.cpp:1071 gui/options.cpp:1088
msgid "GFX"
msgstr ""
@@ -224,7 +238,7 @@ msgctxt "lowres"
msgid "Override global graphic settings"
msgstr ""
-#: gui/launcher.cpp:257 gui/options.cpp:1096
+#: gui/launcher.cpp:257 gui/options.cpp:1094
msgid "Audio"
msgstr ""
@@ -237,11 +251,11 @@ msgctxt "lowres"
msgid "Override global audio settings"
msgstr ""
-#: gui/launcher.cpp:271 gui/options.cpp:1101
+#: gui/launcher.cpp:271 gui/options.cpp:1099
msgid "Volume"
msgstr ""
-#: gui/launcher.cpp:273 gui/options.cpp:1103
+#: gui/launcher.cpp:273 gui/options.cpp:1101
msgctxt "lowres"
msgid "Volume"
msgstr ""
@@ -255,7 +269,7 @@ msgctxt "lowres"
msgid "Override global volume settings"
msgstr ""
-#: gui/launcher.cpp:286 gui/options.cpp:1111
+#: gui/launcher.cpp:286 gui/options.cpp:1109
msgid "MIDI"
msgstr ""
@@ -268,7 +282,7 @@ msgctxt "lowres"
msgid "Override global MIDI settings"
msgstr ""
-#: gui/launcher.cpp:300 gui/options.cpp:1117
+#: gui/launcher.cpp:300 gui/options.cpp:1115
msgid "MT-32"
msgstr ""
@@ -281,11 +295,11 @@ msgctxt "lowres"
msgid "Override global MT-32 settings"
msgstr ""
-#: gui/launcher.cpp:314 gui/options.cpp:1124
+#: gui/launcher.cpp:314 gui/options.cpp:1122
msgid "Paths"
msgstr ""
-#: gui/launcher.cpp:316 gui/options.cpp:1126
+#: gui/launcher.cpp:316 gui/options.cpp:1124
msgctxt "lowres"
msgid "Paths"
msgstr ""
@@ -299,7 +313,7 @@ msgctxt "lowres"
msgid "Game Path:"
msgstr ""
-#: gui/launcher.cpp:330 gui/options.cpp:1150
+#: gui/launcher.cpp:330 gui/options.cpp:1148
msgid "Extra Path:"
msgstr ""
@@ -307,42 +321,42 @@ msgstr ""
msgid "Specifies path to additional data used by the game"
msgstr ""
-#: gui/launcher.cpp:332 gui/options.cpp:1152
+#: gui/launcher.cpp:332 gui/options.cpp:1150
msgctxt "lowres"
msgid "Extra Path:"
msgstr ""
-#: gui/launcher.cpp:339 gui/options.cpp:1134
+#: gui/launcher.cpp:339 gui/options.cpp:1132
msgid "Save Path:"
msgstr ""
#: gui/launcher.cpp:339 gui/launcher.cpp:341 gui/launcher.cpp:342
-#: gui/options.cpp:1134 gui/options.cpp:1136 gui/options.cpp:1137
+#: gui/options.cpp:1132 gui/options.cpp:1134 gui/options.cpp:1135
msgid "Specifies where your saved games are put"
msgstr ""
-#: gui/launcher.cpp:341 gui/options.cpp:1136
+#: gui/launcher.cpp:341 gui/options.cpp:1134
msgctxt "lowres"
msgid "Save Path:"
msgstr ""
#: gui/launcher.cpp:360 gui/launcher.cpp:459 gui/launcher.cpp:517
-#: gui/launcher.cpp:571 gui/options.cpp:1145 gui/options.cpp:1153
-#: gui/options.cpp:1162 gui/options.cpp:1277 gui/options.cpp:1283
-#: gui/options.cpp:1291 gui/options.cpp:1321 gui/options.cpp:1327
-#: gui/options.cpp:1334 gui/options.cpp:1427 gui/options.cpp:1430
-#: gui/options.cpp:1442
+#: gui/launcher.cpp:571 gui/options.cpp:1143 gui/options.cpp:1151
+#: gui/options.cpp:1160 gui/options.cpp:1275 gui/options.cpp:1281
+#: gui/options.cpp:1289 gui/options.cpp:1319 gui/options.cpp:1325
+#: gui/options.cpp:1332 gui/options.cpp:1425 gui/options.cpp:1428
+#: gui/options.cpp:1440
msgctxt "path"
msgid "None"
msgstr ""
#: gui/launcher.cpp:365 gui/launcher.cpp:465 gui/launcher.cpp:575
-#: gui/options.cpp:1271 gui/options.cpp:1315 gui/options.cpp:1433
+#: gui/options.cpp:1269 gui/options.cpp:1313 gui/options.cpp:1431
#: backends/platform/wii/options.cpp:56
msgid "Default"
msgstr ""
-#: gui/launcher.cpp:510 gui/options.cpp:1436
+#: gui/launcher.cpp:510 gui/options.cpp:1434
msgid "Select SoundFont"
msgstr ""
@@ -354,7 +368,7 @@ msgstr ""
msgid "Select additional game directory"
msgstr ""
-#: gui/launcher.cpp:559 gui/options.cpp:1379
+#: gui/launcher.cpp:559 gui/options.cpp:1377
msgid "Select directory for saved games"
msgstr ""
@@ -549,6 +563,22 @@ msgstr ""
msgid "Discovered %d new games, ignored %d previously added games ..."
msgstr ""
+#: gui/onscreendialog.cpp:101 gui/onscreendialog.cpp:103
+msgid "Stop"
+msgstr ""
+
+#: gui/onscreendialog.cpp:106
+msgid "Edit record description"
+msgstr ""
+
+#: gui/onscreendialog.cpp:108
+msgid "Switch to Game"
+msgstr ""
+
+#: gui/onscreendialog.cpp:110
+msgid "Fast replay"
+msgstr ""
+
#: gui/options.cpp:85
msgid "Never"
msgstr ""
@@ -589,8 +619,8 @@ msgstr ""
msgid "48 kHz"
msgstr ""
-#: gui/options.cpp:255 gui/options.cpp:481 gui/options.cpp:582
-#: gui/options.cpp:651 gui/options.cpp:859
+#: gui/options.cpp:255 gui/options.cpp:479 gui/options.cpp:580
+#: gui/options.cpp:649 gui/options.cpp:857
msgctxt "soundfont"
msgid "None"
msgstr ""
@@ -611,325 +641,347 @@ msgstr ""
msgid "the aspect ratio setting could not be changed"
msgstr ""
-#: gui/options.cpp:734
+#: gui/options.cpp:732
msgid "Graphics mode:"
msgstr ""
-#: gui/options.cpp:748
+#: gui/options.cpp:746
msgid "Render mode:"
msgstr ""
-#: gui/options.cpp:748 gui/options.cpp:749
+#: gui/options.cpp:746 gui/options.cpp:747
msgid "Special dithering modes supported by some games"
msgstr ""
-#: gui/options.cpp:760
+#: gui/options.cpp:758
#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2298
msgid "Fullscreen mode"
msgstr ""
-#: gui/options.cpp:763
+#: gui/options.cpp:761
msgid "Aspect ratio correction"
msgstr ""
-#: gui/options.cpp:763
+#: gui/options.cpp:761
msgid "Correct aspect ratio for 320x200 games"
msgstr ""
-#: gui/options.cpp:771
+#: gui/options.cpp:769
msgid "Preferred Device:"
msgstr ""
-#: gui/options.cpp:771
+#: gui/options.cpp:769
msgid "Music Device:"
msgstr ""
-#: gui/options.cpp:771 gui/options.cpp:773
+#: gui/options.cpp:769 gui/options.cpp:771
msgid "Specifies preferred sound device or sound card emulator"
msgstr ""
-#: gui/options.cpp:771 gui/options.cpp:773 gui/options.cpp:774
+#: gui/options.cpp:769 gui/options.cpp:771 gui/options.cpp:772
msgid "Specifies output sound device or sound card emulator"
msgstr ""
-#: gui/options.cpp:773
+#: gui/options.cpp:771
msgctxt "lowres"
msgid "Preferred Dev.:"
msgstr ""
-#: gui/options.cpp:773
+#: gui/options.cpp:771
msgctxt "lowres"
msgid "Music Device:"
msgstr ""
-#: gui/options.cpp:800
+#: gui/options.cpp:798
msgid "AdLib emulator:"
msgstr ""
-#: gui/options.cpp:800 gui/options.cpp:801
+#: gui/options.cpp:798 gui/options.cpp:799
msgid "AdLib is used for music in many games"
msgstr ""
-#: gui/options.cpp:811
+#: gui/options.cpp:809
msgid "Output rate:"
msgstr ""
-#: gui/options.cpp:811 gui/options.cpp:812
+#: gui/options.cpp:809 gui/options.cpp:810
msgid ""
"Higher value specifies better sound quality but may be not supported by your "
"soundcard"
msgstr ""
-#: gui/options.cpp:822
+#: gui/options.cpp:820
msgid "GM Device:"
msgstr ""
-#: gui/options.cpp:822
+#: gui/options.cpp:820
msgid "Specifies default sound device for General MIDI output"
msgstr ""
-#: gui/options.cpp:833
+#: gui/options.cpp:831
msgid "Don't use General MIDI music"
msgstr ""
-#: gui/options.cpp:844 gui/options.cpp:910
+#: gui/options.cpp:842 gui/options.cpp:908
msgid "Use first available device"
msgstr ""
-#: gui/options.cpp:856
+#: gui/options.cpp:854
msgid "SoundFont:"
msgstr ""
-#: gui/options.cpp:856 gui/options.cpp:858 gui/options.cpp:859
+#: gui/options.cpp:854 gui/options.cpp:856 gui/options.cpp:857
msgid "SoundFont is supported by some audio cards, FluidSynth and Timidity"
msgstr ""
-#: gui/options.cpp:858
+#: gui/options.cpp:856
msgctxt "lowres"
msgid "SoundFont:"
msgstr ""
-#: gui/options.cpp:864
+#: gui/options.cpp:862
msgid "Mixed AdLib/MIDI mode"
msgstr ""
-#: gui/options.cpp:864
+#: gui/options.cpp:862
msgid "Use both MIDI and AdLib sound generation"
msgstr ""
-#: gui/options.cpp:867
+#: gui/options.cpp:865
msgid "MIDI gain:"
msgstr ""
-#: gui/options.cpp:874
+#: gui/options.cpp:872
msgid "FluidSynth Settings"
msgstr ""
-#: gui/options.cpp:881
+#: gui/options.cpp:879
msgid "MT-32 Device:"
msgstr ""
-#: gui/options.cpp:881
+#: gui/options.cpp:879
msgid "Specifies default sound device for Roland MT-32/LAPC1/CM32l/CM64 output"
msgstr ""
-#: gui/options.cpp:886
+#: gui/options.cpp:884
msgid "True Roland MT-32 (disable GM emulation)"
msgstr ""
-#: gui/options.cpp:886 gui/options.cpp:888
+#: gui/options.cpp:884 gui/options.cpp:886
msgid ""
"Check if you want to use your real hardware Roland-compatible sound device "
"connected to your computer"
msgstr ""
-#: gui/options.cpp:888
+#: gui/options.cpp:886
msgctxt "lowres"
msgid "True Roland MT-32 (no GM emulation)"
msgstr ""
-#: gui/options.cpp:891
+#: gui/options.cpp:889
msgid "Roland GS Device (enable MT-32 mappings)"
msgstr ""
-#: gui/options.cpp:891
+#: gui/options.cpp:889
msgid ""
"Check if you want to enable patch mappings to emulate an MT-32 on a Roland "
"GS device"
msgstr ""
-#: gui/options.cpp:900
+#: gui/options.cpp:898
msgid "Don't use Roland MT-32 music"
msgstr ""
-#: gui/options.cpp:927
+#: gui/options.cpp:925
msgid "Text and Speech:"
msgstr ""
-#: gui/options.cpp:931 gui/options.cpp:941
+#: gui/options.cpp:929 gui/options.cpp:939
msgid "Speech"
msgstr ""
-#: gui/options.cpp:932 gui/options.cpp:942
+#: gui/options.cpp:930 gui/options.cpp:940
msgid "Subtitles"
msgstr ""
-#: gui/options.cpp:933
+#: gui/options.cpp:931
msgid "Both"
msgstr ""
-#: gui/options.cpp:935
+#: gui/options.cpp:933
msgid "Subtitle speed:"
msgstr ""
-#: gui/options.cpp:937
+#: gui/options.cpp:935
msgctxt "lowres"
msgid "Text and Speech:"
msgstr ""
-#: gui/options.cpp:941
+#: gui/options.cpp:939
msgid "Spch"
msgstr ""
-#: gui/options.cpp:942
+#: gui/options.cpp:940
msgid "Subs"
msgstr ""
-#: gui/options.cpp:943
+#: gui/options.cpp:941
msgctxt "lowres"
msgid "Both"
msgstr ""
-#: gui/options.cpp:943
+#: gui/options.cpp:941
msgid "Show subtitles and play speech"
msgstr ""
-#: gui/options.cpp:945
+#: gui/options.cpp:943
msgctxt "lowres"
msgid "Subtitle speed:"
msgstr ""
-#: gui/options.cpp:961
+#: gui/options.cpp:959
msgid "Music volume:"
msgstr ""
-#: gui/options.cpp:963
+#: gui/options.cpp:961
msgctxt "lowres"
msgid "Music volume:"
msgstr ""
-#: gui/options.cpp:970
+#: gui/options.cpp:968
msgid "Mute All"
msgstr ""
-#: gui/options.cpp:973
+#: gui/options.cpp:971
msgid "SFX volume:"
msgstr ""
-#: gui/options.cpp:973 gui/options.cpp:975 gui/options.cpp:976
+#: gui/options.cpp:971 gui/options.cpp:973 gui/options.cpp:974
msgid "Special sound effects volume"
msgstr ""
-#: gui/options.cpp:975
+#: gui/options.cpp:973
msgctxt "lowres"
msgid "SFX volume:"
msgstr ""
-#: gui/options.cpp:983
+#: gui/options.cpp:981
msgid "Speech volume:"
msgstr ""
-#: gui/options.cpp:985
+#: gui/options.cpp:983
msgctxt "lowres"
msgid "Speech volume:"
msgstr ""
-#: gui/options.cpp:1142
+#: gui/options.cpp:1140
msgid "Theme Path:"
msgstr ""
-#: gui/options.cpp:1144
+#: gui/options.cpp:1142
msgctxt "lowres"
msgid "Theme Path:"
msgstr ""
-#: gui/options.cpp:1150 gui/options.cpp:1152 gui/options.cpp:1153
+#: gui/options.cpp:1148 gui/options.cpp:1150 gui/options.cpp:1151
msgid "Specifies path to additional data used by all games or ScummVM"
msgstr ""
-#: gui/options.cpp:1159
+#: gui/options.cpp:1157
msgid "Plugins Path:"
msgstr ""
-#: gui/options.cpp:1161
+#: gui/options.cpp:1159
msgctxt "lowres"
msgid "Plugins Path:"
msgstr ""
-#: gui/options.cpp:1170 gui/fluidsynth-dialog.cpp:138
+#: gui/options.cpp:1168 gui/fluidsynth-dialog.cpp:138
msgid "Misc"
msgstr ""
-#: gui/options.cpp:1172
+#: gui/options.cpp:1170
msgctxt "lowres"
msgid "Misc"
msgstr ""
-#: gui/options.cpp:1174
+#: gui/options.cpp:1172
msgid "Theme:"
msgstr ""
-#: gui/options.cpp:1178
+#: gui/options.cpp:1176
msgid "GUI Renderer:"
msgstr ""
-#: gui/options.cpp:1190
+#: gui/options.cpp:1188
msgid "Autosave:"
msgstr ""
-#: gui/options.cpp:1192
+#: gui/options.cpp:1190
msgctxt "lowres"
msgid "Autosave:"
msgstr ""
-#: gui/options.cpp:1200
+#: gui/options.cpp:1198
msgid "Keys"
msgstr ""
-#: gui/options.cpp:1207
+#: gui/options.cpp:1205
msgid "GUI Language:"
msgstr ""
-#: gui/options.cpp:1207
+#: gui/options.cpp:1205
msgid "Language of ScummVM GUI"
msgstr ""
-#: gui/options.cpp:1366
+#: gui/options.cpp:1364
msgid "You have to restart ScummVM before your changes will take effect."
msgstr ""
-#: gui/options.cpp:1386
+#: gui/options.cpp:1384
msgid "The chosen directory cannot be written to. Please select another one."
msgstr ""
-#: gui/options.cpp:1395
+#: gui/options.cpp:1393
msgid "Select directory for GUI themes"
msgstr ""
-#: gui/options.cpp:1405
+#: gui/options.cpp:1403
msgid "Select directory for extra files"
msgstr ""
-#: gui/options.cpp:1416
+#: gui/options.cpp:1414
msgid "Select directory for plugins"
msgstr ""
-#: gui/options.cpp:1469
+#: gui/options.cpp:1467
msgid ""
"The theme you selected does not support your current language. If you want "
"to use this theme you need to switch to another language first."
msgstr ""
+#. I18N: You must leave "#" as is, only word 'next' is translatable
+#: gui/predictivedialog.cpp:87
+msgid "# next"
+msgstr ""
+
+#: gui/predictivedialog.cpp:88
+msgid "add"
+msgstr ""
+
+#: gui/predictivedialog.cpp:92
+msgid "Delete char"
+msgstr ""
+
+#: gui/predictivedialog.cpp:96
+msgid "<"
+msgstr ""
+
+#. I18N: Pre means 'Predictive', leave '*' as is
+#: gui/predictivedialog.cpp:98
+msgid "* Pre"
+msgstr ""
+
#: gui/recorderdialog.cpp:64
msgid "Recorder or Playback Gameplay"
msgstr ""
@@ -965,6 +1017,10 @@ msgstr ""
msgid "Do you really want to delete this record?"
msgstr ""
+#: gui/recorderdialog.cpp:174
+msgid "Unknown Author"
+msgstr ""
+
#: gui/saveload-dialog.cpp:167
msgid "List view"
msgstr ""
@@ -1391,14 +1447,18 @@ msgstr ""
msgid "Start anyway"
msgstr ""
-#: audio/fmopl.cpp:50
+#: audio/fmopl.cpp:62
msgid "MAME OPL emulator"
msgstr ""
-#: audio/fmopl.cpp:52
+#: audio/fmopl.cpp:64
msgid "DOSBox OPL emulator"
msgstr ""
+#: audio/fmopl.cpp:67
+msgid "ALSA Direct FM"
+msgstr ""
+
#: audio/mididrv.cpp:209
#, c-format
msgid ""
@@ -1440,7 +1500,7 @@ msgstr ""
msgid "Amiga Audio Emulator"
msgstr ""
-#: audio/softsynth/adlib.cpp:2285
+#: audio/adlib.cpp:2291
msgid "AdLib Emulator"
msgstr ""
@@ -2068,14 +2128,13 @@ msgstr ""
#: engines/agi/detection.cpp:147 engines/drascula/detection.cpp:302
#: engines/dreamweb/detection.cpp:47 engines/neverhood/detection.cpp:160
#: engines/sci/detection.cpp:394 engines/toltecs/detection.cpp:200
-#: engines/zvision/detection.cpp:246
+#: engines/zvision/detection_tables.h:51
msgid "Use original save/load screens"
msgstr ""
#: engines/agi/detection.cpp:148 engines/drascula/detection.cpp:303
#: engines/dreamweb/detection.cpp:48 engines/neverhood/detection.cpp:161
#: engines/sci/detection.cpp:395 engines/toltecs/detection.cpp:201
-#: engines/zvision/detection.cpp:247
msgid "Use the original save/load screens, instead of the ScummVM ones"
msgstr ""
@@ -3168,6 +3227,22 @@ msgstr ""
msgid "Fly to lower right"
msgstr ""
+#: engines/scumm/input.cpp:572
+msgid "Snap scroll on"
+msgstr ""
+
+#: engines/scumm/input.cpp:574
+msgid "Snap scroll off"
+msgstr ""
+
+#: engines/scumm/input.cpp:587
+msgid "Music volume: "
+msgstr ""
+
+#: engines/scumm/input.cpp:604
+msgid "Subtitle speed: "
+msgstr ""
+
#: engines/scumm/scumm.cpp:1832
#, c-format
msgid ""
@@ -3295,35 +3370,38 @@ msgstr ""
msgid "Show the current number of frames per second in the upper left corner"
msgstr ""
-#: engines/zvision/detection.cpp:256
+#: engines/zvision/detection_tables.h:52
+msgid "Use the original save/load screens instead of the ScummVM interface"
+msgstr ""
+
+#: engines/zvision/detection_tables.h:61
msgid "Double FPS"
msgstr ""
-#: engines/zvision/detection.cpp:257
-msgid "Increase game FPS from 30 to 60"
+#: engines/zvision/detection_tables.h:62
+msgid "Increase framerate from 30 to 60 FPS"
msgstr ""
-#: engines/zvision/detection.cpp:266
+#: engines/zvision/detection_tables.h:71
msgid "Enable Venus"
msgstr ""
-#: engines/zvision/detection.cpp:267
+#: engines/zvision/detection_tables.h:72
msgid "Enable the Venus help system"
msgstr ""
-#: engines/zvision/detection.cpp:276
+#: engines/zvision/detection_tables.h:81
msgid "Disable animation while turning"
msgstr ""
-#: engines/zvision/detection.cpp:277
-msgid "Disable animation while turning in panoramic mode"
+#: engines/zvision/detection_tables.h:82
+msgid "Disable animation while turning in panorama mode"
msgstr ""
-#: engines/zvision/detection.cpp:286
-msgid "Use the hires MPEG movies"
+#: engines/zvision/detection_tables.h:91
+msgid "Use high resolution MPEG video"
msgstr ""
-#: engines/zvision/detection.cpp:287
-msgid ""
-"Use the hires MPEG movies of the DVD version, instead of the lowres AVI ones"
+#: engines/zvision/detection_tables.h:92
+msgid "Use MPEG video from the DVD version, instead of lower resolution AVI"
msgstr ""
diff --git a/po/se_SE.po b/po/se_SE.po
index d49cf3606a..814a5b1e86 100644
--- a/po/se_SE.po
+++ b/po/se_SE.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ScummVM 1.5.0svn\n"
"Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n"
-"POT-Creation-Date: 2015-06-30 20:57+0100\n"
+"POT-Creation-Date: 2015-10-11 18:59+0100\n"
"PO-Revision-Date: 2014-07-02 16:30+0100\n"
"Last-Translator: Hampus Flink <hampus.flink@gmail.com>\n"
"Language-Team: \n"
@@ -32,7 +32,7 @@ msgstr "Funktioner kompilerade i:"
msgid "Available engines:"
msgstr "Tillgфngliga motorer"
-#: gui/browser.cpp:68
+#: gui/browser.cpp:68 gui/browser_osx.mm:104
msgid "Show hidden files"
msgstr "Visa gіmda filer"
@@ -53,13 +53,14 @@ msgctxt "lowres"
msgid "Go up"
msgstr "Uppхt"
-#: gui/browser.cpp:75 gui/chooser.cpp:46 gui/KeysDialog.cpp:43
-#: gui/launcher.cpp:351 gui/massadd.cpp:95 gui/options.cpp:1239
-#: gui/recorderdialog.cpp:70 gui/recorderdialog.cpp:156
-#: gui/saveload-dialog.cpp:216 gui/saveload-dialog.cpp:276
-#: gui/saveload-dialog.cpp:547 gui/saveload-dialog.cpp:931
-#: gui/themebrowser.cpp:55 gui/fluidsynth-dialog.cpp:152
-#: engines/engine.cpp:483 backends/platform/wii/options.cpp:48
+#: gui/browser.cpp:75 gui/chooser.cpp:46 gui/editrecorddialog.cpp:67
+#: gui/KeysDialog.cpp:43 gui/launcher.cpp:351 gui/massadd.cpp:95
+#: gui/options.cpp:1237 gui/predictivedialog.cpp:74 gui/recorderdialog.cpp:70
+#: gui/recorderdialog.cpp:156 gui/saveload-dialog.cpp:216
+#: gui/saveload-dialog.cpp:276 gui/saveload-dialog.cpp:547
+#: gui/saveload-dialog.cpp:931 gui/themebrowser.cpp:55
+#: gui/fluidsynth-dialog.cpp:152 engines/engine.cpp:483
+#: backends/platform/wii/options.cpp:48
#: backends/events/default/default-events.cpp:196
#: backends/events/default/default-events.cpp:218
#: engines/drascula/saveload.cpp:49 engines/parallaction/saveload.cpp:274
@@ -67,10 +68,27 @@ msgstr "Uppхt"
msgid "Cancel"
msgstr "Avbryt"
-#: gui/browser.cpp:76 gui/chooser.cpp:47 gui/themebrowser.cpp:56
+#: gui/browser.cpp:76 gui/browser_osx.mm:103 gui/chooser.cpp:47
+#: gui/themebrowser.cpp:56
msgid "Choose"
msgstr "Vфlj"
+#: gui/editrecorddialog.cpp:58
+msgid "Author:"
+msgstr ""
+
+#: gui/editrecorddialog.cpp:59 gui/launcher.cpp:204
+msgid "Name:"
+msgstr "Namn:"
+
+#: gui/editrecorddialog.cpp:60
+msgid "Notes:"
+msgstr ""
+
+#: gui/editrecorddialog.cpp:68 gui/predictivedialog.cpp:75
+msgid "Ok"
+msgstr ""
+
#: gui/gui-manager.cpp:117 backends/keymapper/remap-dialog.cpp:53
#: engines/scumm/help.cpp:126 engines/scumm/help.cpp:141
#: engines/scumm/help.cpp:166 engines/scumm/help.cpp:192
@@ -103,7 +121,7 @@ msgid "Map"
msgstr "Stфll in"
#: gui/KeysDialog.cpp:42 gui/launcher.cpp:352 gui/launcher.cpp:1048
-#: gui/launcher.cpp:1052 gui/massadd.cpp:92 gui/options.cpp:1240
+#: gui/launcher.cpp:1052 gui/massadd.cpp:92 gui/options.cpp:1238
#: gui/saveload-dialog.cpp:932 gui/fluidsynth-dialog.cpp:153
#: engines/engine.cpp:402 engines/engine.cpp:413
#: backends/platform/wii/options.cpp:47
@@ -165,10 +183,6 @@ msgctxt "lowres"
msgid "ID:"
msgstr "ID:"
-#: gui/launcher.cpp:204
-msgid "Name:"
-msgstr "Namn:"
-
#: gui/launcher.cpp:204 gui/launcher.cpp:206 gui/launcher.cpp:207
msgid "Full title of the game"
msgstr "Spelets fullstфndiga titel"
@@ -191,7 +205,7 @@ msgstr ""
"till en engelsk"
#: gui/launcher.cpp:212 gui/launcher.cpp:226 gui/options.cpp:87
-#: gui/options.cpp:737 gui/options.cpp:750 gui/options.cpp:1210
+#: gui/options.cpp:735 gui/options.cpp:748 gui/options.cpp:1208
#: audio/null.cpp:41
msgid "<default>"
msgstr "<standard>"
@@ -213,11 +227,11 @@ msgstr "Plattform:"
msgid "Engine"
msgstr "Motor"
-#: gui/launcher.cpp:245 gui/options.cpp:1073 gui/options.cpp:1090
+#: gui/launcher.cpp:245 gui/options.cpp:1071 gui/options.cpp:1088
msgid "Graphics"
msgstr "Grafik"
-#: gui/launcher.cpp:245 gui/options.cpp:1073 gui/options.cpp:1090
+#: gui/launcher.cpp:245 gui/options.cpp:1071 gui/options.cpp:1088
msgid "GFX"
msgstr "GFX"
@@ -230,7 +244,7 @@ msgctxt "lowres"
msgid "Override global graphic settings"
msgstr "жverskrid globala grafikinstфllningar"
-#: gui/launcher.cpp:257 gui/options.cpp:1096
+#: gui/launcher.cpp:257 gui/options.cpp:1094
msgid "Audio"
msgstr "Ljud"
@@ -243,11 +257,11 @@ msgctxt "lowres"
msgid "Override global audio settings"
msgstr "жverskrid globala ljudinstфllningar"
-#: gui/launcher.cpp:271 gui/options.cpp:1101
+#: gui/launcher.cpp:271 gui/options.cpp:1099
msgid "Volume"
msgstr "Volym"
-#: gui/launcher.cpp:273 gui/options.cpp:1103
+#: gui/launcher.cpp:273 gui/options.cpp:1101
msgctxt "lowres"
msgid "Volume"
msgstr "Volym"
@@ -261,7 +275,7 @@ msgctxt "lowres"
msgid "Override global volume settings"
msgstr "жverskrid globala volyminstфllningar"
-#: gui/launcher.cpp:286 gui/options.cpp:1111
+#: gui/launcher.cpp:286 gui/options.cpp:1109
msgid "MIDI"
msgstr "MIDI"
@@ -274,7 +288,7 @@ msgctxt "lowres"
msgid "Override global MIDI settings"
msgstr "жverskrid globala MIDI-instфllningar"
-#: gui/launcher.cpp:300 gui/options.cpp:1117
+#: gui/launcher.cpp:300 gui/options.cpp:1115
msgid "MT-32"
msgstr "MT-32"
@@ -287,11 +301,11 @@ msgctxt "lowres"
msgid "Override global MT-32 settings"
msgstr "жverskrid globala MT-32 instфllningar"
-#: gui/launcher.cpp:314 gui/options.cpp:1124
+#: gui/launcher.cpp:314 gui/options.cpp:1122
msgid "Paths"
msgstr "Sіkvфgar"
-#: gui/launcher.cpp:316 gui/options.cpp:1126
+#: gui/launcher.cpp:316 gui/options.cpp:1124
msgctxt "lowres"
msgid "Paths"
msgstr "Sіkvфgar"
@@ -305,7 +319,7 @@ msgctxt "lowres"
msgid "Game Path:"
msgstr "Sіkv. spel:"
-#: gui/launcher.cpp:330 gui/options.cpp:1150
+#: gui/launcher.cpp:330 gui/options.cpp:1148
msgid "Extra Path:"
msgstr "Sіkv. extra:"
@@ -313,42 +327,42 @@ msgstr "Sіkv. extra:"
msgid "Specifies path to additional data used by the game"
msgstr "Bestфmmer sіkvфgen till ytterligare data som spelet anvфnder"
-#: gui/launcher.cpp:332 gui/options.cpp:1152
+#: gui/launcher.cpp:332 gui/options.cpp:1150
msgctxt "lowres"
msgid "Extra Path:"
msgstr "Sіkv. extra:"
-#: gui/launcher.cpp:339 gui/options.cpp:1134
+#: gui/launcher.cpp:339 gui/options.cpp:1132
msgid "Save Path:"
msgstr "Sіkv. sparat:"
#: gui/launcher.cpp:339 gui/launcher.cpp:341 gui/launcher.cpp:342
-#: gui/options.cpp:1134 gui/options.cpp:1136 gui/options.cpp:1137
+#: gui/options.cpp:1132 gui/options.cpp:1134 gui/options.cpp:1135
msgid "Specifies where your saved games are put"
msgstr "Bestфmmer var dina spardata lagras"
-#: gui/launcher.cpp:341 gui/options.cpp:1136
+#: gui/launcher.cpp:341 gui/options.cpp:1134
msgctxt "lowres"
msgid "Save Path:"
msgstr "Sіkv. sparat:"
#: gui/launcher.cpp:360 gui/launcher.cpp:459 gui/launcher.cpp:517
-#: gui/launcher.cpp:571 gui/options.cpp:1145 gui/options.cpp:1153
-#: gui/options.cpp:1162 gui/options.cpp:1277 gui/options.cpp:1283
-#: gui/options.cpp:1291 gui/options.cpp:1321 gui/options.cpp:1327
-#: gui/options.cpp:1334 gui/options.cpp:1427 gui/options.cpp:1430
-#: gui/options.cpp:1442
+#: gui/launcher.cpp:571 gui/options.cpp:1143 gui/options.cpp:1151
+#: gui/options.cpp:1160 gui/options.cpp:1275 gui/options.cpp:1281
+#: gui/options.cpp:1289 gui/options.cpp:1319 gui/options.cpp:1325
+#: gui/options.cpp:1332 gui/options.cpp:1425 gui/options.cpp:1428
+#: gui/options.cpp:1440
msgctxt "path"
msgid "None"
msgstr "Ingen"
#: gui/launcher.cpp:365 gui/launcher.cpp:465 gui/launcher.cpp:575
-#: gui/options.cpp:1271 gui/options.cpp:1315 gui/options.cpp:1433
+#: gui/options.cpp:1269 gui/options.cpp:1313 gui/options.cpp:1431
#: backends/platform/wii/options.cpp:56
msgid "Default"
msgstr "Standard"
-#: gui/launcher.cpp:510 gui/options.cpp:1436
+#: gui/launcher.cpp:510 gui/options.cpp:1434
msgid "Select SoundFont"
msgstr "Vфlj SoundFont"
@@ -360,7 +374,7 @@ msgstr "Vфlj katalog med speldata"
msgid "Select additional game directory"
msgstr "Vфlj en ytterligare spelkatalog"
-#: gui/launcher.cpp:559 gui/options.cpp:1379
+#: gui/launcher.cpp:559 gui/options.cpp:1377
msgid "Select directory for saved games"
msgstr "Vфlj katalog fіr spardata"
@@ -558,6 +572,24 @@ msgstr "Kataloger scannade: %d ..."
msgid "Discovered %d new games, ignored %d previously added games ..."
msgstr "Upptфckte %d nya spel, ignorerade %d tidigare tillagda spel ..."
+#: gui/onscreendialog.cpp:101 gui/onscreendialog.cpp:103
+msgid "Stop"
+msgstr ""
+
+#: gui/onscreendialog.cpp:106
+msgid "Edit record description"
+msgstr ""
+
+#: gui/onscreendialog.cpp:108
+#, fuzzy
+msgid "Switch to Game"
+msgstr "Byt"
+
+#: gui/onscreendialog.cpp:110
+#, fuzzy
+msgid "Fast replay"
+msgstr "Snabblфge"
+
#: gui/options.cpp:85
msgid "Never"
msgstr "Aldrig"
@@ -598,8 +630,8 @@ msgstr "44 kHz"
msgid "48 kHz"
msgstr "48 kHz"
-#: gui/options.cpp:255 gui/options.cpp:481 gui/options.cpp:582
-#: gui/options.cpp:651 gui/options.cpp:859
+#: gui/options.cpp:255 gui/options.cpp:479 gui/options.cpp:580
+#: gui/options.cpp:649 gui/options.cpp:857
msgctxt "soundfont"
msgid "None"
msgstr "Ingen"
@@ -620,70 +652,70 @@ msgstr "fullskфrmsinstфllningen kunde inte фndras."
msgid "the aspect ratio setting could not be changed"
msgstr "instфllningen fіr bildfіrhхllandet kunde inte фndras."
-#: gui/options.cpp:734
+#: gui/options.cpp:732
msgid "Graphics mode:"
msgstr "Grafiklфge:"
-#: gui/options.cpp:748
+#: gui/options.cpp:746
msgid "Render mode:"
msgstr "Renderingslфge:"
-#: gui/options.cpp:748 gui/options.cpp:749
+#: gui/options.cpp:746 gui/options.cpp:747
msgid "Special dithering modes supported by some games"
msgstr "Speciella gitterlфgen stіdda av vissa spel"
-#: gui/options.cpp:760
+#: gui/options.cpp:758
#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2298
msgid "Fullscreen mode"
msgstr "Fullskфrmslфge"
-#: gui/options.cpp:763
+#: gui/options.cpp:761
msgid "Aspect ratio correction"
msgstr "Korrektion av bildfіrhхllande"
-#: gui/options.cpp:763
+#: gui/options.cpp:761
msgid "Correct aspect ratio for 320x200 games"
msgstr "Korrigerar bildfіrhхllanden fіr 320x200-spel"
-#: gui/options.cpp:771
+#: gui/options.cpp:769
msgid "Preferred Device:"
msgstr "Fіredragen enhet:"
-#: gui/options.cpp:771
+#: gui/options.cpp:769
msgid "Music Device:"
msgstr "Musikenhet:"
-#: gui/options.cpp:771 gui/options.cpp:773
+#: gui/options.cpp:769 gui/options.cpp:771
msgid "Specifies preferred sound device or sound card emulator"
msgstr "Bestфmmer din fіredragna emulator fіr ljudenhet eller ljudkort"
-#: gui/options.cpp:771 gui/options.cpp:773 gui/options.cpp:774
+#: gui/options.cpp:769 gui/options.cpp:771 gui/options.cpp:772
msgid "Specifies output sound device or sound card emulator"
msgstr "Bestфmmer emulator fіr ljudenhet eller ljudkort"
-#: gui/options.cpp:773
+#: gui/options.cpp:771
msgctxt "lowres"
msgid "Preferred Dev.:"
msgstr "Fіredr. enhet:"
-#: gui/options.cpp:773
+#: gui/options.cpp:771
msgctxt "lowres"
msgid "Music Device:"
msgstr "Musikenhet:"
-#: gui/options.cpp:800
+#: gui/options.cpp:798
msgid "AdLib emulator:"
msgstr "AdLib-emulator:"
-#: gui/options.cpp:800 gui/options.cpp:801
+#: gui/options.cpp:798 gui/options.cpp:799
msgid "AdLib is used for music in many games"
msgstr "AdLib anvфnds fіr musik i mхnga spel"
-#: gui/options.cpp:811
+#: gui/options.cpp:809
msgid "Output rate:"
msgstr "Ljudfrekvens:"
-#: gui/options.cpp:811 gui/options.cpp:812
+#: gui/options.cpp:809 gui/options.cpp:810
msgid ""
"Higher value specifies better sound quality but may be not supported by your "
"soundcard"
@@ -691,65 +723,65 @@ msgstr ""
"Ett hіgre vфrde betecknar bфttre ljudkvalitet men stіds kanske inte av ditt "
"ljudkort"
-#: gui/options.cpp:822
+#: gui/options.cpp:820
msgid "GM Device:"
msgstr "GM-enhet:"
-#: gui/options.cpp:822
+#: gui/options.cpp:820
msgid "Specifies default sound device for General MIDI output"
msgstr "Bestфmmer standardenheten fіr General MIDI-uppspelning"
-#: gui/options.cpp:833
+#: gui/options.cpp:831
msgid "Don't use General MIDI music"
msgstr "Anvфnd inte General MIDI-musik"
-#: gui/options.cpp:844 gui/options.cpp:910
+#: gui/options.cpp:842 gui/options.cpp:908
msgid "Use first available device"
msgstr "Anvфnd fіrsta tillgфngliga enhet"
-#: gui/options.cpp:856
+#: gui/options.cpp:854
msgid "SoundFont:"
msgstr "SoundFont:"
-#: gui/options.cpp:856 gui/options.cpp:858 gui/options.cpp:859
+#: gui/options.cpp:854 gui/options.cpp:856 gui/options.cpp:857
msgid "SoundFont is supported by some audio cards, FluidSynth and Timidity"
msgstr "SoundFont stіds endast av vissa ljudkort, FluidSynth och Timidity"
-#: gui/options.cpp:858
+#: gui/options.cpp:856
msgctxt "lowres"
msgid "SoundFont:"
msgstr "SoundFont:"
-#: gui/options.cpp:864
+#: gui/options.cpp:862
msgid "Mixed AdLib/MIDI mode"
msgstr "Blandat AdLib/MIDI-lфge"
-#: gui/options.cpp:864
+#: gui/options.cpp:862
msgid "Use both MIDI and AdLib sound generation"
msgstr "Anvфnd bхde MIDI och AdLib fіr ljudgeneration"
-#: gui/options.cpp:867
+#: gui/options.cpp:865
msgid "MIDI gain:"
msgstr "MIDI gain:"
-#: gui/options.cpp:874
+#: gui/options.cpp:872
msgid "FluidSynth Settings"
msgstr "FluidSynth instфllningar"
-#: gui/options.cpp:881
+#: gui/options.cpp:879
msgid "MT-32 Device:"
msgstr "MT-32 enhet:"
-#: gui/options.cpp:881
+#: gui/options.cpp:879
msgid "Specifies default sound device for Roland MT-32/LAPC1/CM32l/CM64 output"
msgstr ""
"Bestфmmer standardenheten fіr Roland MT-32/LAPC1/CM32I/CM64-uppspelning"
-#: gui/options.cpp:886
+#: gui/options.cpp:884
msgid "True Roland MT-32 (disable GM emulation)"
msgstr "Фkta Roland MT-32 (inaktivera GM-emulation)"
-#: gui/options.cpp:886 gui/options.cpp:888
+#: gui/options.cpp:884 gui/options.cpp:886
msgid ""
"Check if you want to use your real hardware Roland-compatible sound device "
"connected to your computer"
@@ -757,16 +789,16 @@ msgstr ""
"Aktivera om du vill anvфnda din verkliga Roland-kompatibla och dator-"
"anslutna ljudenhet"
-#: gui/options.cpp:888
+#: gui/options.cpp:886
msgctxt "lowres"
msgid "True Roland MT-32 (no GM emulation)"
msgstr "Фkta Roland MT-32 (ingen GM-emulation)"
-#: gui/options.cpp:891
+#: gui/options.cpp:889
msgid "Roland GS Device (enable MT-32 mappings)"
msgstr "Roland GS-enhet (aktivera MT-32 mappings)"
-#: gui/options.cpp:891
+#: gui/options.cpp:889
msgid ""
"Check if you want to enable patch mappings to emulate an MT-32 on a Roland "
"GS device"
@@ -774,175 +806,175 @@ msgstr ""
"Aktivera om du vill anvфnda patch mapping fіr att emulera en MT-32 pх en "
"Roland GS-enhet"
-#: gui/options.cpp:900
+#: gui/options.cpp:898
msgid "Don't use Roland MT-32 music"
msgstr "Anvфnd inte Roland MT-32 musik"
-#: gui/options.cpp:927
+#: gui/options.cpp:925
msgid "Text and Speech:"
msgstr "Undertext och tal:"
-#: gui/options.cpp:931 gui/options.cpp:941
+#: gui/options.cpp:929 gui/options.cpp:939
msgid "Speech"
msgstr "Tal"
-#: gui/options.cpp:932 gui/options.cpp:942
+#: gui/options.cpp:930 gui/options.cpp:940
msgid "Subtitles"
msgstr "Undertexter"
-#: gui/options.cpp:933
+#: gui/options.cpp:931
msgid "Both"
msgstr "Bхda"
-#: gui/options.cpp:935
+#: gui/options.cpp:933
msgid "Subtitle speed:"
msgstr "Texthastighet:"
-#: gui/options.cpp:937
+#: gui/options.cpp:935
msgctxt "lowres"
msgid "Text and Speech:"
msgstr "Text och tal:"
-#: gui/options.cpp:941
+#: gui/options.cpp:939
msgid "Spch"
msgstr "Tal"
-#: gui/options.cpp:942
+#: gui/options.cpp:940
msgid "Subs"
msgstr "Text"
-#: gui/options.cpp:943
+#: gui/options.cpp:941
msgctxt "lowres"
msgid "Both"
msgstr "Bхda"
-#: gui/options.cpp:943
+#: gui/options.cpp:941
msgid "Show subtitles and play speech"
msgstr "Visa undertexter och spela upp tal"
-#: gui/options.cpp:945
+#: gui/options.cpp:943
msgctxt "lowres"
msgid "Subtitle speed:"
msgstr "Texthastighet:"
-#: gui/options.cpp:961
+#: gui/options.cpp:959
msgid "Music volume:"
msgstr "Musikvolym:"
-#: gui/options.cpp:963
+#: gui/options.cpp:961
msgctxt "lowres"
msgid "Music volume:"
msgstr "Musikvolym:"
-#: gui/options.cpp:970
+#: gui/options.cpp:968
msgid "Mute All"
msgstr "Ljud av"
-#: gui/options.cpp:973
+#: gui/options.cpp:971
msgid "SFX volume:"
msgstr "SFX-volym:"
-#: gui/options.cpp:973 gui/options.cpp:975 gui/options.cpp:976
+#: gui/options.cpp:971 gui/options.cpp:973 gui/options.cpp:974
msgid "Special sound effects volume"
msgstr "Volym fіr specialeffekter"
-#: gui/options.cpp:975
+#: gui/options.cpp:973
msgctxt "lowres"
msgid "SFX volume:"
msgstr "SFX-volym:"
-#: gui/options.cpp:983
+#: gui/options.cpp:981
msgid "Speech volume:"
msgstr "Talvolym:"
-#: gui/options.cpp:985
+#: gui/options.cpp:983
msgctxt "lowres"
msgid "Speech volume:"
msgstr "Talvolym:"
-#: gui/options.cpp:1142
+#: gui/options.cpp:1140
msgid "Theme Path:"
msgstr "Sіkv. tema:"
-#: gui/options.cpp:1144
+#: gui/options.cpp:1142
msgctxt "lowres"
msgid "Theme Path:"
msgstr "Sіkv. tema:"
-#: gui/options.cpp:1150 gui/options.cpp:1152 gui/options.cpp:1153
+#: gui/options.cpp:1148 gui/options.cpp:1150 gui/options.cpp:1151
msgid "Specifies path to additional data used by all games or ScummVM"
msgstr ""
"Bestфmmer sіkvфg till andra data som anvфnds av alla spel eller ScummVM"
-#: gui/options.cpp:1159
+#: gui/options.cpp:1157
msgid "Plugins Path:"
msgstr "Sіkv. tillфgg:"
-#: gui/options.cpp:1161
+#: gui/options.cpp:1159
msgctxt "lowres"
msgid "Plugins Path:"
msgstr "Sіkv. tillфgg:"
-#: gui/options.cpp:1170 gui/fluidsynth-dialog.cpp:138
+#: gui/options.cpp:1168 gui/fluidsynth-dialog.cpp:138
msgid "Misc"
msgstr "Diverse"
-#: gui/options.cpp:1172
+#: gui/options.cpp:1170
msgctxt "lowres"
msgid "Misc"
msgstr "Diverse"
-#: gui/options.cpp:1174
+#: gui/options.cpp:1172
msgid "Theme:"
msgstr "Tema:"
-#: gui/options.cpp:1178
+#: gui/options.cpp:1176
msgid "GUI Renderer:"
msgstr "GUI-rendering:"
-#: gui/options.cpp:1190
+#: gui/options.cpp:1188
msgid "Autosave:"
msgstr "Autospara:"
-#: gui/options.cpp:1192
+#: gui/options.cpp:1190
msgctxt "lowres"
msgid "Autosave:"
msgstr "Autospara:"
-#: gui/options.cpp:1200
+#: gui/options.cpp:1198
msgid "Keys"
msgstr "Tangenter"
-#: gui/options.cpp:1207
+#: gui/options.cpp:1205
msgid "GUI Language:"
msgstr "GUI-sprхk:"
-#: gui/options.cpp:1207
+#: gui/options.cpp:1205
msgid "Language of ScummVM GUI"
msgstr "Sprхk fіr ScummVM:s anvфndargrфnssnitt"
-#: gui/options.cpp:1366
+#: gui/options.cpp:1364
msgid "You have to restart ScummVM before your changes will take effect."
msgstr "Du mхste starta om ScummVM fіr att фndringarna ska fх effekt."
-#: gui/options.cpp:1386
+#: gui/options.cpp:1384
msgid "The chosen directory cannot be written to. Please select another one."
msgstr ""
"Det gхr inte att skriva till den valda katalogen. Var god vфlj en annan."
-#: gui/options.cpp:1395
+#: gui/options.cpp:1393
msgid "Select directory for GUI themes"
msgstr "Vфlj katalog fіr GUI-teman"
-#: gui/options.cpp:1405
+#: gui/options.cpp:1403
msgid "Select directory for extra files"
msgstr "Vфlj katalog fіr extra filer"
-#: gui/options.cpp:1416
+#: gui/options.cpp:1414
msgid "Select directory for plugins"
msgstr "Vфlj katalog fіr tillфgg"
-#: gui/options.cpp:1469
+#: gui/options.cpp:1467
msgid ""
"The theme you selected does not support your current language. If you want "
"to use this theme you need to switch to another language first."
@@ -950,6 +982,29 @@ msgstr ""
"Temat du valde stіder inte ditt sprхk. Om du vill anvфnda det hфr temat "
"mхste fіrst byta till ett annat sprхk."
+#. I18N: You must leave "#" as is, only word 'next' is translatable
+#: gui/predictivedialog.cpp:87
+msgid "# next"
+msgstr ""
+
+#: gui/predictivedialog.cpp:88
+msgid "add"
+msgstr ""
+
+#: gui/predictivedialog.cpp:92
+#, fuzzy
+msgid "Delete char"
+msgstr "Radera"
+
+#: gui/predictivedialog.cpp:96
+msgid "<"
+msgstr ""
+
+#. I18N: Pre means 'Predictive', leave '*' as is
+#: gui/predictivedialog.cpp:98
+msgid "* Pre"
+msgstr ""
+
#: gui/recorderdialog.cpp:64
msgid "Recorder or Playback Gameplay"
msgstr ""
@@ -987,6 +1042,11 @@ msgstr ""
msgid "Do you really want to delete this record?"
msgstr "Vill du verkligen radera den hфr spardatan?"
+#: gui/recorderdialog.cpp:174
+#, fuzzy
+msgid "Unknown Author"
+msgstr "Okфnt fel"
+
#: gui/saveload-dialog.cpp:167
msgid "List view"
msgstr "Visa som lista"
@@ -1437,14 +1497,18 @@ msgstr ""
msgid "Start anyway"
msgstr "Starta фndх"
-#: audio/fmopl.cpp:50
+#: audio/fmopl.cpp:62
msgid "MAME OPL emulator"
msgstr "MAME OPL-emulator"
-#: audio/fmopl.cpp:52
+#: audio/fmopl.cpp:64
msgid "DOSBox OPL emulator"
msgstr "DOSBox OPL-emulator"
+#: audio/fmopl.cpp:67
+msgid "ALSA Direct FM"
+msgstr ""
+
#: audio/mididrv.cpp:209
#, c-format
msgid ""
@@ -1494,7 +1558,7 @@ msgstr "Ingen musik"
msgid "Amiga Audio Emulator"
msgstr "Amiga ljudemulator"
-#: audio/softsynth/adlib.cpp:2285
+#: audio/adlib.cpp:2291
msgid "AdLib Emulator"
msgstr "AdLib-emulator"
@@ -2127,14 +2191,13 @@ msgstr "Klickning deaktiverad"
#: engines/agi/detection.cpp:147 engines/drascula/detection.cpp:302
#: engines/dreamweb/detection.cpp:47 engines/neverhood/detection.cpp:160
#: engines/sci/detection.cpp:394 engines/toltecs/detection.cpp:200
-#: engines/zvision/detection.cpp:246
+#: engines/zvision/detection_tables.h:51
msgid "Use original save/load screens"
msgstr "Anvфnd originalskфrmar fіr spara/ladda"
#: engines/agi/detection.cpp:148 engines/drascula/detection.cpp:303
#: engines/dreamweb/detection.cpp:48 engines/neverhood/detection.cpp:161
#: engines/sci/detection.cpp:395 engines/toltecs/detection.cpp:201
-#: engines/zvision/detection.cpp:247
msgid "Use the original save/load screens, instead of the ScummVM ones"
msgstr "Anvфnder originalskфrmarna fіr spara/ladda istфllet fіr ScummVM:s"
@@ -3271,6 +3334,25 @@ msgstr "Flyg хt hіger"
msgid "Fly to lower right"
msgstr "Flyg хt nedre hіger"
+#: engines/scumm/input.cpp:572
+#, fuzzy
+msgid "Snap scroll on"
+msgstr "Mjuk rullning"
+
+#: engines/scumm/input.cpp:574
+msgid "Snap scroll off"
+msgstr ""
+
+#: engines/scumm/input.cpp:587
+#, fuzzy
+msgid "Music volume: "
+msgstr "Musikvolym:"
+
+#: engines/scumm/input.cpp:604
+#, fuzzy
+msgid "Subtitle speed: "
+msgstr "Texthastighet:"
+
#: engines/scumm/scumm.cpp:1832
#, c-format
msgid ""
@@ -3419,39 +3501,44 @@ msgstr ""
msgid "Show the current number of frames per second in the upper left corner"
msgstr ""
-#: engines/zvision/detection.cpp:256
+#: engines/zvision/detection_tables.h:52
+#, fuzzy
+msgid "Use the original save/load screens instead of the ScummVM interface"
+msgstr "Anvфnder originalskфrmarna fіr spara/ladda istфllet fіr ScummVM:s"
+
+#: engines/zvision/detection_tables.h:61
msgid "Double FPS"
msgstr ""
-#: engines/zvision/detection.cpp:257
-msgid "Increase game FPS from 30 to 60"
+#: engines/zvision/detection_tables.h:62
+msgid "Increase framerate from 30 to 60 FPS"
msgstr ""
-#: engines/zvision/detection.cpp:266
+#: engines/zvision/detection_tables.h:71
#, fuzzy
msgid "Enable Venus"
msgstr "Aktivera heliumlфge"
-#: engines/zvision/detection.cpp:267
+#: engines/zvision/detection_tables.h:72
+#, fuzzy
msgid "Enable the Venus help system"
-msgstr ""
+msgstr "Aktivera heliumlфge"
-#: engines/zvision/detection.cpp:276
+#: engines/zvision/detection_tables.h:81
msgid "Disable animation while turning"
msgstr ""
-#: engines/zvision/detection.cpp:277
-msgid "Disable animation while turning in panoramic mode"
+#: engines/zvision/detection_tables.h:82
+msgid "Disable animation while turning in panorama mode"
msgstr ""
-#: engines/zvision/detection.cpp:286
-msgid "Use the hires MPEG movies"
+#: engines/zvision/detection_tables.h:91
+msgid "Use high resolution MPEG video"
msgstr ""
-#: engines/zvision/detection.cpp:287
+#: engines/zvision/detection_tables.h:92
#, fuzzy
-msgid ""
-"Use the hires MPEG movies of the DVD version, instead of the lowres AVI ones"
+msgid "Use MPEG video from the DVD version, instead of lower resolution AVI"
msgstr ""
"Anvфnd de alternativa silverpekarna istфllet fіr de normala guldpekarna"
diff --git a/po/uk_UA.po b/po/uk_UA.po
index 7245d1bcf7..c4264f84c2 100644
--- a/po/uk_UA.po
+++ b/po/uk_UA.po
@@ -2,22 +2,21 @@
# Copyright (C) 2010-2015 The ScummVM Team
# This file is distributed under the same license as the ScummVM package.
# Lubomyr Lisen, 2010.
-# Eugene Sandulenko <sev@scummvm.org>, 2010-2014
+# Eugene Sandulenko <sev@scummvm.org>, 2010-2015
#
msgid ""
msgstr ""
"Project-Id-Version: ScummVM 1.3.0svn\n"
"Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n"
-"POT-Creation-Date: 2015-06-30 20:57+0100\n"
-"PO-Revision-Date: 2014-07-01 02:34+0300\n"
+"POT-Creation-Date: 2015-10-11 18:59+0100\n"
+"PO-Revision-Date: 2015-11-06 10:07+0300\n"
"Last-Translator: Eugene Sandulenko <sev@scummvm.org>\n"
"Language-Team: Ukrainian\n"
"Language: Ukrainian\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=iso-8859-5\n"
"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n"
-"%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
#: gui/about.cpp:94
#, c-format
@@ -32,7 +31,7 @@ msgstr "Включені в білд опції:"
msgid "Available engines:"
msgstr "Доступні движки:"
-#: gui/browser.cpp:68
+#: gui/browser.cpp:68 gui/browser_osx.mm:104
msgid "Show hidden files"
msgstr "Показати cховані файлі"
@@ -53,13 +52,14 @@ msgctxt "lowres"
msgid "Go up"
msgstr "Вгору"
-#: gui/browser.cpp:75 gui/chooser.cpp:46 gui/KeysDialog.cpp:43
-#: gui/launcher.cpp:351 gui/massadd.cpp:95 gui/options.cpp:1239
-#: gui/recorderdialog.cpp:70 gui/recorderdialog.cpp:156
-#: gui/saveload-dialog.cpp:216 gui/saveload-dialog.cpp:276
-#: gui/saveload-dialog.cpp:547 gui/saveload-dialog.cpp:931
-#: gui/themebrowser.cpp:55 gui/fluidsynth-dialog.cpp:152
-#: engines/engine.cpp:483 backends/platform/wii/options.cpp:48
+#: gui/browser.cpp:75 gui/chooser.cpp:46 gui/editrecorddialog.cpp:67
+#: gui/KeysDialog.cpp:43 gui/launcher.cpp:351 gui/massadd.cpp:95
+#: gui/options.cpp:1237 gui/predictivedialog.cpp:74 gui/recorderdialog.cpp:70
+#: gui/recorderdialog.cpp:156 gui/saveload-dialog.cpp:216
+#: gui/saveload-dialog.cpp:276 gui/saveload-dialog.cpp:547
+#: gui/saveload-dialog.cpp:931 gui/themebrowser.cpp:55
+#: gui/fluidsynth-dialog.cpp:152 engines/engine.cpp:483
+#: backends/platform/wii/options.cpp:48
#: backends/events/default/default-events.cpp:196
#: backends/events/default/default-events.cpp:218
#: engines/drascula/saveload.cpp:49 engines/parallaction/saveload.cpp:274
@@ -67,10 +67,27 @@ msgstr "Вгору"
msgid "Cancel"
msgstr "Відміна"
-#: gui/browser.cpp:76 gui/chooser.cpp:47 gui/themebrowser.cpp:56
+#: gui/browser.cpp:76 gui/browser_osx.mm:103 gui/chooser.cpp:47
+#: gui/themebrowser.cpp:56
msgid "Choose"
msgstr "Вибрати"
+#: gui/editrecorddialog.cpp:58
+msgid "Author:"
+msgstr "Автор:"
+
+#: gui/editrecorddialog.cpp:59 gui/launcher.cpp:204
+msgid "Name:"
+msgstr "Назва:"
+
+#: gui/editrecorddialog.cpp:60
+msgid "Notes:"
+msgstr "Примітки:"
+
+#: gui/editrecorddialog.cpp:68 gui/predictivedialog.cpp:75
+msgid "Ok"
+msgstr "Гаразд"
+
#: gui/gui-manager.cpp:117 backends/keymapper/remap-dialog.cpp:53
#: engines/scumm/help.cpp:126 engines/scumm/help.cpp:141
#: engines/scumm/help.cpp:166 engines/scumm/help.cpp:192
@@ -103,7 +120,7 @@ msgid "Map"
msgstr "Призначити"
#: gui/KeysDialog.cpp:42 gui/launcher.cpp:352 gui/launcher.cpp:1048
-#: gui/launcher.cpp:1052 gui/massadd.cpp:92 gui/options.cpp:1240
+#: gui/launcher.cpp:1052 gui/massadd.cpp:92 gui/options.cpp:1238
#: gui/saveload-dialog.cpp:932 gui/fluidsynth-dialog.cpp:153
#: engines/engine.cpp:402 engines/engine.cpp:413
#: backends/platform/wii/options.cpp:47
@@ -165,10 +182,6 @@ msgctxt "lowres"
msgid "ID:"
msgstr "ID:"
-#: gui/launcher.cpp:204
-msgid "Name:"
-msgstr "Назва:"
-
#: gui/launcher.cpp:204 gui/launcher.cpp:206 gui/launcher.cpp:207
msgid "Full title of the game"
msgstr "Повна назва гри"
@@ -191,7 +204,7 @@ msgstr ""
"українську"
#: gui/launcher.cpp:212 gui/launcher.cpp:226 gui/options.cpp:87
-#: gui/options.cpp:737 gui/options.cpp:750 gui/options.cpp:1210
+#: gui/options.cpp:735 gui/options.cpp:748 gui/options.cpp:1208
#: audio/null.cpp:41
msgid "<default>"
msgstr "<за умовчанням>"
@@ -213,11 +226,11 @@ msgstr "Платформа:"
msgid "Engine"
msgstr "Движок"
-#: gui/launcher.cpp:245 gui/options.cpp:1073 gui/options.cpp:1090
+#: gui/launcher.cpp:245 gui/options.cpp:1071 gui/options.cpp:1088
msgid "Graphics"
msgstr "Графіка"
-#: gui/launcher.cpp:245 gui/options.cpp:1073 gui/options.cpp:1090
+#: gui/launcher.cpp:245 gui/options.cpp:1071 gui/options.cpp:1088
msgid "GFX"
msgstr "Грф"
@@ -230,7 +243,7 @@ msgctxt "lowres"
msgid "Override global graphic settings"
msgstr "Перекрити глобальні установки графіки"
-#: gui/launcher.cpp:257 gui/options.cpp:1096
+#: gui/launcher.cpp:257 gui/options.cpp:1094
msgid "Audio"
msgstr "Аудіо"
@@ -243,11 +256,11 @@ msgctxt "lowres"
msgid "Override global audio settings"
msgstr "Перекрити глобальні установки аудіо"
-#: gui/launcher.cpp:271 gui/options.cpp:1101
+#: gui/launcher.cpp:271 gui/options.cpp:1099
msgid "Volume"
msgstr "Гучність"
-#: gui/launcher.cpp:273 gui/options.cpp:1103
+#: gui/launcher.cpp:273 gui/options.cpp:1101
msgctxt "lowres"
msgid "Volume"
msgstr "Гучн."
@@ -261,7 +274,7 @@ msgctxt "lowres"
msgid "Override global volume settings"
msgstr "Перекрити глобальні установки гучності"
-#: gui/launcher.cpp:286 gui/options.cpp:1111
+#: gui/launcher.cpp:286 gui/options.cpp:1109
msgid "MIDI"
msgstr "MIDI"
@@ -274,7 +287,7 @@ msgctxt "lowres"
msgid "Override global MIDI settings"
msgstr "Перекрити глобальні установки MIDI"
-#: gui/launcher.cpp:300 gui/options.cpp:1117
+#: gui/launcher.cpp:300 gui/options.cpp:1115
msgid "MT-32"
msgstr "MT-32"
@@ -287,11 +300,11 @@ msgctxt "lowres"
msgid "Override global MT-32 settings"
msgstr "Перекрити глобальні установки MT-32"
-#: gui/launcher.cpp:314 gui/options.cpp:1124
+#: gui/launcher.cpp:314 gui/options.cpp:1122
msgid "Paths"
msgstr "Шляхи"
-#: gui/launcher.cpp:316 gui/options.cpp:1126
+#: gui/launcher.cpp:316 gui/options.cpp:1124
msgctxt "lowres"
msgid "Paths"
msgstr "Шляхи"
@@ -305,7 +318,7 @@ msgctxt "lowres"
msgid "Game Path:"
msgstr "Шлях до гри:"
-#: gui/launcher.cpp:330 gui/options.cpp:1150
+#: gui/launcher.cpp:330 gui/options.cpp:1148
msgid "Extra Path:"
msgstr "Додатк. шлях:"
@@ -313,42 +326,42 @@ msgstr "Додатк. шлях:"
msgid "Specifies path to additional data used by the game"
msgstr "Вказує шлях до додаткових файлів даних для гри"
-#: gui/launcher.cpp:332 gui/options.cpp:1152
+#: gui/launcher.cpp:332 gui/options.cpp:1150
msgctxt "lowres"
msgid "Extra Path:"
msgstr "Дод. шлях:"
-#: gui/launcher.cpp:339 gui/options.cpp:1134
+#: gui/launcher.cpp:339 gui/options.cpp:1132
msgid "Save Path:"
msgstr "Шлях збер.:"
#: gui/launcher.cpp:339 gui/launcher.cpp:341 gui/launcher.cpp:342
-#: gui/options.cpp:1134 gui/options.cpp:1136 gui/options.cpp:1137
+#: gui/options.cpp:1132 gui/options.cpp:1134 gui/options.cpp:1135
msgid "Specifies where your saved games are put"
msgstr "Вказує шлях до збережень гри"
-#: gui/launcher.cpp:341 gui/options.cpp:1136
+#: gui/launcher.cpp:341 gui/options.cpp:1134
msgctxt "lowres"
msgid "Save Path:"
msgstr "Шлях збер.:"
#: gui/launcher.cpp:360 gui/launcher.cpp:459 gui/launcher.cpp:517
-#: gui/launcher.cpp:571 gui/options.cpp:1145 gui/options.cpp:1153
-#: gui/options.cpp:1162 gui/options.cpp:1277 gui/options.cpp:1283
-#: gui/options.cpp:1291 gui/options.cpp:1321 gui/options.cpp:1327
-#: gui/options.cpp:1334 gui/options.cpp:1427 gui/options.cpp:1430
-#: gui/options.cpp:1442
+#: gui/launcher.cpp:571 gui/options.cpp:1143 gui/options.cpp:1151
+#: gui/options.cpp:1160 gui/options.cpp:1275 gui/options.cpp:1281
+#: gui/options.cpp:1289 gui/options.cpp:1319 gui/options.cpp:1325
+#: gui/options.cpp:1332 gui/options.cpp:1425 gui/options.cpp:1428
+#: gui/options.cpp:1440
msgctxt "path"
msgid "None"
msgstr "Не завданий"
#: gui/launcher.cpp:365 gui/launcher.cpp:465 gui/launcher.cpp:575
-#: gui/options.cpp:1271 gui/options.cpp:1315 gui/options.cpp:1433
+#: gui/options.cpp:1269 gui/options.cpp:1313 gui/options.cpp:1431
#: backends/platform/wii/options.cpp:56
msgid "Default"
msgstr "За умовчанням"
-#: gui/launcher.cpp:510 gui/options.cpp:1436
+#: gui/launcher.cpp:510 gui/options.cpp:1434
msgid "Select SoundFont"
msgstr "Виберіть SoundFont"
@@ -360,7 +373,7 @@ msgstr "Виберіть папку з файлами гри"
msgid "Select additional game directory"
msgstr "Виберіть додаткову папку гри"
-#: gui/launcher.cpp:559 gui/options.cpp:1379
+#: gui/launcher.cpp:559 gui/options.cpp:1377
msgid "Select directory for saved games"
msgstr "Виберіть папку для збережень"
@@ -515,9 +528,8 @@ msgid "Do you really want to remove this game configuration?"
msgstr "Ви дійсно хочете видалити установки для цієї гри?"
#: gui/launcher.cpp:999
-#, fuzzy
msgid "Do you want to load saved game?"
-msgstr "Ви хочете завантажити гру?"
+msgstr "Ви хочете завантажити збережену гру?"
#: gui/launcher.cpp:1048
msgid "This game does not support loading games from the launcher."
@@ -533,7 +545,7 @@ msgstr "Дод. багато..."
#: gui/launcher.cpp:1161
msgid "Record..."
-msgstr ""
+msgstr "Запис..."
#: gui/massadd.cpp:79 gui/massadd.cpp:82
msgid "... progress ..."
@@ -558,6 +570,22 @@ msgstr "Проглянуто %d папок ..."
msgid "Discovered %d new games, ignored %d previously added games ..."
msgstr "Знайдено %d нових ігор, пропущено %d попередньо доданих ігор ..."
+#: gui/onscreendialog.cpp:101 gui/onscreendialog.cpp:103
+msgid "Stop"
+msgstr "Стоп"
+
+#: gui/onscreendialog.cpp:106
+msgid "Edit record description"
+msgstr "Редагвати опис запису"
+
+#: gui/onscreendialog.cpp:108
+msgid "Switch to Game"
+msgstr "Переключитися на гру"
+
+#: gui/onscreendialog.cpp:110
+msgid "Fast replay"
+msgstr "Швидке відтворення"
+
#: gui/options.cpp:85
msgid "Never"
msgstr "Ніколи"
@@ -598,8 +626,8 @@ msgstr "44 кГц"
msgid "48 kHz"
msgstr "48 кГц"
-#: gui/options.cpp:255 gui/options.cpp:481 gui/options.cpp:582
-#: gui/options.cpp:651 gui/options.cpp:859
+#: gui/options.cpp:255 gui/options.cpp:479 gui/options.cpp:580
+#: gui/options.cpp:649 gui/options.cpp:857
msgctxt "soundfont"
msgid "None"
msgstr "Не заданий"
@@ -620,70 +648,70 @@ msgstr "не вдалося змінити режим повного екрану"
msgid "the aspect ratio setting could not be changed"
msgstr "не вдалося змінити режим корекції співвідношення сторін"
-#: gui/options.cpp:734
+#: gui/options.cpp:732
msgid "Graphics mode:"
msgstr "Графічн. режим:"
-#: gui/options.cpp:748
+#: gui/options.cpp:746
msgid "Render mode:"
msgstr "Режим раструв.:"
-#: gui/options.cpp:748 gui/options.cpp:749
+#: gui/options.cpp:746 gui/options.cpp:747
msgid "Special dithering modes supported by some games"
msgstr "Спеціальні режими растрування, які підтримують деякі ігри"
-#: gui/options.cpp:760
+#: gui/options.cpp:758
#: backends/graphics/surfacesdl/surfacesdl-graphics.cpp:2298
msgid "Fullscreen mode"
msgstr "Повноекранний режим"
-#: gui/options.cpp:763
+#: gui/options.cpp:761
msgid "Aspect ratio correction"
msgstr "Корекція співвідношення сторін"
-#: gui/options.cpp:763
+#: gui/options.cpp:761
msgid "Correct aspect ratio for 320x200 games"
msgstr "Коригувати співвідношення сторін для ігор з графікою 320x200"
-#: gui/options.cpp:771
+#: gui/options.cpp:769
msgid "Preferred Device:"
msgstr "Уподобаний пристрій:"
-#: gui/options.cpp:771
+#: gui/options.cpp:769
msgid "Music Device:"
msgstr "Музич. пристрій:"
-#: gui/options.cpp:771 gui/options.cpp:773
+#: gui/options.cpp:769 gui/options.cpp:771
msgid "Specifies preferred sound device or sound card emulator"
msgstr "Вказує уподобаний звуковий пристрій або емулятор звукової карти"
-#: gui/options.cpp:771 gui/options.cpp:773 gui/options.cpp:774
+#: gui/options.cpp:769 gui/options.cpp:771 gui/options.cpp:772
msgid "Specifies output sound device or sound card emulator"
msgstr "Вказує вихідний звуковий пристрій або емулятор звукової карти"
-#: gui/options.cpp:773
+#: gui/options.cpp:771
msgctxt "lowres"
msgid "Preferred Dev.:"
msgstr "Уподоб. пристрій:"
-#: gui/options.cpp:773
+#: gui/options.cpp:771
msgctxt "lowres"
msgid "Music Device:"
msgstr "Музичний пристрій:"
-#: gui/options.cpp:800
+#: gui/options.cpp:798
msgid "AdLib emulator:"
msgstr "Емулятор AdLib:"
-#: gui/options.cpp:800 gui/options.cpp:801
+#: gui/options.cpp:798 gui/options.cpp:799
msgid "AdLib is used for music in many games"
msgstr "Звукова карта AdLib використовується багатьма іграми"
-#: gui/options.cpp:811
+#: gui/options.cpp:809
msgid "Output rate:"
msgstr "Вихідна частота:"
-#: gui/options.cpp:811 gui/options.cpp:812
+#: gui/options.cpp:809 gui/options.cpp:810
msgid ""
"Higher value specifies better sound quality but may be not supported by your "
"soundcard"
@@ -691,67 +719,67 @@ msgstr ""
"Великі значення задають кращу якість звуку, проте вони можуть не "
"підтримуватися вашою звуковою картою"
-#: gui/options.cpp:822
+#: gui/options.cpp:820
msgid "GM Device:"
msgstr "Пристрій GM:"
-#: gui/options.cpp:822
+#: gui/options.cpp:820
msgid "Specifies default sound device for General MIDI output"
msgstr "Вказує вихідний звуковий пристрій для General MIDI"
-#: gui/options.cpp:833
+#: gui/options.cpp:831
msgid "Don't use General MIDI music"
msgstr "Не використовувати музику General MIDI"
-#: gui/options.cpp:844 gui/options.cpp:910
+#: gui/options.cpp:842 gui/options.cpp:908
msgid "Use first available device"
msgstr "Використовувати перший наявний пристрій"
-#: gui/options.cpp:856
+#: gui/options.cpp:854
msgid "SoundFont:"
msgstr "SoundFont:"
-#: gui/options.cpp:856 gui/options.cpp:858 gui/options.cpp:859
+#: gui/options.cpp:854 gui/options.cpp:856 gui/options.cpp:857
msgid "SoundFont is supported by some audio cards, FluidSynth and Timidity"
msgstr ""
"SoundFont підтримується деякими звуковими картами, FluidSynth та Timidity"
-#: gui/options.cpp:858
+#: gui/options.cpp:856
msgctxt "lowres"
msgid "SoundFont:"
msgstr "SoundFont:"
-#: gui/options.cpp:864
+#: gui/options.cpp:862
msgid "Mixed AdLib/MIDI mode"
msgstr "Змішаний режим AdLib/MIDI"
-#: gui/options.cpp:864
+#: gui/options.cpp:862
msgid "Use both MIDI and AdLib sound generation"
msgstr "Використовувати і MIDI і AdLib для генерації звуку"
-#: gui/options.cpp:867
+#: gui/options.cpp:865
msgid "MIDI gain:"
msgstr "Посилення MIDI:"
-#: gui/options.cpp:874
+#: gui/options.cpp:872
msgid "FluidSynth Settings"
msgstr "Налаштування FluidSynth"
-#: gui/options.cpp:881
+#: gui/options.cpp:879
msgid "MT-32 Device:"
msgstr "Пристрій MT-32:"
-#: gui/options.cpp:881
+#: gui/options.cpp:879
msgid "Specifies default sound device for Roland MT-32/LAPC1/CM32l/CM64 output"
msgstr ""
"Вказує звуковий пристрій за умовчанням для виводу на Roland MT-32/LAPC1/"
"CM32l/CM64"
-#: gui/options.cpp:886
+#: gui/options.cpp:884
msgid "True Roland MT-32 (disable GM emulation)"
msgstr "Справжній Roland MT-32 (вимкнути емуляцию GM)"
-#: gui/options.cpp:886 gui/options.cpp:888
+#: gui/options.cpp:884 gui/options.cpp:886
msgid ""
"Check if you want to use your real hardware Roland-compatible sound device "
"connected to your computer"
@@ -759,16 +787,16 @@ msgstr ""
"Відмітьте, якщо у вас підключено Roland-сумісний звуковий пристрій і ви "
"хочете його використовувати"
-#: gui/options.cpp:888
+#: gui/options.cpp:886
msgctxt "lowres"
msgid "True Roland MT-32 (no GM emulation)"
msgstr "Справжній Roland MT-32 (вимкнути емуляцию GM)"
-#: gui/options.cpp:891
+#: gui/options.cpp:889
msgid "Roland GS Device (enable MT-32 mappings)"
msgstr "Режим Roland GS (ввімкнути маплення MT-32)"
-#: gui/options.cpp:891
+#: gui/options.cpp:889
msgid ""
"Check if you want to enable patch mappings to emulate an MT-32 on a Roland "
"GS device"
@@ -776,175 +804,175 @@ msgstr ""
"Відмітьте, якщо хочете включити латки для іструментів для емуляції MT-32 на "
"Roland"
-#: gui/options.cpp:900
+#: gui/options.cpp:898
msgid "Don't use Roland MT-32 music"
msgstr "Не використовувати музику для Roland MT-32"
-#: gui/options.cpp:927
+#: gui/options.cpp:925
msgid "Text and Speech:"
msgstr "Текст і озвучка:"
-#: gui/options.cpp:931 gui/options.cpp:941
+#: gui/options.cpp:929 gui/options.cpp:939
msgid "Speech"
msgstr "Озвучка"
-#: gui/options.cpp:932 gui/options.cpp:942
+#: gui/options.cpp:930 gui/options.cpp:940
msgid "Subtitles"
msgstr "Субтитри"
-#: gui/options.cpp:933
+#: gui/options.cpp:931
msgid "Both"
msgstr "Все"
-#: gui/options.cpp:935
+#: gui/options.cpp:933
msgid "Subtitle speed:"
msgstr "Швид. субтитрів:"
-#: gui/options.cpp:937
+#: gui/options.cpp:935
msgctxt "lowres"
msgid "Text and Speech:"
msgstr "Текст і озвучка:"
-#: gui/options.cpp:941
+#: gui/options.cpp:939
msgid "Spch"
msgstr "Озв"
-#: gui/options.cpp:942
+#: gui/options.cpp:940
msgid "Subs"
msgstr "Суб"
-#: gui/options.cpp:943
+#: gui/options.cpp:941
msgctxt "lowres"
msgid "Both"
msgstr "Все"
-#: gui/options.cpp:943
+#: gui/options.cpp:941
msgid "Show subtitles and play speech"
msgstr "Показувати субтитри і відтворювати мову"
-#: gui/options.cpp:945
+#: gui/options.cpp:943
msgctxt "lowres"
msgid "Subtitle speed:"
msgstr "Швид. субтитрів:"
-#: gui/options.cpp:961
+#: gui/options.cpp:959
msgid "Music volume:"
msgstr "Гучність музики:"
-#: gui/options.cpp:963
+#: gui/options.cpp:961
msgctxt "lowres"
msgid "Music volume:"
msgstr "Гучність музики:"
-#: gui/options.cpp:970
+#: gui/options.cpp:968
msgid "Mute All"
msgstr "Вимкнути все"
-#: gui/options.cpp:973
+#: gui/options.cpp:971
msgid "SFX volume:"
msgstr "Гучність ефектів:"
-#: gui/options.cpp:973 gui/options.cpp:975 gui/options.cpp:976
+#: gui/options.cpp:971 gui/options.cpp:973 gui/options.cpp:974
msgid "Special sound effects volume"
msgstr "Гучність спеціальних звукових ефектів"
-#: gui/options.cpp:975
+#: gui/options.cpp:973
msgctxt "lowres"
msgid "SFX volume:"
msgstr "Гучн. ефектів:"
-#: gui/options.cpp:983
+#: gui/options.cpp:981
msgid "Speech volume:"
msgstr "Гучність озвучки:"
-#: gui/options.cpp:985
+#: gui/options.cpp:983
msgctxt "lowres"
msgid "Speech volume:"
msgstr "Гучн. озвучки:"
-#: gui/options.cpp:1142
+#: gui/options.cpp:1140
msgid "Theme Path:"
msgstr "Шлях до тем:"
-#: gui/options.cpp:1144
+#: gui/options.cpp:1142
msgctxt "lowres"
msgid "Theme Path:"
msgstr "Шлях до тем:"
-#: gui/options.cpp:1150 gui/options.cpp:1152 gui/options.cpp:1153
+#: gui/options.cpp:1148 gui/options.cpp:1150 gui/options.cpp:1151
msgid "Specifies path to additional data used by all games or ScummVM"
msgstr ""
"Вказує шлях до додаткових файлів даних, які використовуються усіма іграми "
"або ScummVM"
-#: gui/options.cpp:1159
+#: gui/options.cpp:1157
msgid "Plugins Path:"
msgstr "Шлях до втулків:"
-#: gui/options.cpp:1161
+#: gui/options.cpp:1159
msgctxt "lowres"
msgid "Plugins Path:"
msgstr "Шлях до втулків:"
-#: gui/options.cpp:1170 gui/fluidsynth-dialog.cpp:138
+#: gui/options.cpp:1168 gui/fluidsynth-dialog.cpp:138
msgid "Misc"
msgstr "Різне"
-#: gui/options.cpp:1172
+#: gui/options.cpp:1170
msgctxt "lowres"
msgid "Misc"
msgstr "Різне"
-#: gui/options.cpp:1174
+#: gui/options.cpp:1172
msgid "Theme:"
msgstr "Тема:"
-#: gui/options.cpp:1178
+#: gui/options.cpp:1176
msgid "GUI Renderer:"
msgstr "Растер. GUI:"
-#: gui/options.cpp:1190
+#: gui/options.cpp:1188
msgid "Autosave:"
msgstr "Автозбереження:"
-#: gui/options.cpp:1192
+#: gui/options.cpp:1190
msgctxt "lowres"
msgid "Autosave:"
msgstr "Автозбереж.:"
-#: gui/options.cpp:1200
+#: gui/options.cpp:1198
msgid "Keys"
msgstr "Клавіші"
-#: gui/options.cpp:1207
+#: gui/options.cpp:1205
msgid "GUI Language:"
msgstr "Мова інтерф.:"
-#: gui/options.cpp:1207
+#: gui/options.cpp:1205
msgid "Language of ScummVM GUI"
msgstr "Мова графічного інтерфейсу ScummVM"
-#: gui/options.cpp:1366
+#: gui/options.cpp:1364
msgid "You have to restart ScummVM before your changes will take effect."
msgstr "Ви повинні перезапустити ScummVM щоб застосувати зміни."
-#: gui/options.cpp:1386
+#: gui/options.cpp:1384
msgid "The chosen directory cannot be written to. Please select another one."
msgstr "Не можу писати у вибрану папку. Будь ласка, вкажіть іншу."
-#: gui/options.cpp:1395
+#: gui/options.cpp:1393
msgid "Select directory for GUI themes"
msgstr "Виберіть папку для тем GUI"
-#: gui/options.cpp:1405
+#: gui/options.cpp:1403
msgid "Select directory for extra files"
msgstr "Виберіть папку з додатковими файлами"
-#: gui/options.cpp:1416
+#: gui/options.cpp:1414
msgid "Select directory for plugins"
msgstr "Виберіть папку зі втулками"
-#: gui/options.cpp:1469
+#: gui/options.cpp:1467
msgid ""
"The theme you selected does not support your current language. If you want "
"to use this theme you need to switch to another language first."
@@ -952,9 +980,31 @@ msgstr ""
"Вибрана тема не підтримує поточну мову. Якщо ви хочете використовувати цю "
"тему, потрібно в першу чергу змінити мову."
+#. I18N: You must leave "#" as is, only word 'next' is translatable
+#: gui/predictivedialog.cpp:87
+msgid "# next"
+msgstr "# наст"
+
+#: gui/predictivedialog.cpp:88
+msgid "add"
+msgstr "дод"
+
+#: gui/predictivedialog.cpp:92
+msgid "Delete char"
+msgstr "Видалити сммвол"
+
+#: gui/predictivedialog.cpp:96
+msgid "<"
+msgstr "<"
+
+#. I18N: Pre means 'Predictive', leave '*' as is
+#: gui/predictivedialog.cpp:98
+msgid "* Pre"
+msgstr "* Pre"
+
#: gui/recorderdialog.cpp:64
msgid "Recorder or Playback Gameplay"
-msgstr ""
+msgstr "Записувати або відтворити процес гри"
#: gui/recorderdialog.cpp:69 gui/recorderdialog.cpp:156
#: gui/saveload-dialog.cpp:220 gui/saveload-dialog.cpp:276
@@ -963,31 +1013,33 @@ msgstr "Видалити"
#: gui/recorderdialog.cpp:71
msgid "Record"
-msgstr ""
+msgstr "Записати"
#: gui/recorderdialog.cpp:72
-#, fuzzy
msgid "Playback"
-msgstr "Грати"
+msgstr "Відтворити"
#: gui/recorderdialog.cpp:74
msgid "Edit"
-msgstr ""
+msgstr "Редагувати"
#: gui/recorderdialog.cpp:86 gui/recorderdialog.cpp:243
#: gui/recorderdialog.cpp:253
msgid "Author: "
-msgstr ""
+msgstr "Автор: "
#: gui/recorderdialog.cpp:87 gui/recorderdialog.cpp:244
#: gui/recorderdialog.cpp:254
msgid "Notes: "
-msgstr ""
+msgstr "Примітки: "
#: gui/recorderdialog.cpp:155
-#, fuzzy
msgid "Do you really want to delete this record?"
-msgstr "Ви дійсно хочете видалити це збереження?"
+msgstr "Ви дійсно хочете видалити цей запис?"
+
+#: gui/recorderdialog.cpp:174
+msgid "Unknown Author"
+msgstr "Невідомий автор"
#: gui/saveload-dialog.cpp:167
msgid "List view"
@@ -1437,14 +1489,18 @@ msgstr ""
msgid "Start anyway"
msgstr "Все одно запустити"
-#: audio/fmopl.cpp:50
+#: audio/fmopl.cpp:62
msgid "MAME OPL emulator"
msgstr "Емулятор MAME OPL"
-#: audio/fmopl.cpp:52
+#: audio/fmopl.cpp:64
msgid "DOSBox OPL emulator"
msgstr "Емулятор DOSBox OPL"
+#: audio/fmopl.cpp:67
+msgid "ALSA Direct FM"
+msgstr "Беспосередній ALSA FM"
+
#: audio/mididrv.cpp:209
#, c-format
msgid ""
@@ -1494,7 +1550,7 @@ msgstr "Без музики"
msgid "Amiga Audio Emulator"
msgstr "Аміга Аудіо Емулятор"
-#: audio/softsynth/adlib.cpp:2285
+#: audio/adlib.cpp:2291
msgid "AdLib Emulator"
msgstr "Емулятор AdLib"
@@ -2126,38 +2182,37 @@ msgstr "Кліки вимкнено"
#: engines/agi/detection.cpp:147 engines/drascula/detection.cpp:302
#: engines/dreamweb/detection.cpp:47 engines/neverhood/detection.cpp:160
#: engines/sci/detection.cpp:394 engines/toltecs/detection.cpp:200
-#: engines/zvision/detection.cpp:246
+#: engines/zvision/detection_tables.h:51
msgid "Use original save/load screens"
msgstr "Використовувати ориг. збереження/завантаження екрани"
#: engines/agi/detection.cpp:148 engines/drascula/detection.cpp:303
#: engines/dreamweb/detection.cpp:48 engines/neverhood/detection.cpp:161
#: engines/sci/detection.cpp:395 engines/toltecs/detection.cpp:201
-#: engines/zvision/detection.cpp:247
msgid "Use the original save/load screens, instead of the ScummVM ones"
msgstr ""
"Використовувати оригінальні збереження/завантаження екрани, замість ScummVM"
#: engines/agi/detection.cpp:157
-#, fuzzy
msgid "Use an alternative palette"
-msgstr "Використовувати альтернативний вступ гри (тільки CD версія)"
+msgstr "Використовувати альтернативну палітру"
#: engines/agi/detection.cpp:158
msgid ""
"Use an alternative palette, common for all Amiga games. This was the old "
"behavior"
msgstr ""
+"Використовувати альтернативну палітру, звичайну для ігор з Amiga. Це була стара поведінка."
#: engines/agi/detection.cpp:167
-#, fuzzy
msgid "Mouse support"
-msgstr "Підтримувати Пропустити"
+msgstr "Підтримка миші"
#: engines/agi/detection.cpp:168
msgid ""
"Enables mouse support. Allows to use mouse for movement and in game menus."
msgstr ""
+"Включає підтримку миші. Дозволяє використовувати мишу для пересування та управління меню."
#: engines/agi/saveload.cpp:816 engines/drascula/saveload.cpp:349
#: engines/dreamweb/saveload.cpp:169 engines/neverhood/menumodule.cpp:886
@@ -2210,13 +2265,12 @@ msgid "Cutscene file '%s' not found!"
msgstr "Файл ролику '%s' не знайдено!"
#: engines/cge/detection.cpp:105 engines/cge2/detection.cpp:101
-#, fuzzy
msgid "Color Blind Mode"
-msgstr "Режим кліків"
+msgstr "Режим без кольору"
#: engines/cge/detection.cpp:106 engines/cge2/detection.cpp:102
msgid "Enable Color Blind Mode by default"
-msgstr ""
+msgstr "Включає режим для людей з погіршенним сприяттям кольору"
#: engines/drascula/saveload.cpp:47
msgid ""
@@ -2271,11 +2325,11 @@ msgstr "Не вдалося записати гру"
#: engines/hopkins/detection.cpp:76 engines/hopkins/detection.cpp:86
msgid "Gore Mode"
-msgstr ""
+msgstr "Режим з кров'ю"
#: engines/hopkins/detection.cpp:77 engines/hopkins/detection.cpp:87
msgid "Enable Gore Mode when available"
-msgstr ""
+msgstr "Увімкнути режим з кров'ю, якщо є доступний"
#. I18N: Studio audience adds an applause and cheering sounds whenever
#. Malcolm makes a joke.
@@ -2407,6 +2461,12 @@ msgid ""
"Do you wish to use this save game file with ScummVM?\n"
"\n"
msgstr ""
+"Наступний оригінальний файл стану гри було знайдено у вашій папці з грою:\n"
+"\n"
+"%s %s\n"
+"\n"
+"Чи ви бажаєте використовувати цей стан гри зі ScummVM?\n"
+"\n"
#: engines/kyra/saveload_eob.cpp:590
#, c-format
@@ -2414,6 +2474,8 @@ msgid ""
"A save game file was found in the specified slot %d. Overwrite?\n"
"\n"
msgstr ""
+"Файл стану гри було знайдено у вказаній позиції %d. Перетерти?\n"
+"\n"
#: engines/kyra/saveload_eob.cpp:623
#, c-format
@@ -2425,6 +2487,10 @@ msgid ""
"'import_savefile'.\n"
"\n"
msgstr ""
+"%d оригінальних файлів зі станом гри було успішно імпортовано у\n"
+"ScummVM. Якщо ви захочете пізніше імпортувати оригінальні файли зі станом гри, вам потрібно\n"
+"відкрити консоль відладчика і ввести команду 'import_savefile'.\n"
+"\n"
#. I18N: Option for fast scene switching
#: engines/mohawk/dialogs.cpp:92 engines/mohawk/dialogs.cpp:167
@@ -2640,15 +2706,13 @@ msgstr "Ігру призупинено. Натисніть пробіл для продовження."
#. "Moechten Sie wirklich neu starten? (J/N)J"
#. Will react to J as 'Yes'
#: engines/scumm/dialogs.cpp:183
-#, fuzzy
msgid "Are you sure you want to restart? (Y/N)Y"
-msgstr "Ви упевнені, що хочете розпочати спочатку? (Y/N)"
+msgstr "Ви упевнені, що хочете розпочати спочатку? (Y/N)Y"
#. I18N: you may specify 'Yes' symbol at the end of the line. See previous comment
#: engines/scumm/dialogs.cpp:185
-#, fuzzy
msgid "Are you sure you want to quit? (Y/N)Y"
-msgstr "Ви упевнені, що хочете вийти? (Y/N)"
+msgstr "Ви упевнені, що хочете вийти? (Y/N)Y"
#: engines/scumm/dialogs.cpp:190
msgid "Play"
@@ -3156,25 +3220,24 @@ msgid "Third kid"
msgstr "Третя дитина"
#: engines/scumm/help.cpp:292
-#, fuzzy
msgid "Toggle Inventory/IQ Points display"
-msgstr "Перемкнути показування в центрі екрану"
+msgstr "Перемкнути показування інвентарю або значення IQ"
#: engines/scumm/help.cpp:293
msgid "Toggle Keyboard/Mouse Fighting (*)"
-msgstr ""
+msgstr "Перемкнути керування бійкою Клавіатура/Миша (*)"
#: engines/scumm/help.cpp:295
msgid "* Keyboard Fighting is always on,"
-msgstr ""
+msgstr "* Управління клавіатурою завжди влючене, тому, "
#: engines/scumm/help.cpp:296
msgid " so despite the in-game message this"
-msgstr ""
+msgstr " незважаючи на повідомлення гри, це налаштування"
#: engines/scumm/help.cpp:297
msgid " actually toggles Mouse Fighting Off/On"
-msgstr ""
+msgstr " насправді включає та виключає управління мишею."
#: engines/scumm/help.cpp:304
msgid "Fighting controls (numpad):"
@@ -3211,7 +3274,7 @@ msgstr "Бити знизу"
#: engines/scumm/help.cpp:315
msgid "Sucker punch"
-msgstr ""
+msgstr "Бити ззаду"
#: engines/scumm/help.cpp:318
msgid "These are for Indy on left."
@@ -3269,6 +3332,22 @@ msgstr "Летіти направо"
msgid "Fly to lower right"
msgstr "Летіти донизу направо"
+#: engines/scumm/input.cpp:572
+msgid "Snap scroll on"
+msgstr "Прокрутка стрибками"
+
+#: engines/scumm/input.cpp:574
+msgid "Snap scroll off"
+msgstr "Вмикає прокрутку стрибками"
+
+#: engines/scumm/input.cpp:587
+msgid "Music volume: "
+msgstr "Гучність музики: "
+
+#: engines/scumm/input.cpp:604
+msgid "Subtitle speed: "
+msgstr "Швид. субтитрів: "
+
#: engines/scumm/scumm.cpp:1832
#, c-format
msgid ""
@@ -3279,27 +3358,30 @@ msgstr ""
"LucasArts, проте %s відсутній. Перемикаюсь на AdLib."
#: engines/scumm/scumm.cpp:2644
-#, fuzzy
msgid ""
"Usually, Maniac Mansion would start now. But for that to work, the game "
"files for Maniac Mansion have to be in the 'Maniac' directory inside the "
"Tentacle game directory, and the game has to be added to ScummVM."
msgstr ""
-"Зазвичай, зараз би запустився Maniac Mansion. Проте ScummVM ще цього не "
-"вміє. Щоб грати у нього, оберіть 'Додати гру' у початковому меню ScummVM, і "
-"виберіть папку Maniac всередені пвпки з грою Tentacle."
+"Зазвичай, зараз би запустився Maniac Mansion. Але, щоб це могло працювати, "
+"вам потрібно переписати файли гри Maniac Manssion у папку Maniac всередині "
+"пвпки з грою Tentacle, а також додати саму гру у ScummVM."
#: engines/scumm/players/player_v3m.cpp:129
msgid ""
"Could not find the 'Loom' Macintosh executable to read the\n"
"instruments from. Music will be disabled."
msgstr ""
+"Не вадлося знайти файл програми 'Loom' Macintosh аби прочитати\n"
+"з нього інструменти. Музику було вимкнено."
#: engines/scumm/players/player_v5m.cpp:107
msgid ""
"Could not find the 'Monkey Island' Macintosh executable to read the\n"
"instruments from. Music will be disabled."
msgstr ""
+"Не вадлося знайти файл програми 'Monkey Island' Macintosh аби прочитати\n"
+"з нього інструменти. Музику було вимкнено."
#: engines/sky/compact.cpp:130
msgid ""
@@ -3413,130 +3495,46 @@ msgstr ""
#: engines/wintermute/detection.cpp:58
msgid "Show FPS-counter"
-msgstr ""
+msgstr "Показати лічильник кадріи"
#: engines/wintermute/detection.cpp:59
msgid "Show the current number of frames per second in the upper left corner"
+msgstr "Показує у верньому лівому куті поточну кількість кадрів на секунду"
+
+#: engines/zvision/detection_tables.h:52
+msgid "Use the original save/load screens instead of the ScummVM interface"
msgstr ""
+"Використовувати оригінальні екрани збереження/завантаження замість ScummVM"
-#: engines/zvision/detection.cpp:256
+#: engines/zvision/detection_tables.h:61
msgid "Double FPS"
-msgstr ""
+msgstr "Подвійна FPS"
-#: engines/zvision/detection.cpp:257
-msgid "Increase game FPS from 30 to 60"
-msgstr ""
+#: engines/zvision/detection_tables.h:62
+msgid "Increase framerate from 30 to 60 FPS"
+msgstr "Підвищити кількість кадрів на секунду з 30 до 60"
-#: engines/zvision/detection.cpp:266
-#, fuzzy
+#: engines/zvision/detection_tables.h:71
msgid "Enable Venus"
-msgstr "Увімкнути режим Геліум"
+msgstr "Увімкнути Venus"
-#: engines/zvision/detection.cpp:267
+#: engines/zvision/detection_tables.h:72
msgid "Enable the Venus help system"
-msgstr ""
+msgstr "Увімкнути допоміжну систему Venus"
-#: engines/zvision/detection.cpp:276
+#: engines/zvision/detection_tables.h:81
msgid "Disable animation while turning"
-msgstr ""
+msgstr "Виключити анімацію під час поворотів"
-#: engines/zvision/detection.cpp:277
-msgid "Disable animation while turning in panoramic mode"
-msgstr ""
+#: engines/zvision/detection_tables.h:82
+msgid "Disable animation while turning in panorama mode"
+msgstr "Виключає анімацію під ча поворотів у режимі панорами"
-#: engines/zvision/detection.cpp:286
-msgid "Use the hires MPEG movies"
-msgstr ""
+#: engines/zvision/detection_tables.h:91
+msgid "Use high resolution MPEG video"
+msgstr "Використовувати відео MPEG з підвищеною роздільністю"
-#: engines/zvision/detection.cpp:287
-#, fuzzy
-msgid ""
-"Use the hires MPEG movies of the DVD version, instead of the lowres AVI ones"
+#: engines/zvision/detection_tables.h:92
+msgid "Use MPEG video from the DVD version, instead of lower resolution AVI"
msgstr ""
-"Використовувати альтернативний набір срібних курсорів, замість звичайних "
-"золотих"
-
-#~ msgid "EGA undithering"
-#~ msgstr "EGA без растрування"
-
-#~ msgid "Enable undithering in EGA games"
-#~ msgstr "Увімкнути анти-згладжування в EGA іграх"
-
-#~ msgid "MPEG-2 cutscenes found but ScummVM has been built without MPEG-2"
-#~ msgstr ""
-#~ "Знайдені ролики MPEG-2, але ScummVM був зібраний без підтримки MPEG-2"
-
-#~ msgctxt "lowres"
-#~ msgid "Mass Add..."
-#~ msgstr "Дод. багато..."
-
-#~ msgid ""
-#~ "Turns off General MIDI mapping for games with Roland MT-32 soundtrack"
-#~ msgstr ""
-#~ "Вимикає мапінг General MIDI для ігор зі звуковою доріжкою для Roland MT-32"
-
-#~ msgid "Standard (16bpp)"
-#~ msgstr "Стандартний растеризатор (16bpp)"
-
-#~ msgid "MPEG2 cutscenes are no longer supported"
-#~ msgstr "Ролики MPEG2 більше не підтримуються"
-
-#~ msgid "OpenGL Normal"
-#~ msgstr "OpenGL нормальний"
-
-#~ msgid "OpenGL Conserve"
-#~ msgstr "OpenGL Збережений"
-
-#~ msgid "OpenGL Original"
-#~ msgstr "OpenGL Оригінальний"
-
-#~ msgid "Current display mode"
-#~ msgstr "Поточний відеорежим"
-
-#~ msgid "Current scale"
-#~ msgstr "Поточний масштаб"
-
-#~ msgid "Active filter mode: Linear"
-#~ msgstr "Активний режим фільтрації: Лінійний"
-
-#~ msgid "Active filter mode: Nearest"
-#~ msgstr "Активний режим фільтрації: Найближче"
-
-#~ msgid "Enable Roland GS Mode"
-#~ msgstr "Увімкнути режим Roland GS"
-
-#~ msgid "Hercules Green"
-#~ msgstr "Hercules Зелений"
-
-#~ msgid "Hercules Amber"
-#~ msgstr "Hercules Бурштинний"
-
-#~ msgctxt "lowres"
-#~ msgid "Hercules Green"
-#~ msgstr "Hercules Зелений"
-
-#~ msgctxt "lowres"
-#~ msgid "Hercules Amber"
-#~ msgstr "Hercules Бурштинний"
-
-#~ msgid "Save game failed!"
-#~ msgstr "Не вдалося зберегти гру!"
-
-#~ msgctxt "lowres"
-#~ msgid "Add Game..."
-#~ msgstr "Додати гру..."
-
-#~ msgid "Add Game..."
-#~ msgstr "Додати гру..."
-
-#~ msgid "Discovered %d new games."
-#~ msgstr "Знайдено %d нових ігор."
-
-#~ msgid "Command line argument not processed"
-#~ msgstr "Аргументи командного рядку не оброблені"
-
-#~ msgid "FM Towns Emulator"
-#~ msgstr "Емулятор FM Towns"
-
-#~ msgid "Invalid Path"
-#~ msgstr "Неправильний шлях"
+"Використовувати відео MPEG з DVD-версії, замість файлів AVI з ніжчою роздільною здатністю"
diff --git a/ports.mk b/ports.mk
index 398a0c4b5a..0ffc4bf548 100644
--- a/ports.mk
+++ b/ports.mk
@@ -331,5 +331,13 @@ endif
@echo Now run
@echo "\tgit commit -m 'DISTS: Generated Code::Blocks and MSVC project files'"
+# Target to create Raspberry Pi zip containig binary and specific README
+raspberrypi_dist:
+ mkdir -p $(srcdir)/scummvm-rpi
+ cp $(srcdir)/backends/platform/sdl/raspberrypi/README.RASPBERRYPI $(srcdir)/scummvm-rpi/README
+ cp $(srcdir)/scummvm $(srcdir)/scummvm-rpi
+ zip -r scummvm-rpi.zip scummvm-rpi
+ rm -f -R scummvm-rpi
+
# Mark special targets as phony
.PHONY: deb bundle osxsnap win32dist install uninstall
diff --git a/test/common/algorithm.h b/test/common/algorithm.h
index 6eecae3635..ccf6469f67 100644
--- a/test/common/algorithm.h
+++ b/test/common/algorithm.h
@@ -47,10 +47,28 @@ public:
void test_pod_sort() {
{
+ int dummy;
+ Common::sort(&dummy, &dummy);
+ TS_ASSERT_EQUALS(checkSort(&dummy, &dummy, Common::Less<int>()), true);
+ }
+ {
+ int array[] = { 12 };
+ Common::sort(array, ARRAYEND(array));
+ TS_ASSERT_EQUALS(checkSort(array, ARRAYEND(array), Common::Less<int>()), true);
+
+ // already sorted
+ Common::sort(array, ARRAYEND(array));
+ TS_ASSERT_EQUALS(checkSort(array, ARRAYEND(array), Common::Less<int>()), true);
+ }
+ {
int array[] = { 63, 11, 31, 72, 1, 48, 32, 69, 38, 31 };
Common::sort(array, ARRAYEND(array));
TS_ASSERT_EQUALS(checkSort(array, ARRAYEND(array), Common::Less<int>()), true);
+ int sortedArray[] = { 1, 11, 31, 31, 32, 38, 48, 63, 69, 72 };
+ for (size_t i = 0; i < 10; ++i)
+ TS_ASSERT_EQUALS(array[i], sortedArray[i]);
+
// already sorted
Common::sort(array, ARRAYEND(array));
TS_ASSERT_EQUALS(checkSort(array, ARRAYEND(array), Common::Less<int>()), true);
diff --git a/video/avi_decoder.cpp b/video/avi_decoder.cpp
index 700975d9a2..52a55f600c 100644
--- a/video/avi_decoder.cpp
+++ b/video/avi_decoder.cpp
@@ -31,6 +31,7 @@
// Audio Codecs
#include "audio/decoders/adpcm.h"
+#include "audio/decoders/mp3.h"
#include "audio/decoders/raw.h"
// Video Codecs
@@ -277,7 +278,9 @@ void AVIDecoder::handleStreamHeader(uint32 size) {
if (wvInfo.channels == 2)
sHeader.sampleSize /= 2;
- addTrack(createAudioTrack(sHeader, wvInfo));
+ AVIAudioTrack *track = createAudioTrack(sHeader, wvInfo);
+ track->createAudioStream();
+ addTrack(track);
}
// Ensure that we're at the end of the chunk
@@ -840,37 +843,18 @@ void AVIDecoder::AVIVideoTrack::setDither(const byte *palette) {
}
AVIDecoder::AVIAudioTrack::AVIAudioTrack(const AVIStreamHeader &streamHeader, const PCMWaveFormat &waveFormat, Audio::Mixer::SoundType soundType)
- : _audsHeader(streamHeader), _wvInfo(waveFormat), _soundType(soundType), _curChunk(0) {
- _audStream = createAudioStream();
+ : _audsHeader(streamHeader), _wvInfo(waveFormat), _soundType(soundType), _audioStream(0), _packetStream(0), _curChunk(0) {
}
AVIDecoder::AVIAudioTrack::~AVIAudioTrack() {
- delete _audStream;
+ delete _audioStream;
}
void AVIDecoder::AVIAudioTrack::queueSound(Common::SeekableReadStream *stream) {
- if (_audStream) {
- if (_wvInfo.tag == kWaveFormatPCM) {
- byte flags = 0;
- if (_audsHeader.sampleSize == 2)
- flags |= Audio::FLAG_16BITS | Audio::FLAG_LITTLE_ENDIAN;
- else
- flags |= Audio::FLAG_UNSIGNED;
-
- if (_wvInfo.channels == 2)
- flags |= Audio::FLAG_STEREO;
-
- _audStream->queueAudioStream(Audio::makeRawStream(stream, _wvInfo.samplesPerSec, flags, DisposeAfterUse::YES), DisposeAfterUse::YES);
- } else if (_wvInfo.tag == kWaveFormatMSADPCM) {
- _audStream->queueAudioStream(Audio::makeADPCMStream(stream, DisposeAfterUse::YES, stream->size(), Audio::kADPCMMS, _wvInfo.samplesPerSec, _wvInfo.channels, _wvInfo.blockAlign), DisposeAfterUse::YES);
- } else if (_wvInfo.tag == kWaveFormatMSIMAADPCM) {
- _audStream->queueAudioStream(Audio::makeADPCMStream(stream, DisposeAfterUse::YES, stream->size(), Audio::kADPCMMSIma, _wvInfo.samplesPerSec, _wvInfo.channels, _wvInfo.blockAlign), DisposeAfterUse::YES);
- } else if (_wvInfo.tag == kWaveFormatDK3) {
- _audStream->queueAudioStream(Audio::makeADPCMStream(stream, DisposeAfterUse::YES, stream->size(), Audio::kADPCMDK3, _wvInfo.samplesPerSec, _wvInfo.channels, _wvInfo.blockAlign), DisposeAfterUse::YES);
- }
- } else {
+ if (_packetStream)
+ _packetStream->queuePacket(stream);
+ else
delete stream;
- }
_curChunk++;
}
@@ -882,17 +866,21 @@ void AVIDecoder::AVIAudioTrack::skipAudio(const Audio::Timestamp &time, const Au
if (skipFrames <= 0)
return;
- if (_audStream->isStereo())
+ Audio::AudioStream *audioStream = getAudioStream();
+ if (!audioStream)
+ return;
+
+ if (audioStream->isStereo())
skipFrames *= 2;
int16 *tempBuffer = new int16[skipFrames];
- _audStream->readBuffer(tempBuffer, skipFrames);
+ audioStream->readBuffer(tempBuffer, skipFrames);
delete[] tempBuffer;
}
void AVIDecoder::AVIAudioTrack::resetStream() {
- delete _audStream;
- _audStream = createAudioStream();
+ delete _audioStream;
+ createAudioStream();
_curChunk = 0;
}
@@ -901,19 +889,50 @@ bool AVIDecoder::AVIAudioTrack::rewind() {
return true;
}
-Audio::AudioStream *AVIDecoder::AVIAudioTrack::getAudioStream() const {
- return _audStream;
-}
+void AVIDecoder::AVIAudioTrack::createAudioStream() {
+ _packetStream = 0;
+
+ switch (_wvInfo.tag) {
+ case kWaveFormatPCM: {
+ byte flags = 0;
+ if (_audsHeader.sampleSize == 2)
+ flags |= Audio::FLAG_16BITS | Audio::FLAG_LITTLE_ENDIAN;
+ else
+ flags |= Audio::FLAG_UNSIGNED;
-Audio::QueuingAudioStream *AVIDecoder::AVIAudioTrack::createAudioStream() {
- if (_wvInfo.tag == kWaveFormatPCM || _wvInfo.tag == kWaveFormatMSADPCM || _wvInfo.tag == kWaveFormatMSIMAADPCM || _wvInfo.tag == kWaveFormatDK3)
- return Audio::makeQueuingAudioStream(_wvInfo.samplesPerSec, _wvInfo.channels == 2);
- else if (_wvInfo.tag == kWaveFormatMP3)
- warning("Unsupported AVI MP3 tracks");
- else if (_wvInfo.tag != kWaveFormatNone) // No sound
+ if (_wvInfo.channels == 2)
+ flags |= Audio::FLAG_STEREO;
+
+ _packetStream = Audio::makePacketizedRawStream(_wvInfo.samplesPerSec, flags);
+ break;
+ }
+ case kWaveFormatMSADPCM:
+ _packetStream = Audio::makePacketizedADPCMStream(Audio::kADPCMMS, _wvInfo.samplesPerSec, _wvInfo.channels, _wvInfo.blockAlign);
+ break;
+ case kWaveFormatMSIMAADPCM:
+ _packetStream = Audio::makePacketizedADPCMStream(Audio::kADPCMMSIma, _wvInfo.samplesPerSec, _wvInfo.channels, _wvInfo.blockAlign);
+ break;
+ case kWaveFormatDK3:
+ _packetStream = Audio::makePacketizedADPCMStream(Audio::kADPCMDK3, _wvInfo.samplesPerSec, _wvInfo.channels, _wvInfo.blockAlign);
+ break;
+ case kWaveFormatMP3:
+#ifdef USE_MAD
+ _packetStream = Audio::makePacketizedMP3Stream(_wvInfo.channels, _wvInfo.samplesPerSec);
+#else
+ warning("AVI MP3 stream found, but no libmad support compiled in");
+#endif
+ break;
+ case kWaveFormatNone:
+ break;
+ default:
warning("Unsupported AVI audio format %d", _wvInfo.tag);
+ break;
+ }
- return 0;
+ if (_packetStream)
+ _audioStream = _packetStream;
+ else
+ _audioStream = Audio::makeNullAudioStream();
}
AVIDecoder::TrackStatus::TrackStatus() : track(0), chunkSearchOffset(0) {
diff --git a/video/avi_decoder.h b/video/avi_decoder.h
index 6c1ce1a4b9..96d9e821ff 100644
--- a/video/avi_decoder.h
+++ b/video/avi_decoder.h
@@ -32,7 +32,8 @@
#include "audio/mixer.h"
namespace Audio {
-class QueuingAudioStream;
+class AudioStream;
+class PacketizedAudioStream;
}
namespace Common {
@@ -215,6 +216,7 @@ protected:
AVIAudioTrack(const AVIStreamHeader &streamHeader, const PCMWaveFormat &waveFormat, Audio::Mixer::SoundType soundType);
~AVIAudioTrack();
+ virtual void createAudioStream();
virtual void queueSound(Common::SeekableReadStream *stream);
Audio::Mixer::SoundType getSoundType() const { return _soundType; }
void skipAudio(const Audio::Timestamp &time, const Audio::Timestamp &frameTime);
@@ -226,7 +228,7 @@ protected:
bool rewind();
protected:
- Audio::AudioStream *getAudioStream() const;
+ Audio::AudioStream *getAudioStream() const { return _audioStream; }
// Audio Codecs
enum {
@@ -241,8 +243,8 @@ protected:
AVIStreamHeader _audsHeader;
PCMWaveFormat _wvInfo;
Audio::Mixer::SoundType _soundType;
- Audio::QueuingAudioStream *_audStream;
- Audio::QueuingAudioStream *createAudioStream();
+ Audio::AudioStream *_audioStream;
+ Audio::PacketizedAudioStream *_packetStream;
uint32 _curChunk;
};
diff --git a/video/mpegps_decoder.cpp b/video/mpegps_decoder.cpp
index d8f7f5a68c..6942efbe87 100644
--- a/video/mpegps_decoder.cpp
+++ b/video/mpegps_decoder.cpp
@@ -22,6 +22,7 @@
#include "audio/audiostream.h"
#include "audio/decoders/raw.h"
+#include "audio/decoders/mp3.h"
#include "common/debug.h"
#include "common/endian.h"
#include "common/stream.h"
@@ -142,7 +143,7 @@ void MPEGPSDecoder::readNextPacket() {
} else if (startCode >= 0x1C0 && startCode <= 0x1DF) {
#ifdef USE_MAD
// MPEG Audio stream
- MPEGAudioTrack *audioTrack = new MPEGAudioTrack(packet);
+ MPEGAudioTrack *audioTrack = new MPEGAudioTrack(*packet);
stream = audioTrack;
_streamMap[startCode] = audioTrack;
addTrack(audioTrack);
@@ -158,6 +159,8 @@ void MPEGPSDecoder::readNextPacket() {
}
if (stream) {
+ packet->seek(0);
+
bool done = stream->sendPacket(packet, pts, dts);
if (done && stream->getStreamType() == MPEGStream::kStreamTypeVideo)
@@ -510,54 +513,16 @@ void MPEGPSDecoder::MPEGVideoTrack::findDimensions(Common::SeekableReadStream *f
// The audio code here is almost entirely based on what we do in mp3.cpp
-MPEGPSDecoder::MPEGAudioTrack::MPEGAudioTrack(Common::SeekableReadStream *firstPacket) {
- // The MAD_BUFFER_GUARD must always contain zeros (the reason
- // for this is that the Layer III Huffman decoder of libMAD
- // may read a few bytes beyond the end of the input buffer).
- memset(_buf + BUFFER_SIZE, 0, MAD_BUFFER_GUARD);
-
- _state = MP3_STATE_INIT;
- _audStream = 0;
-
- // Find out our audio parameters
- initStream(firstPacket);
-
- while (_state != MP3_STATE_EOS)
- readHeader(firstPacket);
-
- _audStream = Audio::makeQueuingAudioStream(_frame.header.samplerate, MAD_NCHANNELS(&_frame.header) == 2);
-
- deinitStream();
-
- firstPacket->seek(0);
- _state = MP3_STATE_INIT;
+MPEGPSDecoder::MPEGAudioTrack::MPEGAudioTrack(Common::SeekableReadStream &firstPacket) {
+ _audStream = Audio::makePacketizedMP3Stream(firstPacket);
}
MPEGPSDecoder::MPEGAudioTrack::~MPEGAudioTrack() {
- deinitStream();
delete _audStream;
}
-static inline int scaleSample(mad_fixed_t sample) {
- // round
- sample += (1L << (MAD_F_FRACBITS - 16));
-
- // clip
- if (sample > MAD_F_ONE - 1)
- sample = MAD_F_ONE - 1;
- else if (sample < -MAD_F_ONE)
- sample = -MAD_F_ONE;
-
- // quantize and scale to not saturate when mixing a lot of channels
- return sample >> (MAD_F_FRACBITS + 1 - 16);
-}
-
bool MPEGPSDecoder::MPEGAudioTrack::sendPacket(Common::SeekableReadStream *packet, uint32 pts, uint32 dts) {
- while (_state != MP3_STATE_EOS)
- decodeMP3Data(packet);
-
- _state = MP3_STATE_READY;
- delete packet;
+ _audStream->queuePacket(packet);
return true;
}
@@ -565,168 +530,6 @@ Audio::AudioStream *MPEGPSDecoder::MPEGAudioTrack::getAudioStream() const {
return _audStream;
}
-void MPEGPSDecoder::MPEGAudioTrack::initStream(Common::SeekableReadStream *packet) {
- if (_state != MP3_STATE_INIT)
- deinitStream();
-
- // Init MAD
- mad_stream_init(&_stream);
- mad_frame_init(&_frame);
- mad_synth_init(&_synth);
-
- // Reset the stream data
- packet->seek(0, SEEK_SET);
-
- // Update state
- _state = MP3_STATE_READY;
-
- // Read the first few sample bytes
- readMP3Data(packet);
-}
-
-void MPEGPSDecoder::MPEGAudioTrack::deinitStream() {
- if (_state == MP3_STATE_INIT)
- return;
-
- // Deinit MAD
- mad_synth_finish(&_synth);
- mad_frame_finish(&_frame);
- mad_stream_finish(&_stream);
-
- _state = MP3_STATE_EOS;
-}
-
-void MPEGPSDecoder::MPEGAudioTrack::readMP3Data(Common::SeekableReadStream *packet) {
- uint32 remaining = 0;
-
- // Give up immediately if we already used up all data in the stream
- if (packet->eos()) {
- _state = MP3_STATE_EOS;
- return;
- }
-
- if (_stream.next_frame) {
- // If there is still data in the MAD stream, we need to preserve it.
- // Note that we use memmove, as we are reusing the same buffer,
- // and hence the data regions we copy from and to may overlap.
- remaining = _stream.bufend - _stream.next_frame;
- assert(remaining < BUFFER_SIZE); // Paranoia check
- memmove(_buf, _stream.next_frame, remaining);
- }
-
- memset(_buf + remaining, 0, BUFFER_SIZE - remaining);
-
- // Try to read the next block
- uint32 size = packet->read(_buf + remaining, BUFFER_SIZE - remaining);
- if (size == 0) {
- _state = MP3_STATE_EOS;
- return;
- }
-
- // Feed the data we just read into the stream decoder
- _stream.error = MAD_ERROR_NONE;
- mad_stream_buffer(&_stream, _buf, size + remaining);
-}
-
-void MPEGPSDecoder::MPEGAudioTrack::readHeader(Common::SeekableReadStream *packet) {
- if (_state != MP3_STATE_READY)
- return;
-
- // If necessary, load more data into the stream decoder
- if (_stream.error == MAD_ERROR_BUFLEN)
- readMP3Data(packet);
-
- while (_state != MP3_STATE_EOS) {
- _stream.error = MAD_ERROR_NONE;
-
- // Decode the next header. Note: mad_frame_decode would do this for us, too.
- // However, for seeking we don't want to decode the full frame (else it would
- // be far too slow). Hence we perform this explicitly in a separate step.
- if (mad_header_decode(&_frame.header, &_stream) == -1) {
- if (_stream.error == MAD_ERROR_BUFLEN) {
- readMP3Data(packet); // Read more data
- continue;
- } else if (MAD_RECOVERABLE(_stream.error)) {
- debug(6, "MPEGAudioTrack::readHeader(): Recoverable error in mad_header_decode (%s)", mad_stream_errorstr(&_stream));
- continue;
- } else {
- warning("MPEGAudioTrack::readHeader(): Unrecoverable error in mad_header_decode (%s)", mad_stream_errorstr(&_stream));
- break;
- }
- }
-
- break;
- }
-
- if (_stream.error != MAD_ERROR_NONE)
- _state = MP3_STATE_EOS;
-}
-
-void MPEGPSDecoder::MPEGAudioTrack::decodeMP3Data(Common::SeekableReadStream *packet) {
- if (_state == MP3_STATE_INIT)
- initStream(packet);
-
- if (_state == MP3_STATE_EOS)
- return;
-
- do {
- // If necessary, load more data into the stream decoder
- if (_stream.error == MAD_ERROR_BUFLEN)
- readMP3Data(packet);
-
- while (_state == MP3_STATE_READY) {
- _stream.error = MAD_ERROR_NONE;
-
- // Decode the next frame
- if (mad_frame_decode(&_frame, &_stream) == -1) {
- if (_stream.error == MAD_ERROR_BUFLEN) {
- break; // Read more data
- } else if (MAD_RECOVERABLE(_stream.error)) {
- // Note: we will occasionally see MAD_ERROR_BADDATAPTR errors here.
- // These are normal and expected (caused by our frame skipping (i.e. "seeking")
- // code above).
- debug(6, "MPEGAudioTrack::decodeMP3Data(): Recoverable error in mad_frame_decode (%s)", mad_stream_errorstr(&_stream));
- continue;
- } else {
- warning("MPEGAudioTrack::decodeMP3Data(): Unrecoverable error in mad_frame_decode (%s)", mad_stream_errorstr(&_stream));
- break;
- }
- }
-
- // Synthesize PCM data
- mad_synth_frame(&_synth, &_frame);
-
- // Output it to our queue
- if (_synth.pcm.length != 0) {
- byte *buffer = (byte *)malloc(_synth.pcm.length * 2 * MAD_NCHANNELS(&_frame.header));
- int16 *ptr = (int16 *)buffer;
-
- for (int i = 0; i < _synth.pcm.length; i++) {
- *ptr++ = (int16)scaleSample(_synth.pcm.samples[0][i]);
-
- if (MAD_NCHANNELS(&_frame.header) == 2)
- *ptr++ = (int16)scaleSample(_synth.pcm.samples[1][i]);
- }
-
- int flags = Audio::FLAG_16BITS;
-
- if (_audStream->isStereo())
- flags |= Audio::FLAG_STEREO;
-
-#ifdef SCUMM_LITTLE_ENDIAN
- flags |= Audio::FLAG_LITTLE_ENDIAN;
-#endif
-
- _audStream->queueBuffer(buffer, _synth.pcm.length * 2 * MAD_NCHANNELS(&_frame.header), DisposeAfterUse::YES, flags);
- }
- break;
- }
- } while (_state != MP3_STATE_EOS && _stream.error == MAD_ERROR_BUFLEN);
-
- if (_stream.error != MAD_ERROR_NONE)
- _state = MP3_STATE_EOS;
-}
-
#endif
} // End of namespace Video
diff --git a/video/mpegps_decoder.h b/video/mpegps_decoder.h
index 0184d6f9ba..bdff879d96 100644
--- a/video/mpegps_decoder.h
+++ b/video/mpegps_decoder.h
@@ -27,12 +27,8 @@
#include "graphics/surface.h"
#include "video/video_decoder.h"
-#ifdef USE_MAD
-#include <mad.h>
-#endif
-
namespace Audio {
-class QueuingAudioStream;
+class PacketizedAudioStream;
}
namespace Common {
@@ -115,10 +111,9 @@ private:
#ifdef USE_MAD
// An MPEG audio track
- // TODO: Merge this with the normal MP3Stream somehow
class MPEGAudioTrack : public AudioTrack, public MPEGStream {
public:
- MPEGAudioTrack(Common::SeekableReadStream *firstPacket);
+ MPEGAudioTrack(Common::SeekableReadStream &firstPacket);
~MPEGAudioTrack();
bool sendPacket(Common::SeekableReadStream *packet, uint32 pts, uint32 dts);
@@ -128,32 +123,7 @@ private:
Audio::AudioStream *getAudioStream() const;
private:
- Audio::QueuingAudioStream *_audStream;
-
- enum State {
- MP3_STATE_INIT, // Need to init the decoder
- MP3_STATE_READY, // ready for processing data
- MP3_STATE_EOS // end of data reached (may need to loop)
- };
-
- State _state;
-
- mad_stream _stream;
- mad_frame _frame;
- mad_synth _synth;
-
- enum {
- BUFFER_SIZE = 5 * 8192
- };
-
- // This buffer contains a slab of input data
- byte _buf[BUFFER_SIZE + MAD_BUFFER_GUARD];
-
- void initStream(Common::SeekableReadStream *packet);
- void deinitStream();
- void readMP3Data(Common::SeekableReadStream *packet);
- void readHeader(Common::SeekableReadStream *packet);
- void decodeMP3Data(Common::SeekableReadStream *packet);
+ Audio::PacketizedAudioStream *_audStream;
};
#endif